保姆级随机森林算法Python教学

article/2025/10/13 14:58:30

摘要

        机器学习算法是数据挖掘、数据能力分析和数学建模必不可少的一部分,而随机森林算法和决策树算法是其中较为常用的两种算法,本文将会对随机森林算法的Python实现进行保姆级教学。

0 绪论

        数据挖掘和数学建模等比赛中,除了算法的实现,还需要对数据进行较为合理的预处理,包括缺失值处理、异常值处理、特征值的特征编码等等,本文默认读者的数据均已完成数据预处理,如有需要,后续会将数据预处理的方法也进行发布。

一、材料准备

        Python编译器:Pycharm社区版或个人版等

        训练数据集:此处使用2022年数维杯国际大学生数学建模竞赛C题的附件数据为例。

        数据处理:经过初步数据清洗和相关性分析得到初步的特征,并利用决策树进行特征重要性分析,完成二次特征降维,得到'CDRSB_bl', 'PIB_bl', 'FBB_bl'三个自变量特征,DX_bl为分类特征。

二、算法原理

        随机森林算法是一种机器学习算法,它通过构建多棵决策树并将它们的预测结果结合起来来预测目标变量。

        随机森林是一种典型的Bagging模型,是基于多种决策树的分类智能算法。首先,在处理后的数据集中进行随机抽样,形成n种不同的样本数据集。然后,根据数据集构建不同的决策树模型,再将测试集代入决策树中,得到分类结果,最后通过投票进行预测分类,具体的流程图如下图1所示:

Figure 1  随机森林分类流程图

三、算法Python实现

    3.1 数据加载

import pandas as pd
# 加载数据
X = pd.DataFrame(pd.read_excel('DataX.xlsx')).values  # 输入特征
y = pd.DataFrame(pd.read_excel('DataY.xlsx')).values  # 目标变量

         此处将自变量存放在DataX中,因变量存放在DataY中,如需进行样本预测,可另存一个文件(格式与DataX一致),在后文predict中进行替换。

3.2 创建随机森林分类器

from sklearn.ensemble import RandomForestClassifier
# 创建随机森林分类器
clf = RandomForestClassifier(n_estimators=100)

本文将迭代次数设为100

3.3 创建ShuffleSplit对象,用于执行自动洗牌

from sklearn.model_selection import ShuffleSplit
# 创建ShuffleSplit对象,用于执行自动洗牌
ss = ShuffleSplit(n_splits=1, train_size=0.7, test_size=0.3, random_state=0)

         此处使用70%的样本数据作为训练集,30%的样本数据作为测试集,如果在国际比赛中,可通过调整其测试训练比,来进行模型的敏感性和稳定性分析。

3.4 循环遍历每个拆分,并使用随机森林分类器对每个拆分进行训练和评估

from sklearn.metrics import confusion_matrix, classification_report, accuracy_score
# 循环遍历每个拆分,并使用随机森林分类器对每个拆分进行训练和评估
for train_index, test_index in ss.split(X, y):X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]clf.fit(X_train, y_train)y_pred = clf.predict(X_test)print("Confusion Matrix:")print(confusion_matrix(y_test, y_pred))  # 输出分类结果矩阵print("Classification Report:")print(classification_report(y_test, y_pred))  # 输出混淆矩阵print("Accuracy:")print(accuracy_score(y_test, y_pred))print(clf.predict(X_train))  # 此处用作预测,预测数据可以用另一个文件导入,格式与DataX相同print(clf.score(X_test, y_test))

        一个分类器的好坏、是否适用,离不开模型的评估,常用的方法就是混淆矩阵和F1-Score,博主建议直接使用F1-Score即可,如果时间充足,可以使用多种机器学习算法的对比,说明你选择随机森林或者其他机器学习算法的原因,这是加分项。

        此处将结果矩阵、分类的准确性、F1-Score值均输出,可适当采用,建议弄成表格放进论文里。

3.5 计算特征重要性

# 计算特征重要性
importances = clf.feature_importances_  
print(importances)

        如何判断选择的特征是否需要再次降维,得到的特征重要性非常低,即说明这个指标在该算法分类中不起明显作用,可将该特征进行删除。

3.6 将特征重要性可视化

import matplotlib.pyplot as plt
# 画条形图
plt.barh(range(len(importances)), importances)# 添加标题
plt.title("Feature Importances")
feature_names = ['CDRSB_bl', 'PIB_bl', 'FBB_bl']
# 添加特征名称
plt.yticks(range(len(importances)), feature_names)# 显示图像
# plt.show()
plt.savefig('feature_importance.png')

        对特征重要性进行可视化,可以提高论文的辨识度,也算是加分项,比单纯弄成表格的要好。

3.7 生成决策树可视化图形

from sklearn.tree import export_graphviz
import graphviz
# 使用 export_graphviz 函数将决策树保存为 dot 文件
dot_data = export_graphviz(clf.estimators_[0], out_file=None,feature_names=['CDRSB_bl', 'PIB_bl','FBB_bl'])# 使用 graphviz 库读取 dot 文件并生成决策树可视化图形
graph = graphviz.Source(dot_data)
graph.render('decision_tree')

        这里将随机森林的算法过程进行可视化,一般来说很长,图片不美观,可以不放进论文里,简单说明即可。

3.8 完整实现代码

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score
from sklearn.model_selection import ShuffleSplit
import pandas as pd
from sklearn.tree import export_graphviz
import graphviz
import matplotlib.pyplot as plt# 加载数据
X = pd.DataFrame(pd.read_excel('DataX.xlsx')).values  # 输入特征
y = pd.DataFrame(pd.read_excel('DataY.xlsx')).values  # 目标变量# 创建随机森林分类器
clf = RandomForestClassifier(n_estimators=100)# 创建ShuffleSplit对象,用于执行自动洗牌
ss = ShuffleSplit(n_splits=1, train_size=0.7, test_size=0.3, random_state=0)
# 循环遍历每个拆分,并使用随机森林分类器对每个拆分进行训练和评估
for train_index, test_index in ss.split(X, y):X_train, X_test = X[train_index], X[test_index]y_train, y_test = y[train_index], y[test_index]clf.fit(X_train, y_train)y_pred = clf.predict(X_test)print("Confusion Matrix:")print(confusion_matrix(y_test, y_pred))  # 输出分类结果矩阵print("Classification Report:")print(classification_report(y_test, y_pred))  # 输出混淆矩阵print("Accuracy:")print(accuracy_score(y_test, y_pred))print(clf.predict(X_train))  # 此处用作预测,预测数据可以用另一个文件导入,格式与DataX相同print(clf.score(X_test, y_test))importances = clf.feature_importances_  # 计算特征重要性
print(importances)
# 画条形图
plt.barh(range(len(importances)), importances)# 添加标题
plt.title("Feature Importances")
feature_names = ['CDRSB_bl', 'PIB_bl', 'FBB_bl']
# 添加特征名称
plt.yticks(range(len(importances)), feature_names)# 显示图像
# plt.show()
plt.savefig('feature_importance.png')
# 使用 export_graphviz 函数将决策树保存为 dot 文件
dot_data = export_graphviz(clf.estimators_[0], out_file=None,feature_names=['CDRSB_bl', 'PIB_bl','FBB_bl'])# 使用 graphviz 库读取 dot 文件并生成决策树可视化图形
graph = graphviz.Source(dot_data)
graph.render('decision_tree')

四、 结论

        对随机森林进行Python的实现,并计算了结果矩阵、评估矩阵和准确率,可支持对模型的准确性、适用性、敏感性和稳定性进行分析。并通过对特征重要性和随机森林算法实现过程的可视化,很好地完成了一趟完整的随机森林算法的演示。

五、 备注

        本文为原创文章,禁止转载,违者必究。


http://chatgpt.dhexx.cn/article/K7dInBSX.shtml

相关文章

python实现随机森林

1. 随机森林的介绍 随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。随机森林的名称中有两个关键词,一个是“随…

随机森林可视化

今天看到别人的文章,说到了随机森林可视化,于是尝试了下。 window安装 windows版本安装: 1.在下面去下载window的exe安装包,安装graphviz。 http://www.graphviz.org/download/ 在路径选项,点击add path to computer&#xff0c…

随机森林模型

本文代码及数据集来自《Python大数据分析与机器学习商业案例实战》 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果。集成学…

随机森林文本分类

随机森林原理及代码实现 机器学习系列 第一章 随机森林原理及代码实现 文章目录 随机森林原理及代码实现机器学习系列前言一、集成算法是什么?二、随机森林是什么三、 数据预处理3.1 先来看一下我们的文本数据3.2 预处理3.3 统计评论情感值积极与消极的占比 二、使…

随机森林

随机森林-----集成算法之一,分类,回归和特征选择 算法步骤: 1.用有抽样放回的方法(bootstrap)从样本集中选取n个样本作为一个训练集 2.用抽样得到的样本集生成一棵决策树。在生成的每一个结点: 1.随机不重复…

随机森林(Random Forest)简单介绍

文章目录 随机森林(Random Forest)简单介绍1. 介绍2. 工作原理2.1 随机森林的基本原理2.1.1 随机采样2.1.2. 随机选特征2.1.3. 多数表决 2.2 随机森林的建模过程2.2.1. 建立多颗决策树2.2.2. 特征随机选择2.2.3. 样本随机选择2.2.4. 决策树训练与生成2.2…

什么是随机森林?

什么是随机森林? 随机森林是一种有监督的机器学习算法。由于其准确性,简单性和灵活性,它已成为最常用的一种算法。事实上,它可以用于分类和回归任务,再加上其非线性特性,使其能够高度适应各种数据和情况。 …

[Machine Learning Algorithm] 随机森林(Random Forest)

1 什么是随机森林? 作为新兴起的、高度灵活的一种机器学习算法,随机森林(Random Forest,简称RF)拥有广泛的应用前景,从市场营销到医疗保健保险,既可以用来做市场营销模拟的建模,统计客户来源,保留和流失,也可用来预测疾病的风险和病患者的易感性。最初,我是在参加校…

随机森林算法

随机森林 1.1定义1.2随机森林的随机性体现的方面1.3 随机森林的重要作用1.4 随机森林的构建过程1.5 随机森林的优缺点2. 随机森林参数描述3. 分类随机森林的代码实现 1.1定义 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法。随机森林非常简单&…

机器学习-随机森林(RandomForest)详解

1.什么是随机森林 随机森林就是通过集成学习的思想将多棵树集成的一种算法,它的基本单元是决策树,而它的本质属于机器学习的一大分支——集成学习(Ensemble Learning)方法。 解读下上面的话: 1.随机森林属于集成算法&a…

机器学习之MATLAB代码--随机森林(一)

代码: %% 初始化数据 clc clear close all %% 导入数据 data xlsread(数据集.xlsx,Sheet1,A1:F100);%导入数据库%% 划分训练集和测试集 TE randperm(100);%将数据打乱,重新排序;PN data(TE(1: 80), 1: 5);%划分训练集输入 TN data(TE(1…

sklearn基础篇(七)-- 随机森林(Random forest)

上一节我们提到决策树的一个主要缺点在于经常对训练数据过拟合。随机森林是解决这个问题的一种方法。随机森林是属于集成学习,其核心思想就是集成多个弱分类器以达到一个强分类器的效果。 1 bagging的原理 随机森林采用Bagging的思想,所谓的Bagging可以…

机器学习5—分类算法之随机森林(Random Forest)

随机森林(Random Forest) 前言一、随机森林1.什么是随机森林2.随机森林的特点3.随机森林的生成 二、随机森林的函数模型三、随机森林算法实现1.数据的读取2.数据的清洗和填充3.数据的划分4.代码的实现 总结 前言 随机森林(Random Forest&…

随机森林(Random Forest)通俗教程

目录 1 什么是随机森林?2 随机森林的特点3 随机森林的相关基础知识4 随机森林的生成5 袋外错误率(oob error)6 随机森林工作原理解释的一个简单例子7 随机森林的Python实现8 参考内容 1 什么是随机森林? 作为新兴起的、高度灵活的…

机器学习算法系列(十八)-随机森林算法(Random Forest Algorithm)

阅读本文需要的背景知识点:决策树学习算法、一丢丢编程知识 最近笔者做了一个基于人工智能实现音乐转谱和人声分离功能的在线应用——反谱(Serocs),感兴趣的读者欢迎试用与分享,感谢您的支持!serocs.cn 一…

使用jvisualvm通过JMX的方式远程监控JVM的运行情况

公众号,欢迎关注 使用jvisualvm通过JMX的方式远程监控JVM的运行情况,步骤如下 远程服务器的配置 在启动java程序时加上如下几个参数 -Dcom.sun.management.jmxremote-Dcom.sun.management.jmxremote.sslfalse-Dcom.sun.management.jmxremote.authen…

JDK 中 jvisualvm 没有 VisualGC

1、图片描述问题 2、解决方法 (1)点击菜单栏中 工具 > 插件 (2)点击 可用插件 > 检查最新版本 出现如下情况表示不成功。 (3)点击 设置 > 编辑 链接: https://visualvm.github.io/…

JVisualVM 的使用教程

欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。 一、简介 Java VisualVM 是一个直观的图形用户界面,基于Java 的应用程序,在给定的 Java 虚拟机&#xf…

使用jvisualvm、jmc远程监控JVM

演示环境:jdk1.8 jvisualvm和jmc都是JDK自带的监控工具。jmc监控数据比jvisualvm更加丰富。它们都在JDK bin目录中 首先介绍jvisualvm的使用 打开bin/jvisualvm.exe 本地的JVM进程都已经识别出来了,直接点击即可监控。 为了使jvisualvm功能更加强大&a…

jvisualvm安装Visual GC插件

给jdk自带的jvisualvm安装Visual GC插件,遇到Were sorry the java.net site has closed(我们很抱歉java.net网站已经关闭) 1、找到新的更新地址 visualvm新访问地址:https://visualvm.github.io/index.html 进入“Plugins”&am…