0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于Python实现随机森林算法

新机器视觉 来源:CSDN博主小皇的奶黄包 2023-09-21 11:17 次阅读

摘要

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

0 绪论

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

一、材料准备

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

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

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

二、算法原理

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

随机森林是一种典型的Bagging模型,是基于多种决策树的分类智能算法。首先,在处理后的数据集中进行随机抽样,形成n种不同的样本数据集。

然后,根据数据集构建不同的决策树模型,再将测试集代入决策树中,得到分类结果,最后通过投票进行预测分类,具体的流程图如下图1所示:

70e04486-57ba-11ee-939d-92fbcf53809c.jpg

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的实现,并计算了结果矩阵、评估矩阵和准确率,可支持对模型的准确性、适用性、敏感性和稳定性进行分析。

并通过对特征重要性和随机森林算法实现过程的可视化,很好地完成了一趟完整的随机森林算法的演示。

来源:CSDN博主小皇的奶黄包

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4455

    浏览量

    90755
  • 编译器
    +关注

    关注

    1

    文章

    1577

    浏览量

    48614
  • 机器学习
    +关注

    关注

    66

    文章

    8122

    浏览量

    130561
  • python
    +关注

    关注

    51

    文章

    4675

    浏览量

    83466

原文标题:保姆级随机森林算法Python教学

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    机器学习算法随机森林算法详解及工作原理图解

    随机森林是一种灵活且易于使用的机器学习算法,即便没有超参数调优,也可以在大多数情况下得到很好的结果。它也是最常用的算法之一,因为它很简易,既可用于分类也能用于回归任务。 在这篇文章中,
    的头像 发表于 03-14 16:10 31.6w次阅读
    机器学习<b class='flag-5'>算法</b>之<b class='flag-5'>随机</b><b class='flag-5'>森林</b><b class='flag-5'>算法</b>详解及工作原理图解

    机器学习随机森林相关知识

    机器学习之随机森林(三)
    发表于 04-02 10:06

    随机森林的相关知识

    机器学习之随机森林(一)
    发表于 08-27 07:30

    ML之决策树与随机森林

    ML--决策树与随机森林
    发表于 07-08 12:31

    随机森林的跌倒检测算法

    针对现有跌倒检测算法由于缺乏真实老人跌倒样本以及使用年轻人仿真跌倒样本规模较小导致的过拟合和适应性不足等问题,提出了基于随机森林的跌倒检测算法。该
    发表于 12-29 14:50 2次下载

    面向随机森林的差分隐私保护算法

    提出一种基于随机森林的差分隐私保护算法DiffPRFs,在每一棵决策树的构建过程中采用指数机制选择分裂点和分裂属性,并根据拉普拉斯机制添加噪声。在整个算法过程中满足差分隐私保护需求,相
    发表于 02-08 17:10 3次下载

    浅谈机器学习技术中的随机森林算法

    本次主题是随机森林,杰里米(讲师)提供了一些基本信息以及使用Jupyter Notebook的提示和技巧。 Jeremy谈到的一些重要的事情是,数据科学并不等同于软件工程。 在数据科学中,我们
    的头像 发表于 09-29 15:34 1557次阅读

    一种基于数据集成的随机森林算法

    用于销售预测的历史数据存在稀疏性与波动性等特点,当预测周期较长时,传统统计学或者机器学习领域预测算法的预测效果较差。为此,利用随机森林的集成思想与训练数据集的随机分割重组,提出一种基于
    发表于 03-16 11:37 12次下载
    一种基于数据集成的<b class='flag-5'>随机</b><b class='flag-5'>森林</b><b class='flag-5'>算法</b>

    基于k近邻的完全随机森林算法KCRForest

    针对有新类的动态数据流分类算法检测新类性能不高的问题,提出一种基于k近邻的完全随机森林算法( Kcrforest)。该算法利用动态数据流中已
    发表于 04-02 10:01 17次下载
    基于k近邻的完全<b class='flag-5'>随机</b><b class='flag-5'>森林</b><b class='flag-5'>算法</b>KCRForest

    基于遗传算法随机森林的XGBoost改进方法

    回归预测是机器学习中重要的研究方向之一,有着广阔的应用领域。为了进一步提升回归预测的精度,提出了基于遗传算法随机森林的 Gboost改进方法( GA Xgboost_RF)。首先利用遗传算法
    发表于 04-26 15:44 6次下载
    基于遗传<b class='flag-5'>算法</b>和<b class='flag-5'>随机</b><b class='flag-5'>森林</b>的XGBoost改进方法

    面向差分数据挖掘隐私保护的随机森林算法

    数据挖掘中的隐私保护问题是目前信息安全领域的研究热点之一。针对隐私保护要求下的分类问题,提出一种面向差分隐私保护的随机森林算法 REDPP-Gini。将随机
    发表于 05-12 14:14 1次下载

    Python实现所有算法-基本牛顿法

    Python实现所有算法-二分法 Python实现所有算法-力系统是否静态平衡
    的头像 发表于 07-13 10:40 1340次阅读

    随机森林的概念、工作原理及用例

    随机森林是一种监督式算法,使用由众多决策树组成的一种集成学习方法,输出是对问题最佳答案的共识。随机森林可用于分类或回归。
    的头像 发表于 08-05 10:00 5923次阅读

    利用随机森林进行特征重要性评估

    随机森林是以决策树为基学习器的集成学习算法随机森林非常简单,易于实现,计算开销也很小,更令人惊
    的头像 发表于 10-10 17:14 1365次阅读

    随机森林算法及其实现

    其实从直观角度来解释,每棵决策树都是一个分类器(假设现在针对的是分类问题),那么对于一个输入样本,N棵树会有N个分类结果。而随机森林集成了所有的分类投票结果,将投票次数最多的类别指定为最终的输出,这就是一种最简单的 Bagging 思想。
    的头像 发表于 05-15 09:46 1576次阅读
    <b class='flag-5'>随机</b><b class='flag-5'>森林</b><b class='flag-5'>算法</b>及其<b class='flag-5'>实现</b>