汽车价格的回归预测项目

注意:本文引用自专业人工智能社区Venus AI

更多AI知识请参考原站 ([www.aideeplearning.cn])

问题描述

汽车价格预测是一个旨在预估二手车市场中汽车售价的问题。这个问题涉及到分析各种影响汽车价格的因素,如品牌、车龄、性能参数等。准确的价格预测对于卖家定价和买家预算规划都非常重要。

项目目标

此项目的主要目标是开发一个预测模型,该模型能够根据汽车的各种特征准确预测其市场价值。这个模型应能处理不同类型的数据,包括数值数据和类别数据,并在预测准确度和计算效率之间取得平衡。

项目应用

  • 二手车交易:帮助买家和卖家了解特定车辆的公平市场价值。
  • 汽车评估:为汽车评估公司提供自动化的价值评估工具。
  • 市场分析:分析市场趋势,预测未来价值。
  • 个人决策支持:帮助个人用户在购买或出售汽车时做出更明智的决策。

数据集描述

这个数据集包含以下特征:

汽车ID,符号,汽车名称,燃油类型,吸气,门号,车身,驱动轮,发动机位置,轴距,车长,车宽,车高,整备质量,发动机类型,气缸数,发动机尺寸,燃油系统,硼比,冲程,压缩比,马力,峰值转速,城市英里数,高速公路英里数。

模型选择和科学计算库依赖

本项目使用的模型:

  •         线性回归
  •         决策树回归
  •         随机森林回归

本项目依赖的科学计算库

  • matplotlib==3.7.1
  • pandas==2.0.2
  • scikit_learn==1.2.2
  • seaborn==0.13.0

项目详细代码

#imports
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.tree import DecisionTreeRegressor
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
data = pd.read_csv('car_price.csv')
data.head(10)

1. 探索数据特性

print("Rows: ",data.shape[0])
print("Columns: ",data.shape[1])
Rows:  205
Columns:  26
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 205 entries, 0 to 204
Data columns (total 26 columns):#   Column            Non-Null Count  Dtype  
---  ------            --------------  -----  0   car_ID            205 non-null    int64  1   symboling         205 non-null    int64  2   CarName           205 non-null    object 3   fueltype          205 non-null    object 4   aspiration        205 non-null    object 5   doornumber        205 non-null    object 6   carbody           205 non-null    object 7   drivewheel        205 non-null    object 8   enginelocation    205 non-null    object 9   wheelbase         205 non-null    float6410  carlength         205 non-null    float6411  carwidth          205 non-null    float6412  carheight         205 non-null    float6413  curbweight        205 non-null    int64  14  enginetype        205 non-null    object 15  cylindernumber    205 non-null    object 16  enginesize        205 non-null    int64  17  fuelsystem        205 non-null    object 18  boreratio         205 non-null    float6419  stroke            205 non-null    float6420  compressionratio  205 non-null    float6421  horsepower        205 non-null    int64  22  peakrpm           205 non-null    int64  23  citympg           205 non-null    int64  24  highwaympg        205 non-null    int64  25  price             205 non-null    float64
dtypes: float64(8), int64(8), object(10)
memory usage: 41.8+ KB
data.isna().sum()
# 没有空值
car_ID              0
symboling           0
CarName             0
fueltype            0
aspiration          0
doornumber          0
carbody             0
drivewheel          0
enginelocation      0
wheelbase           0
carlength           0
carwidth            0
carheight           0
curbweight          0
enginetype          0
cylindernumber      0
enginesize          0
fuelsystem          0
boreratio           0
stroke              0
compressionratio    0
horsepower          0
peakrpm             0
citympg             0
highwaympg          0
price               0
dtype: int64
data.duplicated().sum()
# 没有重复值

0

data.groupby("CarName").sum(numeric_only=True)

# 删除 CarName, CarID 因为它不会给回归任务增加太多价值
data = data.drop(['car_ID','CarName'],axis=1)
data.head(1)

sns.histplot(data=data, x="price")

<Axes: xlabel='price', ylabel='Count'>

                            

plt.figure(figsize=(15,7))
sns.heatmap(data.corr(numeric_only=True), annot=True)
plt.title("Data Correlation",size=15)
plt.show()

                        

#燃料类型对价格的影响
sns.barplot(x="fueltype", y="price", data=data)
<Axes: xlabel='fueltype', ylabel='price'>

#车型对价格的影响
sns.boxplot(x ="carbody", y ="price", data = data)
<Axes: xlabel='carbody', ylabel='price'>

                         

#门数对价格的影响
sns.boxplot(x ="doornumber", y ="price", data = data)
<Axes: xlabel='doornumber', ylabel='price'>

驱动器(FWD、RWD、AWD)对价格的影响
sns.boxplot(x ="drivewheel", y ="price", data = data)
<Axes: xlabel='drivewheel', ylabel='price'>

#绘制热图中最相关属性之间的成对关系
columns=data[['wheelbase','carlength','carwidth','curbweight','price']]
sns.pairplot(columns)
plt.show()
#linear relationship

                          

columns=data[['horsepower','citympg','highwaympg','price']]
sns.pairplot(columns)
plt.show()
#linear relationship

                       

以下属性集具有线性关系:

1.轴距、车长、车宽、整备质量和价格(基本上是所有物理属性)

2.马力、城市英里数、高速公路英里数和价格(基本上是与车辆功率相关的所有属性)

2. 训练模型

encoder = LabelEncoder()
data['fueltype'] = encoder.fit_transform(data['fueltype'])
fueltype = {index : label for index, label in enumerate(encoder.classes_)}
data['aspiration'] = encoder.fit_transform(data['aspiration'])
aspiration = {index : label for index, label in enumerate(encoder.classes_)}
data['doornumber'] = encoder.fit_transform(data['doornumber'])
doornumber = {index : label for index, label in enumerate(encoder.classes_)}
data['carbody'] = encoder.fit_transform(data['carbody'])
carbody = {index : label for index, label in enumerate(encoder.classes_)}
data['drivewheel'] = encoder.fit_transform(data['drivewheel'])
drivewheel = {index : label for index, label in enumerate(encoder.classes_)}
data['enginelocation'] = encoder.fit_transform(data['enginelocation'])
enginelocation = {index : label for index, label in enumerate(encoder.classes_)}
data['fuelsystem'] = encoder.fit_transform(data['fuelsystem'])
fuelsystem = {index : label for index, label in enumerate(encoder.classes_)}
data['enginetype'] = encoder.fit_transform(data['enginetype'])
enginetype = {index : label for index, label in enumerate(encoder.classes_)}
data['cylindernumber'] = encoder.fit_transform(data['cylindernumber'])
cylindernumber = {index : label for index, label in enumerate(encoder.classes_)}
data['fuelsystem'] = encoder.fit_transform(data['fuelsystem'])
fuelsystem = {index : label for index, label in enumerate(encoder.classes_)}
x = data.drop('price', axis=1)
y = data['price']
scaler = MinMaxScaler(copy=True, feature_range=(0, 1))
X = scaler.fit_transform(x)
#train, test split
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=30,random_state=0)
  1. 随机森林回归
    rf = RandomForestRegressor(n_estimators=100,max_depth=5, random_state=33)
    rf.fit(x_train, y_train)

print("Training r2_score: ",rf.score(x_train, y_train))
print("Testing r2_score: ",rf.score(x_test, y_test))
Training r2_score:  0.9753559007565417
Testing r2_score:  0.87367804775233
  1. 决策树回归
    dt = DecisionTreeRegressor( max_depth=5,random_state=33)
    dt.fit(x_train, y_train)

print('Training r2_score: ' , dt.score(x_train, y_train))
print('Testing r2_score: ' , dt.score(x_test, y_test))
Training r2_score:  0.9735394081185511
Testing r2_score:  0.8226507572837073

2.线性回归

def evaluate(model,x_train , y_train, x_test , y_test, y_predict):print(f'train r2_score:{r2_score(y_train, model.predict(x_train))}' )print(f'test r2_score : {r2_score(y_test, y_predict)}')
model = LinearRegression()
model.fit(x_train,y_train)
y_predict=model.predict(x_test)
evaluate(model,x_train , y_train, x_test , y_test, y_predict)
train r2_score:0.889157847638672
test r2_score : 0.7289860743863041

 项目资源下载

详情请见汽车价格的回归预测项目-VenusAI (aideeplearning.cn)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么大家都在“挺”鸿蒙?

试想某一天&#xff0c;应用软件能够在手机、电视、手表甚至汽车等设备上&#xff0c;实现无缝流转、纵享丝滑。 这不仅是畅想&#xff0c;而是鸿蒙正在布局的“遥遥领先”。 随着HarmonyOS NEXT鸿蒙星河版面向开发者开放申请、鸿蒙原生应用版图的基本成型&#xff0c;这个国…

多聆听,少评判

当朋友来找你倾诉、吐槽、诉苦&#xff0c;或是表达情绪的时候&#xff0c;你是怎样回应的&#xff1f; 许多人总有这样的习惯&#xff1a;每当听到朋友的倾诉&#xff0c;或者在网上看到别人诉苦时&#xff0c;第一反应往往是提建议&#xff1a;为什么你不试试这样做呢&#x…

ISIS骨干网连续性简述

默认情况下&#xff0c; 一、L1路由器是ISIS 普通区域内部路由器&#xff0c;只能与L1和L1-2路由器建立邻接关系&#xff0c;不能与L2路由器建立邻接关系。 二、L2路由器是骨干区域的路由器&#xff0c;L2路由器只能与其他 L2路由器同处一个区域&#xff0c;可与本区域的L2路由…

java JVM内存区域和对象创建,内存布局,访问

Java 虚拟机自动内存管理&#xff0c;不需要像C/C为每一个 new 操作去写对应的 delete/free 操作&#xff0c;不容易出现内存泄漏和内存溢出。但把内存控制权交给 Java 虚拟机&#xff0c;一旦出现内存泄漏和溢出问题&#xff0c;如不了解虚拟机怎样使用内存&#xff0c;将很难…

软考89-上午题-【操作系统】-同步与互斥

一、进程间的通信 在多道程序环境的系统中存在多个可以并发执行的进程&#xff0c;故进程间必然存在资源共享&#xff08;互斥&#xff09;和相互合作&#xff08;同步&#xff09;的问题。进程通信是指各个进程交换信息的过程。 同步是合作进程间的直接制约问题&#xff0c;互…

LeetCode 21 / 100

目录 矩阵矩阵置零螺旋矩阵旋转图像搜索二维矩阵 II LeetCode 73. 矩阵置零 LeetCode 54. 螺旋矩阵 LeetCode 48. 旋转图像 LeetCode 240. 搜索二维矩阵 II 矩阵 矩阵置零 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为…

关于UDP协议

UDP协议是基于非连接的发送数据就是把数据包简单封装一下&#xff0c;然后从网卡发出去就可以&#xff0c;数据包之间没有状态上的联系&#xff0c;UDP处理方式简单&#xff0c;所以性能损耗非常少&#xff0c;对于CPU、内存资源的占用远小于TCP&#xff0c;但是对于网络传输过…

【OJ比赛日历】快周末了,不来一场比赛吗? #03.23-03.29 #16场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2024-03-23&#xff08;周六&#xff09; #7场比赛2024-03-24…

74CMS人才系统 CVE-2024-2561 RCE复现

Fofa语法 app"骑士-74CMS" 复现步骤 前期准备 主页长这样 需要先会员注册&#xff0c;注册为招聘者 复现 将poc贴入修改登录的Cookie信息和Token 访问查看 微信公众号 扫一扫关注CatalyzeSec公众号 我们一起来从零开始学习网络安全 加入我们的星球&#xff0c;…

zabbix企业微信的告警媒介配置

简介&#xff1a; Zabbix企业微信告警媒介可用于向特定群组成员发送提醒通知。 前提条件&#xff1a; 完成Zabbix告警平台的搭建后&#xff0c;需将群机器人添加至告警提醒群中。 企业微信群聊——右上角三个点——添加群机器人 保存好产生的webhook地址&#xff08;注意&…

2024.3.20 使用maven打包jar文件和保存到本地仓库

2024.3.20 使用maven打包jar文件和保存到本地仓库 使用maven可以很方便地打包jar文件和导入jar文件&#xff0c;同时还可以将该文件保存在本地仓库重复调用。 使用maven打包jar文件和保存到本地仓库 package打包文件。 install导入本地仓库。 使用maven导入jar文件 点击“…

CVE-2023-49442 jeecg-formdemocontroller JNDI代码执行漏洞分析

漏洞描述 JEECG(J2EE Code Generation) 是开源的代码生成平台&#xff0c;目前官方已停止维护。JEECG 4.0及之前版本中&#xff0c;由于 /api 接口鉴权时未过滤路径遍历&#xff0c;攻击者可构造包含 ../ 的url绕过鉴权。攻击者可构造恶意请求利用 jeecgFormDemoController.do…

P1596 [USACO10OCT] Lake Counting S(找连通块数量)

题目描述 Due to recent rains, water has pooled in various places in Farmer Johns field, which is represented by a rectangle of N x M (1 < N < 100; 1 < M < 100) squares. Each square contains either water (W) or dry land (.). Farmer John would l…

基于springboot的反诈宣传平台

技术&#xff1a;springbootmysqlvue 一、系统背景 反欺诈平台可以对公交信息进行集中管理&#xff0c;可以真正避免传统管理的缺陷。反欺诈平台是一款运用软件开发技术设计实现的应用系统&#xff0c;在信息处理上可以达到快速的目的&#xff0c;不管是针对数据添加&#xff…

Vue3 进阶

Vue 进阶 前言 Vue3 入门文章地址&#xff1a;Vue3 入门 任务一 创建 Vite Vue3 单页应用 Vue 3 是一个流行的 JavaScript 前端框架&#xff0c;用于构建单页应用程序&#xff08;SPA&#xff09;。 下面是一些创建 Vue 3 单页应用程序的方式&#xff1a; Vue CLI&#…

NCV12711ADNR2G芯片PWM控制器中文资料规格书PDF数据手册引脚图图片价格功能

产品概述&#xff1a; NCV12711是一款固定频率、峰值电流模式PWM控制器&#xff0c;具有实施单端功率转换器拓扑结构所需的必要性能。这款器件工作电压范围4V至45V&#xff0c;无需辅助绕组&#xff0c;且位于热性能范围内。这款控制器包含一个可编程振荡器&#xff0c;能够在…

elasticsearch安装部署

elasticsearch部署 安装elasticsearch1.部署单点es1.1.创建网络1.2.加载镜像1.3.运行 2.部署kibana2.1.部署2.2.DevTools 3.安装IK分词器3.1.在线安装ik插件&#xff08;较慢&#xff09;3.2.离线安装ik插件&#xff08;推荐&#xff09;3.3 扩展词词典3.4 停用词词典 4.部署es…

Jmeter接口登录获取参数token报错问题解决方案

Jmeter接口登录时获取到的参数token一直在变的问题&#xff0c;导致运行时总是报错 解决方法如下&#xff1a; 1.新建一个GET的HTTP请求 2.添加正则表达式提取器 记得name"_token" value"(.?) 中间有一个空格&#xff0c;“_token”和value中间的空格&#xf…

Linux第81步_使用“互斥体”实现“互斥访问”共享资源

1、创建MyMutexLED目录 输入“cd /home/zgq/linux/Linux_Drivers/回车” 切换到“/home/zgq/linux/Linux_Drivers/”目录 输入“mkdir MyMutexLED回车”&#xff0c;创建“MyMutexLED”目录 输入“ls回车”查看“/home/zgq/linux/Linux_Drivers/”目录下的文件和文件夹 2、…

机器学习-可解释性机器学习:支持向量机与fastshap的可视化模型解析

一、引言 支持向量机(Support Vector Machine, SVM)作为一种经典的监督学习方法&#xff0c;在分类和回归问题中表现出色。其优点之一是生成的模型具有较好的泛化能力和可解释性&#xff0c;能够清晰地展示特征对于分类的重要性。 fastshap是一种用于快速计算SHAP值&#xff08…