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

作者:码银日期:10/2/2025

摘要

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

关键词

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

一、引言

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

二、数据处理与模型构建

2.1 数据加载

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

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

2.2 数据预处理

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

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

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

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

2.3 数据集划分

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

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

2.4 模型定义与训练

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

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

三、模型预测与评估

3.1 模型预测

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

1y_pred = rf_model.predict(X_test)
2

3.2 模型评估

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

1from sklearn.metrics import mean_squared_error, r2_score
2import numpy as np
3mse = mean_squared_error(y_test, y_pred)
4rmse = np.sqrt(mse)
5r2 = r2_score(y_test, y_pred)
6
7print(f"均方误差 (MSE): {mse}")
8print(f"均方根误差 (RMSE): {rmse}")
9print(f"R² 分数: {r2}")
10

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

四、可视化分析

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

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

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

价格对比

4.2 残差分析

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

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

残差分析

4.3 特征重要性评估

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

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

特征重要性

4.4 不同品牌价格分布

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

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

不同品牌车型

五、结论

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


【数据挖掘】基于随机森林回归模型的二手车价格预测分析(数据集+源码)》 是转载文章,点击查看原文


相关推荐


iOS 26 系统流畅度剖析:Liquid Glass 动画表现 + 用户反馈
代码背锅人日志9/30/2025

本文聚焦 iOS 26 系统流畅度,结合用户反馈、Liquid Glass 视觉变革与性能挑战,介绍如何用 KeyMob + Instruments 记录帧率 /卡顿 /动画延迟,并给出实战流程与优化建议,帮助开发者评估新版系统中界面的真实流畅性。


优先级队列(堆)-1046.最后一块砖的重量-力扣(LeetCode)
1白天的黑夜19/30/2025

个人主页:1白天的黑夜1-CSDN博客专栏:力扣刷题录_1白天的黑夜1的博客-CSDN博客、企鹅程序员:Linux 系统与网络编程_1白天的黑夜1的博客-CSDN博客目录一、题目解析1、选出两块最重的石头意为第一重和第二重或同样重2、如果只剩一块石头,返回石头的重量;如果没有石头返回0二、算法原理解法:优先级队列解法步骤:三、代码示例一、题目解析优先级队列就是堆,而堆又有大根堆和小根堆,本题需要用到的就是大根堆这里模板参数Compare的缺省值为less,也就是按照从根往下,根比孩子大;而小根堆则是grea


推荐 6 个本周 yyds 的 GitHub 项目。
喜爱编程2025/10/2

01 微软开源的文档转换工具 MarkItDown 用于将各种常见格式的文档转换为 Markdown 格式。 包括 PDF、PPT、Word、Excel、图片、音频、HTML、JSON等,甚至还能处理 ZIP 压缩包内的多个文件、YouTube 视频转录文本以及电子书 EPub 等。 它尤其适合需要将文档内容提取为结构化文本,并用于大模型处理或文本分析任务的情景。 其实仅限这个场景,因为项目官方说可以保留表格、排版啥的,实测并没有。。。 PDF 文件转换,左边屏是源文


CodeBuddy配套:如何配置AI编程总工程师spec-kit
小虎AI生活2025/10/2

我是小虎,浙江大学计算机本硕,专注AI编程。 如果AI能像总工程师一样,先帮你把图纸画好,再动手干活,那该多爽? AI编程学习群里,有学员在吐槽,AI编程时经常“失忆”,写着着就忘了前面的上下文,让人抓狂 🤯。 这不仅是学员们踩过的坑,也是我自己的惨痛教训。 昨天我也写了一篇文章,介绍我的土办法。 [CodeBuddy实战:防止AI编程跑偏的土办法,能抓老鼠就是好猫!] 今天,我要给你们安利一个刚出炉的神器,它能彻底改变你和AI协作写代码的方式。 而且,我敢说,全网我可能是第一篇教程写C


Vue3 中的双向链表依赖管理详解与示例
excel2025/10/3

在 Vue3 的响应式系统中,双向链表是一个非常重要的数据结构。相比 Vue2 使用数组来存放依赖,Vue3 选择链表的原因在于效率更高,尤其是在频繁收集和清理依赖时,链表可以显著优化性能。本文将通过讲解和示例代码,帮助你理解这一点。 为什么要用双向链表 在响应式依赖收集过程中,Vue 需要完成两件事: 收集依赖:当访问响应式数据时,要记录当前副作用函数(effect)。 清理依赖:当副作用函数重新运行或失效时,需要把它从依赖集合里移除。 如果依赖集合使用数组: 删除某个依赖需要遍历整个


从 “Hello AI” 到企业级应用:Spring AI 如何重塑 Java 生态的 AI 开发
草莓熊Lotso2025/10/4

🔥个人主页:@草莓熊Lotso 🎬作者简介:C++研发方向学习者 📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》 ⭐️人生格言:生活是默默的坚持,毅力是永久的享受。 前言:当大模型浪潮席卷软件开发领域时,Java 开发者常常面临一个困境:一边是 PyTorch、LangChain 等 Python 生态的 AI 工具链蓬勃发展,一边是企业现有系统中大量的 Spring 技术栈难以快速接入 AI 能力。而 Spring AI 的出现


Android Jetpack 核心组件实战:ViewModel + LiveData + DataBinding 详解
马 孔 多 在下雨2025/10/5

Android Jetpack 核心组件实战:ViewModel + LiveData + DataBinding 详解 在 Android 开发中,我们经常会遇到屏幕旋转数据丢失、UI 与逻辑耦合紧密、数据更新无法自动同步 UI 等问题。Google 推出的 Jetpack 架构组件可以很好地解决这些问题,本文将对 ViewModel、LiveData 和 DataBinding 三个核心组件进行讲解,从基础概念到实战案例,完整讲解这三个组件的使用方法与联动逻辑。 一、ViewModel:


v你真的会记笔记吗?AI的答案可能让你意外
万少 VIP.5 如鱼得水2025/10/7

这段时间我在准备一个行业调查,调研资料几乎全来自视频会议、线上讲座和播客。 内容是很丰富,但问题也随之而来:一个小时的视频回放,想找个观点得快进倒退十几次,遇到灵感还得赶紧切出去做笔记,效率低到崩溃。 看不完,根本看不完…… 正好我朋友是一个AI发烧友,他就推荐我用了一个专注做AI笔记的工具。 坦白讲,最开始我没抱太大期待,心想不就是转写嘛。但真用了两周后,我发现它完全改变了我的学习和工作流。 这个工具叫Ai好记: 网址:aihaoji.com/zh?utm_sour… 输入口令【万少】可以


JAVA算法练习题day34
QiZhang6032025/10/8

43.验证二叉搜索树 要知道二叉搜索树的中序遍历结果是升序序列 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, val=0, left=None, right=None): # self.val = val # self.left = left # self.right = right class Solution(o


面试真实经历某节跳动大厂Java和算法问答以及答案总结(一)
360_go_php2025/10/10

Java面试问题与解答 常见的GC回收器 - Serial GC: 适合单线程环境,暂停时间较长。 - Parallel GC: 多线程垃圾回收,适合多核处理器,停顿时间较短。 - CMS (Concurrent Mark-Sweep): 适合响应时间要求高的应用,通过多线程并发清除垃圾。 - G1 GC: 适用于大内存系统,目标是尽量减少GC停顿时间,分区回收。​编辑 SpringMVC的请求过程 - 流程: 用户发起请求 → 前端控制器(DispatcherServlet)接收请求

首页编辑器站点地图

Copyright © 2025 聚合阅读

License: CC BY-SA 4.0