基于python的随机森林多分类模型

1.随机森林多分类模型

1.1 基本原理

        随机森林(Random Forest)是一种基于决策树的集成学习方法,它通过将多个决策树进行组合,以投票或平均的方式得到最终的预测结果。在多分类问题中,随机森林通过构建多个决策树,每个决策树都对数据进行分类预测,最终通过多数投票的方式确定样本所属的类别。本文将对随机森林多分类模型的原理进行详细介绍,内容将分为数据准备、随机抽样、决策树构建、随机森林构建和模型评估等部分。

1.2 数据准备

        随机森林模型的构建首先需要准备好用于训练和测试的数据集。数据集应包含特征和标签,其中特征是用于预测标签的变量,标签是我们要预测的变量。在多分类问题中,标签通常表示不同的类别。数据集应被分为训练集和测试集,通常是将数据集的70%用于训练,30%用于测试。这样可以确保模型在训练过程中学习到数据的特征,同时在测试集上评估模型的性能。

1.3 随机抽样

        随机森林模型的核心思想之一是随机抽样。在每个决策树的训练过程中,我们随机选择一部分特征和样本进行训练,以减少过拟合的风险。这个过程被称为“随机抽样”。具体来说,随机抽样包括两个方面的随机性:

  1. 样本随机性:从原始数据集中随机选择一定数量的样本(有放回抽样),构建一棵决策树。这样,每棵决策树都是基于不同的样本子集进行训练的,从而增加了树之间的多样性。
  2. 特征随机性:在每个节点上,随机选择一部分特征子集,并基于这些特征进行最优划分。这个过程也被称为“特征袋外”(Feature Bagging)。通过随机选择特征子集,可以减少决策树之间的相关性,提高模型的泛化能力。
1.4 决策树构建

图1-1 决策树构建

        在随机抽样之后,我们可以开始构建决策树。决策树是一种树形结构,其中每个节点代表一个特征,每个叶子节点代表一个类别。在构建决策树时,我们使用训练集中的数据来确定每个节点的最佳特征和最佳分割点。具体过程如下:

  1. 从根节点开始,选择一个特征作为当前节点的分裂特征。分裂特征的选择基于信息增益、基尼指数等准则,这些准则用于衡量特征对分类结果的影响程度。
  2. 根据选定的分裂特征,将训练集划分为两个或多个子集。每个子集对应于分裂特征的一个取值范围或类别。
  3. 对每个子集递归地执行步骤1和步骤2,直到满足停止条件(如树的最大深度、叶子节点中的最小样本数等)。在递归过程中,每个节点都基于其对应的训练子集进行最优划分。
  4. 当满足停止条件时,将当前节点作为叶子节点,并根据该节点对应的训练子集中样本的类别分布情况,确定该叶子节点的类别标签。对于多分类问题,通常选择样本数最多的类别作为叶子节点的类别标签。
1.5 随机森林构建

图1-2 随机森林构建

        随机森林是由多个决策树组成的集成模型。在构建随机森林时,我们需要选择决策树的数量(即森林中树的数量)和每个决策树的最大深度等参数。这些参数的选择通常基于经验或交叉验证等方法来确定。具体来说,随机森林的构建过程如下:

  1. 重复执行随机抽样和决策树构建的过程,构建多棵决策树。每棵决策树都是基于不同的样本子集和特征子集进行训练的,从而保证了树之间的多样性。
  2. 当所有决策树都构建完成后,将它们组合成一个随机森林模型。在预测时,将待预测样本输入到随机森林中,每棵决策树都会给出一个预测结果(即样本所属的类别)。
  3. 最后,通过多数投票的方式确定待预测样本的最终类别。具体来说,对每个类别统计其在所有决策树中的预测次数(即投票数),并选择投票数最多的类别作为最终预测结果。
1.6 模型评估

        为了评估随机森林模型的性能,我们可以使用测试集来计算模型的准确率、精确率、召回率和F1分数等指标。此外,我们还可以使用ROC曲线和AUC值等指标来评估模型的分类效果。如果模型的性能不够好,我们可以调整模型的参数(如决策树的数量、每个决策树的最大深度等)或增加更多的决策树来提高模型的性能。同时,随机森林模型还可以提供特征重要性评估。通过计算每个特征在随机森林中被用来划分节点的次数或平均信息增益等指标,我们可以评估特征对分类结果的重要性程度。这对于特征选择和模型优化非常有用。

        综上,随机森林多分类模型通过构建多个基于随机抽样的决策树,并通过多数投票的方式确定样本所属的类别,从而实现了对多分类问题的有效预测。该模型具有泛化能力强、能够处理高维数据、对噪声和异常值不敏感等优点,在分类问题中得到了广泛应用。通过合理设置模型的参数和进行特征重要性评估,我们可以进一步提高模型的性能和解释性。

2.代码与运行结果

2.1 数据加载与预处理
import pandas as pd  
import numpy as np 
import matplotlib.pyplot as plt 
# 忽略Matplotlib的警告(可选)  
import warnings  
warnings.filterwarnings("ignore")  # 设置Matplotlib的字体属性  
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用于中文显示,你可以更改为其他支持中文的字体  
plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号    
# 加载数据  
df = pd.read_excel('污染物浓度数据.xlsx')  # 将“质量等级”一列转换为数字  
mapping = {'优': 1, '良': 2, '轻度污染': 3, '中度污染': 4, '重度污染': 5, '严重污染': 6}  
df['质量等级'] = df['质量等级'].map(mapping).fillna(0)  # 假设没有'严重污染'等级,用0填充非映射值  # 检测并处理缺失值  
# 这里假设NaN表示缺失值  
print(df.isnull().sum())  # 检测缺失值  # 可视化缺失值  
import missingno as msno  
msno.matrix(df)  # 删除包含缺失值的行(这里仅作为示例,实际中可能需要根据业务逻辑处理)  
df = df.dropna()  # 检测重复值  
print(df.duplicated().sum())  # 删除重复的行(如果有的话)  
df = df.drop_duplicates()

        运行结果:

图2-1

2.2 数据分布可视化
plt.figure(figsize=(20, 10))  
for i, feature in enumerate(df.columns, 1):  plt.subplot(3, len(df.columns)-7, i)  sns.histplot(df[feature], kde=True, bins=30, label=feature,color='black') plt.title(f'{feature}的数据分布', fontsize=20, color='y')  # 如果需要设置坐标轴标签的字体大小和颜色  plt.xlabel('X-axis Label', fontsize=15, color='blue')  # 设置x轴标签的字体大小和颜色  plt.ylabel('Y-axis Label', fontsize=20, color='green')  # 设置y轴标签的字体大小和颜色  # 还可以调整刻度线的长度、宽度等属性  plt.tick_params(axis='x', labelsize=20, colors='red', length=5, width=1)  # 设置x轴刻度线、刻度标签的更多属性  plt.tick_params(axis='y', labelsize=20, colors='deepskyblue', length=5, width=1)  # 设置y轴刻度线、刻度标签的更多属性 
plt.tight_layout()  
plt.show()

        运行结果:

图2-2

2.3随机森林多分类模型建立与训练

2.3.1模型建立与训练

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 classification_report, confusion_matrix  # 准备数据  
X = df[['年','月','日','PM10', 'O3', 'SO2', 'PM2.5', 'NO2', 'CO', 'AQI']]  
y = df['质量等级']  # 划分训练集和测试集  
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 拟合分类模型  
clf = RandomForestClassifier(n_estimators=100, random_state=42)  
clf.fit(X_train, y_train)  # 预测  
y_pred = clf.predict(X_test)  # 评估模型  
print(classification_report(y_test, y_pred))  
# 打印混淆矩阵  
cm = confusion_matrix(y_test, y_pred)  
print("Confusion Matrix:")  
print(cm)  

        运行结果:

     图2-3

         由图2-3中模型评估报告可以看出准确率达到100%。

2.3.2 预测结果可视化


plt.figure(figsize=(7, 6))  
sns.heatmap(df_cm, annot=True, fmt='d', cmap='Blues')  
plt.xlabel('Predicted')  
plt.ylabel('True')  
plt.show()

        运行结果:

图2-4

        从图2-4的混淆矩阵也可以看出准确率达到100%。

plt.figure(figsize=(6,3))  plt.subplot(1, 2, 1)  
sns.histplot(y_test, kde=True,color='blue', label='Truth')  
plt.title('Distribution of Truth')  
plt.xlabel('Quality Level')  
plt.ylabel('Count')  plt.subplot(1, 2, 2)  
sns.histplot(y_pred, kde=True,  color='orange', label='Prediction')  
plt.title('Distribution of Prediction')  
plt.xlabel('Quality Level')  
plt.ylabel('Count')  plt.tight_layout()  
plt.show()

        运行结果:

图2-5

2.3 分类预测
import pandas as pd  
from sklearn.ensemble import RandomForestClassifier  
from sklearn.metrics import classification_report, confusion_matrix  
import matplotlib.pyplot as plt  
import seaborn as sns  
# 加载test.xls数据  
test_df = pd.read_excel('test.xls')  # 预处理测试数据以匹配训练数据   
X_test_actual = test_df[['年','月','日','PM10', 'O3', 'SO2', 'PM2.5', 'NO2', 'CO', 'AQI']]  # 使用模型进行预测  
y_test_pred = clf.predict(X_test_actual)  
print(y_test_pred)
sns.histplot(y_test_pred, kde=True,  color='black', label='Prediction')  
plt.title('Distribution of Prediction')  
plt.xlabel('Quality Level')  
plt.ylabel('Count')  plt.tight_layout()  
plt.show()

        运行结果:

图2-6

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

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

相关文章

开发RpcProvider的网络服务

首先更改src的CMakeLists.txt的内容为: #当前目录的所有源文件放入SRC_LIST aux_source_directory(. SRC_LIST)#生成SHARED动态库 #add_library(mprpc SHARED ${SRC_LIST})#由于muduo是静态库,为了使用muduo,将mprpc也生成为静态库 add_libr…

A股周一走势历史罕见,你知道是为什么吗?

今天的A股,让人历史罕见,你知道是为什么吗?盘面出现2个重要信号,一起来看看: 1、今天大盘低开低走,跌懵了,两市板块全部在等待翻红,这让人历史罕见。 2、盘面出现2个重要信号&#x…

【计算机毕业设计】167校园失物招领微信小程序

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

办公人导航-上网导航,找网站,下软件,找资源!

办公人导航是一个专门为办公人员设计的实用导航网站,旨在帮助用户高效地找到各种优质的办公资源和工具。无论是需要查找办公软件、学习资源还是娱乐工具,在办公人导航上都能找到你需要的内容。 办公人导航-实用的办公生活导航网站!https://ww…

PADS系列:如何导入元件库新建元件

对于普通的原理图,位置的摆放是比较随意的,并且也没有一些特殊的或者元件库里面没有的元件,相对来说绘制会比较简单。但是如果碰上复杂一点的电路,要绘制起来就会比较麻烦,需要一些新的PADS使用技巧,最基础…

k8s设置pod资源请求和限制

设置资源请求和限制 实验目标: 学习如何为 Pod 设置资源请求和限制,以优化集群资源分配。 实验步骤: 创建一个 Deployment,并设置 CPU 和内存的资源请求和限制。使用 kubectl describe 命令查看资源分配情况。观察资源限制对 P…

全球首个数字人开源了

DUIX(Dialogue User Interface System)是硅基智能打造的AI数字人智能交互平台。通过将数字人交互能力开源,开发者可自行接入多方大模型、语音识别(ASR)、语音合成(TTS)能力,实现数字…

Chrome Tracing flow event demo

Chrome Tracing flow event demo 1.效果2.解释3.代码 Chrome Tracing flow event demo 1.效果 2.解释 cpu_op 为host上的opkernel 为device上的kernel标记一条线 {"ph": "s", "id": 13, "pid": 1, "tid": 100, "ts&qu…

【Containerd】Containerd接入Harbor仓库

说明 在日常使用容器时,安全方便起见一般都会使用到私有仓库,一般都是采用 harbor 作为私有仓库,docker 对接 harbor 仓库非常简单,那么 containerd 如何对接 harbor 呢? 在内网使用 harbor 根据个人习惯&#xff0c…

eNSP中ACL访问控制表的配置和使用

一、拓扑图 1.新建拓扑图 2.PC端配置 PC1: PC2: PC3: 二、基本命令配置 1.S1配置 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 10 [S1-vlan10]vlan 20 [S1-vlan20]vlan 30 [S1-vlan30]quit [S1]interface Vlanif 10 [S1-Vlanif10]ip address 192.168.10…

Gradle学习-2 Groovy

1、Groovy基础语法 1.1、基本数据类型 Groovy支持数据类型&#xff1a;byte, short, int, long, float, double, char &#xff08;1&#xff09;创建一个Android Studio项目 &#xff08;2&#xff09;在根目录新建一个 leon.gradle&#xff0c;输入以下内容 leon.gradle…

Ansible自动化运维,(1)模块

ansible是基于Python语言实现的&#xff0c;模块化&#xff1a;调用特定的模块完成特定的任务&#xff0c;支持自定义模块&#xff0c;可使用任何编程语言写模块(账号&#xff0c;软件等)。部署简单&#xff0c;基于python和SSH&#xff0c;相对安全&#xff0c;基于OpenSSH。 …

高考填报志愿,为何要优先考虑个人兴趣 ?

随着高考成绩纷纷出炉&#xff0c;考生又要面对人生另外一个重要的选择&#xff0c;那便是填报志愿&#xff0c;这关系到自己能否进入满意的学校和专业。如果考生对上述两个方面都不满意&#xff0c;那高考目的就没有达到。既然填报志愿如此重要&#xff0c;考生和家长在选择的…

软件构造 | Design Patterns for Reuse and Maintainability

Design Patterns for Reuse and Maintainability &#xff08;面向可复用性和可维护性的设计模式&#xff09; Open-Closed Principle (OCP) ——对扩展的开放&#xff0c;对修改已有代码的封 Why reusable design patterns A design… …enables flexibility to change …

Nuxt3 [Vue warn]: Hydration node mismatch:【解决方案】

[Vue warn]: Hydration node mismatch: 水合节点不匹配 Server rendered element contains more child nodes than client vdom. 服务器呈现的元素包含的子节点多于客户端vdom。 这个问题解决起来也很好解决&#xff0c;看这个问题是怎么出来的&#xff0c;看代码&#xff1a;…

暗影精灵8Pro声音没有了,这个方法可以解决,亲测有效!

这个OMEN by HP Gaming Laptop 16-k0xxx Windows 10 Sound Driver Mod &#xff0c;真的解决了我的大问题&#xff01; 如果你的暗影精灵8 Pro酷睿版突然变得哑巴了&#xff0c;扬声器和麦克风都发不出声音&#xff0c;那可能是声卡驱动出了问题。 别担心&#xff0c;我也是个…

eNSP中三层交换机的配置和使用

一、拓扑图 1.新建拓扑图 2.PC端配置 PC1: PC2&#xff1a; 二、基本命令配置 1.S1配置 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 10 //在交换机 S1 上创建 VLAN 10 [S1-vlan10]vlan 20 // 在交换机 S1 上创建 VLAN 20 [S1-vlan20]quit //退出 VLAN 配置…

舆论中心的《黑神话:悟空》:人们总希望,这只猴子能打破些什么

距离《黑神话&#xff1a;悟空》上线还有60天。外界关于游戏的争议有很多&#xff0c;但游戏科学却很少出来回应什么。 6月9日&#xff0c;博主兲虎发文称&#xff0c;《黑神话&#xff1a;悟空》之所以在发布宣传视频后&#xff0c;一直遭受到所谓性别歧视的攻击与污蔑&#…

短视频营销系统小程序源码

开启全新营销时代 &#x1f3a5;一、引言&#xff1a;短视频营销微信小程序&#xff0c;营销新风尚 在数字化时代&#xff0c;短视频以其直观、生动的特点迅速崛起&#xff0c;成为用户获取信息、娱乐消遣的重要渠道。而短视频营销微信小程序则是将短视频与微信营销完美结合&…

解决node: bad option: -V

出现这个问题是由于我们的不当操作造成的&#xff0c;v是需要小写的&#xff0c;看下图 node --version node -v