【机器学习案列】基于随机森林和xgboost的二手车价格回归预测

news2024/9/27 20:24:45

一、项目分析

1.1 项目任务

kaggle二手车价格回归预测项目,目的根据各种属性预测二手车的价格

1.2 评估准则
评估的标准是均方根误差:在这里插入图片描述
1.3 数据介绍
数据连接https://www.kaggle.com/competitions/playground-series-s4e9/data?select=train.csv
在这里插入图片描述
其中:

  • id:唯一标识符(或编号)
  • brand:品牌
  • model:型号
  • model_year:车型年份
  • mileage(注意这里可能是拼写错误,应该是mileage而不是milage):里程数
  • fuel_type:燃油类型
  • engine:发动机
  • transmission:变速器
  • ext_col:车身颜色(外部)
  • int_col:内饰颜色(内部)
  • accident:事故记录
  • clean_title:清洁标题(通常指车辆是否有清晰的产权记录,无抵押、无重大事故等)
  • price:价格

二、读取数据

2.1 导入相应的库

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_squared_error
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split, GridSearchCV
import xgboost as xgb

2.2 读取数据

file_path = '/kaggle/input/playground-series-s4e9/train.csv'
df = pd.read_csv(file_path)

df.head()
df.shape()

在这里插入图片描述
在这里插入图片描述

三、Exploratory Data Analysis(EDA)

3.1 车型年份与价格的关系

plt.figure(figsize=(10, 6))
sns.scatterplot(x='model_year', y='price', data=df)
plt.title('Model Year vs Price')
plt.xlabel('Model Year')
plt.ylabel('Price')
plt.show()

在这里插入图片描述
3.2 滞留量与价格的关系

plt.figure(figsize=(10, 6))
sns.scatterplot(x='milage', y='price', data=df)
plt.title('Milage vs Price')
plt.xlabel('Milage')
plt.ylabel('Price')
plt.show()

在这里插入图片描述
3.3 热图检查数值特征之间的关系

num_df = df.select_dtypes(include=['float64', 'int64'])
plt.figure(figsize=(12, 8))
corr_matrix = num_df.corr()
sns.heatmap(corr_matrix, annot=True, fmt=".2f", cmap="coolwarm", linewidths=0.5, annot_kws={"size": 10})
plt.title('Correlation Matrix', fontsize=16)
plt.xticks(rotation=45, ha='right')
plt.yticks(rotation=0)
plt.tight_layout()
plt.show()

在这里插入图片描述
3.4 按品牌统计图表

plt.figure(figsize=(12, 6))
sns.countplot(data=df, x='brand', order=df['brand'].value_counts().index)
plt.title('Count of Cars by Brand', fontsize=16)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

在这里插入图片描述

3.5 箱线图

plt.figure(figsize=(12, 6))
sns.boxplot(data=df, x='fuel_type', y='milage')
plt.title('Mileage by Fuel Type', fontsize=16)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

在这里插入图片描述

1.6 各品牌平均里程数

plt.figure(figsize=(12, 6))
sns.barplot(data=df, x='brand', y='milage', estimator=np.mean, ci=None)
plt.title('Average Mileage by Brand', fontsize=16)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

在这里插入图片描述

四、 数据预测处理

4.1 检查每个特征是否具有不同的值

for i in df.columns:
    if df[i].nunique()<2:
        print(f'{i} has only one unique value. ')

clean_title has only one unique value.

“Clean ”功能只有一个唯一值,所以我们可以将其删除。

df.drop(['id','clean_title'],axis=1,inplace=True)
df.shape

(188533, 11)

4.2 缺失值处理

df.isnull().sum().sum()

7535

df.dropna(inplace=True)
df.isnull().sum().sum()

0

没有缺失的值,所以我们可以继续了。

4.3
使用一热编码将分类变量转换为数值格式

df = pd.get_dummies(df, columns=['brand', 'model', 'fuel_type', 'transmission', 'ext_col', 'int_col', 'accident','engine' ], drop_first=True)

五、数据预测

5.1 数据样本和标签分离

X = df.drop('price', axis=1)
y = df['price']

5.2 切分数据集

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

5.3 模型训练和评估
5.3.1 Xgboost回归模型

xgb_model = xgb.XGBRegressor(
    n_estimators=100,      
    max_depth=5,           
    learning_rate=0.1,     
    subsample=0.8,        
    random_state=42        
)

xgb_model.fit(X_train, y_train)

y_pred_xgb = xgb_model.predict(X_test)

rmse_xgb = np.sqrt(mean_squared_error(y_test, y_pred_xgb))
print(f'XGBoost Root Mean Squared Error: {rmse_xgb}')

XGBoost Root Mean Squared Error: 67003.09126576487

5.3.2 Random Forest回归模型

rf_model = RandomForestRegressor(
    n_estimators=100,     
    max_depth=10,         
    min_samples_split=2,
    min_samples_leaf=1,    
    random_state=42      
)

rf_model.fit(X_train, y_train)

y_pred_rf = rf_model.predict(X_test)

rmse_rf = np.sqrt(mean_squared_error(y_test, y_pred_rf))
print(f'Random Forest Root Mean Squared Error: {rmse_rf}')

Random Forest Root Mean Squared Error: 68418.85393408517

参考文献:
1 https://www.kaggle.com/code/muhammaadmuzammil008/eda-random-forest-xgboost

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

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

相关文章

基于 Java Swing 实现的超级玛丽游戏

一、项目概述 > 这是一个基于 Java Swing 的游戏项目&#xff0c;旨在实现一个支持自定义地图的超级玛丽游戏。 > 游戏画面精美&#xff0c;包含多种功能和亮点&#xff0c;如地图编辑器、不同状态的马里奥、多种怪物和道具等。 二、项目演示 > 地图编辑器 > …

Mac写入U盘文件如何跨平台使用 Mac电脑怎么把U盘文件传送到电脑 mac怎么用u盘拷贝文件

不知道你在使用Mac电脑拷贝文件的时候有没有遇到过无法写入U盘的问题&#xff0c;这通常是由于Mac和Windows之间的兼容问题引起的。下面我将为大家详细介绍Mac写入U盘文件如何跨平台使用以及Mac如何将U盘文件复制到电脑。 一、Mac写入U盘文件如何跨平台使用 在Mac电脑上将文件…

MySQL第11讲--多表查询的介绍

文章目录 前言多表关系多表查询概述多表查询的分类连接查询内链接外链接自连接 联合查询子查询标量子查询列子查询行子查询表子查询 前言 在MySQL第10讲–约束的介绍中讲了数据库的几种约束条件&#xff1a;非空约束、唯一约束、主键约束、外键约束、检查约束、默认约束。下图对…

数字人实战第六天——DH_live 训练自己的数字人

一、简介 数字人是一种基于人工智能和数字化技术构建的虚拟人物或代理&#xff0c;能够进行人类式的交互和沟通。这些技术主要包括&#xff1a; 人工智能&#xff08;AI&#xff09;&#xff1a;AI 是数字人的核心&#xff0c;包括自然语言处理&#xff08;NLP&#xff09;、机…

[深度学习]循环神经网络

1 自然语言处理概述 语料:一个样本,句子/文章语料库:由语料组成词表:分词之后的词语去重保存成为词表2 词嵌入层 import jieba import torch.nn as nn import torch # 文本数据 text=北京东奥的进度条已经过半,不少外国运动员在完成自己的比赛后踏上归途。 # 分词 words=j…

11.梯度下降法的思想——举足轻重的模型优化算法

引言 优化算法在机器学习和人工智能中扮演者至关重要的角色。机器学习模型的训练过程本质上是一个优化问题&#xff0c;即通过调整模型参数来最小化损失函数。梯度下降法(Gradient Descent)在优化算法中占据着重要的地位&#xff0c;因其简单、有效且易于实现。 通过阅读本篇…

阿里云服务器挖矿木马清除

这里写自定义目录标题 阿里云服务器挖矿木马清除清除步骤&#xff1a; 阿里云服务器挖矿木马清除 直接看图&#xff1a; 清除步骤&#xff1a; 是的&#xff0c;根据您提供的 systemctl 输出&#xff0c;c3pool_miner.service 看起来非常可疑&#xff0c;因为它的描述是 “…

langchain v0.3更新了什么?

版本改动 这是具体改动的链接 官方blog首先说明了&#xff1a; 所有软件包已在内部从 Pydantic 1 升级到 Pydantic 2。 所有软件包都完全支持在用户代码中使用 Pydantic 2&#xff0c;而无需使用 langchain_core.pydantic_v1 或 pydantic.v1 等桥接程序。 由于 Pydantic 1 已…

Django 配置邮箱服务,实现发送信息到指定邮箱

一、这里以qq邮箱为例&#xff0c;打开qq邮箱的SMTP服务 二、django项目目录设置setting.py 文件 setting.py 添加如下内容&#xff1a; # 发送邮件相关配置 EMAIL_BACKEND django.core.mail.backends.smtp.EmailBackend EMAIL_USE_TLS True EMAIL_HOST smtp.qq.com EMAIL…

18724 二叉树的遍历运算

### 思路 1. **递归构建树**&#xff1a; - 先序遍历的第一个节点是根节点。 - 在中序遍历中找到根节点的位置&#xff0c;左边部分是左子树&#xff0c;右边部分是右子树。 - 递归构建左子树和右子树。 2. **递归生成后序遍历**&#xff1a; - 递归生成左子树的…

《Python编程:从入门到实践》数据可视化

一、项目 数据可视化学习 二、库依赖 matplotlib&#xff0c;pygal&#xff0c; 三、生成数据 1.绘制简单的折线图 import matplotlib.pyplot as pltsquares [1, 4, 9, 16, 25] plt.plot(squares) plt.show() 模块pyplot包含很多用于生成图表的函数。 &#xff08;1&am…

Excel求和为什么是0?结果不对的来跟着步骤排查

大家好&#xff0c;这里是效率办公指南&#xff01; &#x1f522; Excel求和功能是日常工作中常用的工具&#xff0c;但有时我们可能会遇到求和结果意外地显示为0&#xff0c;这可能会让我们感到困惑。今天&#xff0c;我们就来具体分析一下可能导致Excel求和结果为0的原因&a…

100套顶刊配色方案!Matlab超绝配色包TheBestColor

两三年前&#xff0c;我刚开始研究制作Matlab配色包&#xff0c;那时Matlab几乎只能用自带的默认配色&#xff0c;选择极少。 时至今日&#xff0c;Matlab配色已不是问题。 实际体验下来&#xff0c;在某些层面&#xff0c;甚至比隔壁R、Python吃得还要好一些。 但吃得太好&…

TARA分析方法论——威胁分析和风险评估方法

一、什么是TARA分析方法论 威胁分析和风险评估&#xff08;Threat Analysis and Risk Assessment&#xff09; 通过识别整车/项目的网络安全资产&#xff0c;分析其中的潜在的安全威胁&#xff0c;综合考虑威胁攻击可行性、危害影响等因素&#xff0c;识别出整车/项目可能存在…

【技巧】移动云手机如何防止1小时自动关机

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 背景介绍 领的免费云手机&#xff0c;如果1或2小时内不登录&#xff0c;就会被自动关机&#xff0c;这非常影响使用。本方法可以实现自动刷新页面&…

西门子:觅最佳的生态伙伴,筑最好的数字平台|商业创新同行者

沧海桑田&#xff0c;时光变幻。 纵观全球&#xff0c;历经百年仍能保持基业长青的公司少之又少&#xff0c;而像西门子这样依旧矗立在顶峰的企业可谓凤毛麟角&#xff0c;成功的数字化转型更是为这家企业带来了持续不断的澎湃活力。 作为当代数字化时代的创新经济模式&#…

智能手机取证: 专家如何从被锁定设备中提取数据?

在数字取证领域&#xff0c;从被锁定的手机中检索数据的能力是决定调查成功与否的关键技能。由于智能手机往往是解决复杂案件的关键&#xff0c;智能手机取证已经成为打击犯罪和恐怖主义战争中的一个关键组成部分。通话记录、短信、电子邮件&#xff0c;甚至位置数据都可能被发…

【机器学习(十一)】机器学习分类案例之是否患糖尿病预测—XGBoost分类算法—Sentosa_DSML社区版

文章目录 一、XGBoost算法二、Python代码和Sentosa_DSML社区版算法实现对比(一) 数据读入和统计分析(二)数据预处理(三)模型训练与评估(四)模型可视化 三、总结 一、XGBoost算法 关于集成学习中的XGBoost算法原理&#xff0c;已经进行了介绍与总结&#xff0c;相关内容可参考【…

代理IP获取工具:轻松获取可靠的代理IP

在网络世界中&#xff0c;代理IP是一个非常有用的工具。无论是为了提升隐私保护&#xff0c;还是为了访问特定的网络资源&#xff0c;代理IP都能提供极大的帮助。本文将介绍几种常见的代理IP获取工具&#xff0c;帮助你轻松获取可靠的代理IP。 什么是代理IP获取工具&#xff1…

c++反汇编逆向还原——for循环(笔记)

c反汇编逆向还原代码for循环的实现&#xff0c;for循环和while循环在逆向还原的区别 一、汇编 mov &#xff1a;将源操作数复制到目的操作数 lea &#xff1a;与mov类似 mov a&#xff0c;b 表示将b赋值给a 若是 mov a&#xff0c;[b] 这是将b的地址赋值给a&#xff0c;相…