【数据挖掘】基于随机森林回归模型的二手车价格预测分析(信息集+源码)

news/2025/10/24 13:29:35/文章来源:https://www.cnblogs.com/slgkaifa/p/19163031

【数据挖掘】基于随机森林回归模型的二手车价格预测分析(信息集+源码)

摘要

本研究运用随机森林回归模型对汽车价格进行预测。通过对包含多种汽车属性的数据集进行预处理,包括对分类变量的独热编码,将其划分为训练集与测试集。利用训练集数据拟合随机森林模型,并使用测试集数据进行预测与评估。同时,借助多种可视化手段深入分析模型性能与数据特征。
数据集:https://pan.quark.cn/s/20eb55d25902
数据源:https://www.kaggle.com/datasets/vrajesh0sharma7/used-car-price-prediction
在这里插入图片描述

关键词

随机森林回归;汽车价格预测;数据预处理;可视化分析

一、引言

在汽车市场研究领域,准确预测汽车价格对于消费者、经销商以及制造商都具有重要意义。随机森林回归模型作为一种强大的机器学习算法,能够有效处理复杂的非线性关系,在众多预测任务中表现出色。本研究旨在运用该模型对汽车价格进行精准预测,并通过详细的分析揭示各因素对价格的影响。

二、数据处理与模型构建

2.1 数据加载

研究伊始,从“split_file_1.csv”文件中加载数据集,该数据集涵盖了丰富的汽车相关信息,为后续分析提供了基础。

import pandas as pd
df = pd.read_csv('split_file_1.csv')

2.2 数据预处理

为使数据适用于模型训练,对数据进行了必要的预处理。鉴于数据集中存在诸多分类变量,如汽车品牌(make)、型号(model)、变速器类型(transmission)等,采用独热编码的方式对这些分类变量进行转换。此操作将分类变量转换为数值形式,以便模型能够有效处理。

categorical_cols = ['make','model', 'transmission', 'fuel_type', 'drivetrain', 'body_type', 'exterior_color', 'interior_color','seller_type', 'condition', 'trim', 'accident_history']
df_encoded = pd.get_dummies(df, columns=categorical_cols)

完成编码后,将数据集划分为特征矩阵X和目标变量y。特征矩阵X包含除价格(price)外的所有变量,而目标变量y即为汽车价格。

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

2.3 数据集划分

为评估模型性能,将数据集按比例划分为训练集和测试集。其中,测试集占比20%,训练集占比80%,并通过设置随机种子(random_state = 33)确保划分结果的可重复性。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=33)

2.4 模型定义与训练

选择随机森林回归模型作为预测工具,并设定决策树数量为100(n_estimators = 100),同时固定随机种子(random_state = 33)以保证模型训练的一致性。随后,使用训练集数据对模型进行训练。

from sklearn.ensemble import RandomForestRegressor
rf_model = RandomForestRegressor(n_estimators=100, random_state=33)
rf_model.fit(X_train, y_train)

三、模型预测与评估

3.1 模型预测

利用训练好的随机森林模型对测试集数据进行预测,得到预测价格y_pred

y_pred = rf_model.predict(X_test)

3.2 模型评估

为衡量模型的预测准确性,采用均方误差(MSE)、均方根误差(RMSE)和R²分数作为评估指标。均方误差反映了预测值与真实值之间误差的平方的平均值;均方根误差则是均方误差的平方根,其单位与目标变量相同,更直观地体现了误差的大小;R²分数用于评估模型对数据的拟合优度,取值范围在0到1之间,越接近1表示模型拟合效果越好。

from sklearn.metrics import mean_squared_error, r2_score
import numpy as np
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse)
r2 = r2_score(y_test, y_pred)
print(f"均方误差 (MSE): {mse}")
print(f"均方根误差 (RMSE): {rmse}")
print(f"R² 分数: {r2}")

经计算,模型在本数据集上取得了一定的预测效果,具体指标数值为深入分析模型性能提供了依据。

四、可视化分析

4.1 实际价格与预测价格对比

绘制实际价格与预测价格的散点图,同时添加一条表示理想预测情况(预测值等于真实值)的对角线。该图直观展示了模型预测值与实际值的分布关系,若预测点紧密分布在对角线上方,则表明模型预测效果良好。

import matplotlib.pyplot as plt
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, alpha=0.5)
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=2)
plt.xlabel('实际价格')
plt.ylabel('预测价格')
plt.title('实际价格 vs 预测价格')
plt.show()

价格对比

4.2 残差分析

计算并绘制残差图,以预测价格为横坐标,残差(实际价格 - 预测价格)为纵坐标,并添加一条水平参考线(y = 0)。理想情况下,残差应随机分布在参考线周围,无明显规律。若残差呈现特定趋势,则可能暗示模型存在一定问题。

residuals = y_test - y_pred
plt.figure(figsize=(10, 6))
plt.scatter(y_pred, residuals, alpha=0.5)
plt.axhline(y=0, color='r', linestyle='--')
plt.xlabel('预测价格')
plt.ylabel('残差')
plt.title('残差图')
plt.show()

残差分析

4.3 特征重要性评估

通过分析随机森林模型中各特征的重要性,筛选出最重要的20个特征,并绘制特征重要性条形图。该图能够直观展示各特征对汽车价格预测的贡献程度,帮助我们理解哪些因素在价格决定中起着关键作用。

importances = rf_model.feature_importances_
indices = np.argsort(importances)[-20:]
plt.figure(figsize=(10, 8))
plt.title('随机森林特征重要性')
plt.barh(range(len(indices)), importances[indices], align='center')
plt.yticks(range(len(indices)), [X.columns[i] for i in indices])
plt.xlabel('特征重要性')
plt.show()

特征重要性

4.4 不同品牌价格分布

选取汽车品牌(make)作为分析对象,展示数量最多的10个品牌的汽车价格分布情况。通过箱线图,可以清晰观察到不同品牌汽车价格的中位数、四分位数以及异常值等信息,有助于深入了解各品牌在价格方面的差异。

import seaborn as sns
plt.figure(figsize=(12, 6))
top_makes = df['make'].value_counts().nlargest(10).index
sns.boxplot(data=df[df['make'].isin(top_makes)],
x='make',
y='price')
plt.xticks(rotation=45)
plt.title('不同品牌车型价格分布')
plt.xlabel('汽车品牌')
plt.ylabel('价格')
plt.show()

不同品牌车型

五、结论

本研究通过运用随机森林回归模型对汽车价格进行预测,并结合多种可视化分析手段,深入探讨了汽车价格与各属性之间的关系。模型评估指标表明,随机森林回归模型在本数据集上具有一定的预测能力。可视化分析不仅直观展示了模型的性能,还揭示了不同特征对汽车价格的影响程度以及不同品牌价格的分布特点。

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

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

相关文章

实用指南:flink批处理-水位线

实用指南:flink批处理-水位线2025-10-24 13:24 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

字符串模式匹配算法 KMP

子串与子序列中文名称 常见英文名称 解释子串 \(\tt substring\) 连续的选择一段字符(可以全选、可以不选)组成的新字符串子序列 \(\tt subsequence\) 从左到右取出若干个字符(可以不取、可以全取、可以不连续)组成…

Z函数(扩展 KMP)

Z函数(扩展 KMP) 获取字符串 \(s\) 和 \(s[i,n-1]\) (即以 \(s[i]\) 开头的后缀)的最长公共前缀(LCP)的长度,总复杂度 \(\mathcal O(N)\)。 vector<int> zFunction(string s) {int n = s.size();vector&l…

常用例题

常用例题 题意:在一篇文章(包含大小写英文字母、数字、和空白字符(制表/空格/回车))中寻找 \({\tt helloworld}\)(任意一个字母的大小写都行)的子序列出现了多少次,输出结果对 \(10^9+7\) 的余数。 字符串 DP …

2025年环评公司权威推荐排行榜,环评手续,环评报告,环评验收,专业高效服务助力企业合规发展

2025年环评公司权威推荐排行榜,环评手续,环评报告,环评验收,专业高效服务助力企业合规发展 一、行业背景与发展趋势 随着中国生态文明建设的深入推进,环境保护法律法规体系日益完善,环境影响评价作为建设项目环境…

2025年棒球帽厂家推荐排行榜,运动棒球帽,时尚棒球帽,定制棒球帽,防晒棒球帽公司精选榜单

2025年棒球帽厂家推荐排行榜:运动、时尚、定制与防晒棒球帽公司精选榜单 行业背景与发展趋势 棒球帽作为兼具功能性与时尚性的头部配饰,近年来在全球市场持续保持增长态势。随着运动休闲风的盛行和个性化需求的提升,…

常见结论与例题

常见结论 题意:(区间移位问题)要求将整个序列左移/右移若干个位置,例如,原序列为 \(A=(a_1, a_2, \dots, a_n)\) ,右移 \(x\) 位后变为 \(A=(a_{x+1}, a_{x+2}, \dots, a_n,a_1,a_2,\dots, a_x)\) 。 区间的端点…

单芯片方案分享-CH336F-USB拓展坞+百兆网卡+读卡器+100W快充芯片

CH336F是符合USB2.0协议规范的 3端口HUB、USB高速读卡器、USB PD快充和USB转以太网四合一控制器芯片,该芯片集成 3口USB HUB、USB高速SD卡读卡器、USB PD快充和USB百兆以太网扩展功能。简介 CH336F是符合USB2.0协议规…

于状压的线性 RMQ 算法

基于状压的线性 RMQ 算法 严格 \(\mathcal O(N)\) 预处理,\(\mathcal O(1)\) 查询。 template<class T, class Cmp = less<T>> struct RMQ {const Cmp cmp = Cmp();static constexpr unsigned B = 64;usi…

Flink编程模型 - 详解

Flink编程模型 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "…

工业4.0下的边缘存储设计:材料就地处理,响应更快更安全

工业4.0下的边缘存储设计:材料就地处理,响应更快更安全pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

服务器关机用halt、poweroff还是shutdown -h now?一文帮你说明

我们需要对服务器进行关机的时候,选择必要的关机命令是非常重要的,本文将帮你说明linux系统中halt、poweroff及shutdown -h now 三个命令的区别并描述底层原理 一. halt功能:停止系统运行,但不一定关闭电源。行为:…

KD Tree

KD Tree 在第 \(k\) 维上的单次查询复杂度最坏为 \(\mathcal O(n^{1-k^{-1}})\)。 struct KDT {constexpr static int N = 1e5 + 10, K = 2;double alpha = 0.725;struct node {int info[K];int mn[K], mx[K];} tr[N];…

小波矩阵树:高效静态区间第 K 大查询

小波矩阵树:高效静态区间第 K 大查询 手写 bitset 压位,以 \(\mathcal O(N \log N)\) 的时间复杂度和 \(\mathcal O(N + \frac{N \log N}{64})\) 的空间建树后,实现单次 \(\mathcal O(\log N)\) 复杂度的区间第 \(k…

Seata用法

目录AT模式TCCSAGA模式参考资料 AT模式在Springboot启动程序加上,@EnableAutoDataSourceProxy 确保数据源被代理 在全局事务启动的方法上加 @GlobalTransactional 分支事务代码无需做任何处理。TCC 实现类加上 @Local…

Day3多媒体标签——视频与音频

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width= , initial-scale=1.0"><title&g…

分数运算类

分数运算类 定义了分数的四则运算,如果需要处理浮点数,那么需要将函数中的 gcd 运算替换为 fgcd 。 template<class T> struct Frac {T x, y;Frac() : Frac(0, 1) {}Frac(T x_) : Frac(x_, 1) {}Frac(T x_, T …

坐标压缩与离散化

坐标压缩与离散化 简单版本 sort(alls.begin(), alls.end()); alls.erase(unique(alls.begin(), alls.end()), alls.end()); auto get = [&](int x) {return lower_bound(alls.begin(), alls.end(), x) - alls.beg…

撸一个功能强大的基于语义的图像检索系统

构建了一个支持中英文和图像检索的自定义系统。通过PyQt5开发GUI界面,集成KimiAI实现中文翻译,解决了原生框架中文支持差、界面固定等问题。系统核心功能包括:1)中文文本检索(自动翻译为英文);2)以图搜图(基于…

提交一张 PPT,参与 RTE2025 全球语音智能体云展示

无法亲临 RTE2025 大会?😢 没关系!🎉 我们特别为你的项目提供了一个云展示机会。只需提交一张 PPT,即可参与我们的「全球语音智能体云展示」,与众多领先的语音智能体一同在大会展区屏幕上轮播展示! 🤩项目提…