摘要

机器学习算法是数据挖掘、数据能力分析和数学建模必不可少的一部分,而随机森林算法和决策树算法是其中较为常用的两种算法,本文将会对随机森林算法的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的实现,并计算了结果矩阵、评估矩阵和准确率,可支持对模型的准确性、适用性、敏感性和稳定性进行分析。并通过对特征重要性和随机森林算法实现过程的可视化,很好地完成了一趟完整的随机森林算法的演示。

五、 备注

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

保姆级随机森林算法Python教学相关推荐

  1. 随机森林算法Matlab实现

    随机森林算法Matlab实现 瞎BB 代码 计算当前自身gini系数 求最优划分点及其gini系数 对data中按decision属性值从小到大排列 生成结点 生成随机采样样本数据 生成决策树 评价函 ...

  2. python 随机森林调参_Python机器学习实践:随机森林算法训练及调参-附代码

    原标题:Python机器学习实践:随机森林算法训练及调参-附代码 文章发布于公号[数智物语] (ID:decision_engine),关注公号不错过每一篇干货. 来源 | 博客园 作者 | 战争热诚 ...

  3. matlab 随机森林算法_(六)如何利用Python从头开始实现随机森林算法

    博客地址:https://blog.csdn.net/CoderPai/article/details/96499505 点击阅读原文,更好的阅读体验 CoderPai 是一个专注于人工智能在量化交易 ...

  4. gbdt 算法比随机森林容易_用Python实现随机森林算法

    CDA数据分析师 出品 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.bagging(bootstrap aggregating 的缩写)算法从训练数据 ...

  5. Python+sklearn随机森林算法使用入门

    随机森林是一种集成学习方法,基本思想是把几棵不同参数的决策树(参考:Python+sklearn决策树算法使用入门)打包到一起,每棵决策树单独进行预测,然后计算所有决策树预测结果的平均值(适用于回归分 ...

  6. python随机森林库_随机森林算法入门(python)

    目录 1 什么是随机森林 1.1 集成学习 1.2 随机决策树 1.3 随机森林 1.4 投票 2 为什么要用它 3 使用方法 3.1 变量选择 3.2 分类 3.3 回归 4 一个简单的Python ...

  7. 随机森林python实例_用Python实现随机森林算法的示例

    这篇文章主要介绍了用Python实现随机森林算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考. 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.b ...

  8. Python数据挖掘项目:构建随机森林算法模型预测分析泰坦尼克号幸存者数据

    作者CSDN:进击的西西弗斯 本文链接:https://blog.csdn.net/qq_42216093/article/details/120196972 版权声明:本文为作者原创文章,未经作者同 ...

  9. 随机森林算法及贝叶斯优化调参Python实践

    1. 随机森林算法 1.1. 集成模型简介 集成学习模型使用一系列弱学习器(也称为基础模型或基模型)进行学习,并将各个弱学习器的结果进行整合,从而获得比单个学习器更好的学习效果. 集成学习模型的常见算 ...

最新文章

  1. 弹性网络_理论物理所建立解析模型研究凝胶网络弹性介导的液液相分离现象
  2. 美团面试题:String s = new String(111)会创建几个对象?
  3. Google Ajax Search 参考
  4. 大型分布式网站架构设计与实践 笔记
  5. windows下挂载ext4_WSL2 支持挂载物理磁盘,Windows 可直接访问 ext4
  6. 关于启动 SecureCRT 遇到一个致命的错误且必须关闭
  7. PSPNet网络要点
  8. PHP ICO/STO Token销售管理面板/ICO管理程序开心版
  9. 7-5 考试座位号 (15 分)
  10. 国家市场监管总局:低价倾销、大数据杀熟等价格违法行为将被罚
  11. SQLi LABS Less-4 联合注入+报错注入
  12. 清空StringBuilder的三种方法及效率
  13. 如何理解js中的this
  14. 用计算机算出女儿身高,孩子身高预测计算器准吗
  15. 荣耀畅玩7c能用鸿蒙吗,荣耀畅玩7C评测:人脸识别双摄 超高性价比
  16. WinDbg调试的前因后果
  17. 线性代数之 向量空间几何学(1)仿射
  18. XP 系统开机自动登录
  19. VS Code,PyCharm与GitHub同步
  20. TAQ服务器npc多久自动交物资,魔兽怀旧服: 安其拉开门NPC自动交物资竟是忽悠玩家? GM聊天曝出...

热门文章

  1. 理解大数据解决方案的架构层
  2. 实现前台表格中相同数据单元格的合并
  3. python实现贝叶斯回归_贝叶斯线性回归(Bayesian Linear Regression)
  4. 朴素贝叶斯Naive Bayesian分类器 (NBC)
  5. 阿里巴巴 Excel工具easyExcel 导出 - 动态列扩展。
  6. Cicso 几款IP电话自爆有命令注入高危漏洞
  7. 幼儿园计算机配置标准,幼儿园教室需要那些配置?
  8. 阿米巴经营模式的核心是什么?一篇文章看懂!
  9. 一个无标记点面捕头盔,如何实现高精度面部表情捕捉?
  10. 实时面部动作捕捉技术:Faceware Live