当前位置: 首页 > news >正文

【python】随机森林预测汽车销售

目录

引言

1. 数据收集与预处理

2. 划分数据集

3. 构建随机森林模型

4. 模型训练

5. 模型评估

6. 模型调优

数据集

代码及结果

独热编码

随机森林模型训练

特征重要性图

混淆矩阵

ROC曲线


引言

随机森林(Random Forest)是一种集成学习方法,它通过构建多个决策树并将它们的预测结果进行综合来改进模型的预测准确性和鲁棒性。在预测汽车销售方面,随机森林可以有效地处理包含多种特征(如车辆品牌、型号、年份、里程数、配置、价格等)的数据集,并预测销售数量、价格或顾客购买意向等。

以下是使用随机森林模型预测汽车销售的基本步骤:

1. 数据收集与预处理

  • 收集数据:首先,需要收集汽车销售的相关数据。这些数据可能包括车辆的技术规格、历史销售价格、市场需求数据、客户反馈等。
  • 数据清洗:去除重复项、缺失值处理(可以通过插值、删除或使用预测模型填补缺失值)、异常值处理等。
  • 特征选择:选择对汽车销售有显著影响的特征,比如车型、品牌、年份、配置、价格等。
  • 特征工程:对特征进行编码(如将分类变量转换为数值型),可能还需要进行特征缩放(如归一化或标准化)。

2. 划分数据集

  • 将数据集划分为训练集和测试集(通常按70%-30%或80%-20%的比例划分)。训练集用于训练模型,测试集用于评估模型的性能。

3. 构建随机森林模型

  • 使用训练集构建随机森林模型。随机森林模型的关键参数包括决策树的数量(n_estimators)、每个决策树分裂时考虑的特征数(max_features)、树的深度(如果设置了)等。
  • 通过交叉验证(如网格搜索)来优化这些参数,以找到最佳的模型配置。

4. 模型训练

  • 使用训练集数据训练随机森林模型。

5. 模型评估

  • 使用测试集评估模型的性能。评估指标可能包括准确率、召回率、F1分数、均方误差(MSE)等,具体取决于预测目标(如销售数量、价格或购买意向)。

6. 模型调优

  • 根据评估结果调整模型参数或进行特征工程,以进一步提高模型性能。

数据集

数据集如下图所示:

代码及结果

import pandas as pd  
from sklearn.model_selection import train_test_split  
from sklearn.linear_model import LinearRegression  
from sklearn.metrics import mean_squared_error  
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score # 加载数据集  
data = pd.read_csv('D:/项目/汽车销售/汽车销售财务业绩.csv',encoding='GBK') 
# 查看数据集的维度
print(data.shape)
# 查看数据集的前几行
print(data.head())

独热编码

独热编码(One-Hot Encoding)是一种常用的将类别型数据(Categorical Data)转换为数值型数据(Numerical Data)的方法,特别适用于机器学习算法中。在独热编码中,每个类别值都会被转换成一个新的二进制列(也称为哑变量),这些列中只有一个为1(表示该样本属于该类别),其余为0。这种方法能够确保模型能够正确处理类别型数据,并且每个类别都被视为完全独立的特征。

#文本分析,使用独热编码将文本型数据转换为数值型数据# 对'销售类型'进行独热编码  
sales_type_onehot = pd.get_dummies(data['销售类型'], prefix='销售类型')  # 对'销售模式'进行独热编码  
sales_mode_onehot = pd.get_dummies(data['销售模式'], prefix='销售模式')  # 将独热编码的DataFrame与原始DataFrame(除去'销售类型'、'销售模式'和'输出'列)合并   
data_without_categorical = data.drop(['销售类型', '销售模式', '输出'], axis=1)  
data_encoded = pd.concat([data_without_categorical, sales_type_onehot, sales_mode_onehot], axis=1)  # 将最后一列作为目标变量(y)  
y = data['输出'].map({'正常': 0, '异常': 1})  # 其余作为特征(X)  
X = data_encoded  

随机森林模型训练

 # 机器学习选择随机森林算法
# 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)    # 创建随机森林分类器  
from sklearn.ensemble import RandomForestClassifier  
clf = RandomForestClassifier(n_estimators=100, random_state=42)    # 训练模型  
clf.fit(X_train, y_train)    # 预测测试集  
y_pred = clf.predict(X_test)    # 评估模型  
from sklearn.metrics import accuracy_score  
accuracy = accuracy_score(y_test, y_pred)    
print(f'Model accuracy: {accuracy}')

特征重要性图

import matplotlib.pyplot as plt  
import numpy as np# 获取特征重要性  
importances = clf.feature_importances_  
std = np.std([tree.feature_importances_ for tree in clf.estimators_], axis=0)  
indices = np.argsort(importances)[::-1]  # 绘制特征重要性  
plt.figure()  
plt.title("Feature importances")  
plt.bar(range(X_train.shape[1]), importances[indices],  color="r", yerr=std[indices], align="center")  
plt.xticks(range(X_train.shape[1]), indices)  
plt.xlim([-1, X_train.shape[1]])  
plt.show()

混淆矩阵

from sklearn.metrics import confusion_matrix  
from sklearn.metrics import plot_confusion_matrix  # 绘制混淆矩阵  
cm = confusion_matrix(y_test, y_pred)  
disp = plot_confusion_matrix(clf, X_test, y_test,  display_labels=['正常', '异常'],  cmap=plt.cm.Blues,  normalize=None)  
disp.ax_.set_title('Confusion Matrix')  
plt.show()

ROC曲线

from sklearn.metrics import roc_curve, auc  
from sklearn.metrics import plot_roc_curve  # 计算ROC曲线和AUC  
fpr, tpr, thresholds = roc_curve(y_test, clf.predict_proba(X_test)[:, 1])  
roc_auc = auc(fpr, tpr)  # 绘制ROC曲线  
plt.figure()  
lw = 2  
plt.plot(fpr, tpr, color='darkorange', lw=lw, label='ROC curve (area = %0.2f)' % roc_auc)  
plt.plot([0, 1], [0, 1], color='navy', lw=lw, linestyle='--')  
plt.xlim([0.0, 1.0])  
plt.ylim([0.0, 1.05])  
plt.xlabel('False Positive Rate')  
plt.ylabel('True Positive Rate')  
plt.title('Receiver Operating Characteristic Example')  
plt.legend(loc="lower right")  
plt.show()

相关文章:

【python】随机森林预测汽车销售

目录 引言 1. 数据收集与预处理 2. 划分数据集 3. 构建随机森林模型 4. 模型训练 5. 模型评估 6. 模型调优 数据集 代码及结果 独热编码 随机森林模型训练 特征重要性图 混淆矩阵 ROC曲线 引言 随机森林(Random Forest)是一种集成学习方法…...

Stable Diffusion教程|练丹师是如何炼丹的Lora模型训练

前言 还记得我们之前就讲过学习SD成为炼丹师不?那么今天就来手把手教大家炼丹,看看同一个角色或某种风格的小模型是如何制作出来的。 目录 1 炼丹介绍 2 环境准备 3 Lora模型训练 **一、**炼丹介绍 什么是炼丹? 早在学习SD地第一篇就…...

QT--SQLite

配置类相关的表,所以我使用sqlite,且QT自带该组件; 1.安装 sqlite-tools-win-x64-3460000、SQLiteExpert5.4.31.575 使用SQLiteExpert建好数据库.db文件,和对应的表后把db文件放在指定目录 ./db/program.db; 2.选择sql组件 3.新…...

【深度学习入门篇 ②】Pytorch完成线性回归!

🍊嗨,大家好,我是小森( ﹡ˆoˆ﹡ )! 易编橙终身成长社群创始团队嘉宾,橙似锦计划领衔成员、阿里云专家博主、腾讯云内容共创官、CSDN人工智能领域优质创作者 。 易编橙:一个帮助编程小…...

Syslog 管理工具

Syslog常被称为系统日志或系统记录,是一种用来在互联网协议(TCP/IP)的网上中传递记录档消息的标准,常用来指涉实际的Syslog 协议,或者那些提交syslog消息的应用程序或数据库。 系统日志协议(Syslog&#x…...

硅纪元AI应用推荐 | 百度橙篇成新宠,能写万字长文

“硅纪元AI应用推荐”栏目,为您精选最新、最实用的人工智能应用,无论您是AI发烧友还是新手,都能在这里找到提升生活和工作的利器。与我们一起探索AI的无限可能,开启智慧新时代! 百度橙篇,作为百度公司在202…...

Codeforces Round 954 (Div. 3)

🚀欢迎来到本文🚀 🍉个人简介:陈童学哦,彩笔ACMer一枚。 🏀所属专栏:Codeforces 本文用于记录回顾本彩笔的解题思路便于加深理解。 📢📢📢传送阵 A. X Axis解…...

【Django】报错‘staticfiles‘ is not a registered tag library

错误截图 错误原因总结 在django3.x版本中staticfiles被static替换了,所以这地方换位static即可完美运行 错误解决...

LeetCode 算法:二叉树的最近公共祖先 III c++

原题链接🔗:二叉树的最近公共祖先 难度:中等⭐️⭐️ 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点…...

Windows CMD 命令汇总表

Windows CMD 命令汇总表 Windows CMD 命令汇总表目录操作磁盘操作文件操作其他命令FTP 命令高级系统命令批处理命令网络命令安全和权限命令 Windows CMD 命令指南目录操作MD - 创建子目录CD - 切换当前目录RD - 删除子目录DIR - 显示目录内容PATH - 设置可执行文件的搜索路径TR…...

【python+appium】自动化测试

pythonappium自动化测试系列就要告一段落了,本篇博客咱们做个小结。 首先想要说明一下,APP自动化测试可能很多公司不用,但也是大部分自动化测试工程师、高级测试工程师岗位招聘信息上要求的,所以为了更好的待遇,我们还…...

vue 数据类型

文章目录 ref 创建:基本类型的响应式数据reactive 创建:对象类型的响应式数据ref 创建:对象类型的响应式数据ref 对比 reactive将一个响应式对象中的每一个属性,转换为ref对象(toRefs 与 toRef)computed (根据计算进行修改) ref 创…...

MySQL(基础篇)

DDL (Data Definition Language) 数据定义语言,用来定义数据库对象(数据库,表, 字段) DML (Data Manipulation Languag) 数据操作语言,用来对数据库表中的数据进行增删改 DQL (Data Query Language) 数据查询语言,用…...

springboot中通过jwt令牌校验以及前端token请求头进行登录拦截实战

前言 大家从b站大学学习的项目侧重点好像都在基础功能的实现上,反而一个项目最根本的登录拦截请求接口都不会写,怎么拦截?为什么拦截?只知道用户登录时我后端会返回一个token,这个token是怎么生成的,我把它…...

从零开始开发视频美颜SDK:实现直播美颜效果

因此,开发一款从零开始的视频美颜SDK,不仅可以节省成本,还能根据具体需求进行个性化调整。本文将介绍从零开始开发视频美颜SDK的关键步骤和实现思路。 一、需求分析与技术选型 在开发一款视频美颜SDK之前,首先需要进行详细的需求…...

极验语序点选验证码识别(一)

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 极验文字点选验证码不必多说,很多小伙伴,借助标注工具或者打码平台标注完数据集后,使用开源的目标检测网络即可完成,欢迎收看我之前的文章: Pytorch利用ddddocr辅助识别点选验证码 或者使…...

什么是 HTTP POST 请求?初学者指南与示范

在现代网络开发领域,理解并应用 HTTP 请求 方法是基本的要求,其中 "POST" 方法扮演着关键角色。 理解 POST 方法 POST 方法属于 HTTP 协议的一部分,主旨在于向服务器发送数据以执行资源的创建或更新。它与 GET 方法区分开来&…...

第一次作业

任务需求:1.DMz区内的服务器,办公区仅能在办公时间内(9-18)可以访问,生产区的设备全天可以访问 2.生产区不允许访问互联网,办公区和游客区可以访问互联网 3.办公区设备10.0.2.10不允许访问DMZ区的FTP服务器和http服务器,仅能ping通…...

【机器学习】12.十大算法之一支持向量机(SVM - Support Vector Machine)算法原理讲解

【机器学习】12.十大算法之一支持向量机(SVM - Support Vector Machine)算法原理讲解 一摘要二个人简介三基本概念四支持向量与超平面4.1 超平面(Hyperplane)4.2 支持向量(Support Vectors)4.3 核技巧&…...

使用 `useAppConfig` :轻松管理应用配置

title: 使用 useAppConfig :轻松管理应用配置 date: 2024/7/11 updated: 2024/7/11 author: cmdragon excerpt: 摘要:本文介绍了Nuxt开发中useAppConfig的使用,它便于访问和管理应用配置,支持动态加载资源、环境配置切换、权限…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...