首页 - 设备 - 基于Python实现随机森林算法

基于Python实现随机森林算法

2023-10-04 10:30

总结

机器学习算法是数据挖掘、数据能力分析和数学建模中不可或缺的一部分,随机森林算法和决策树算法是其中比较常用的两种算法。本文将讨论Python用于保姆级教学的随机森林算法的实现。

0 简介

在数据挖掘、数学建模等竞赛中,除了算法的实现之外,还需要对数据进行更合理的预处理,包括缺失值处理、异常值处理、特征值的特征编码等。本文默认读者数据。完成数据预处理。如果有需要,数据预处理方法稍后会发布。

1。材料准备

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

训练数据集:以2022年数字杯国际大学生数学建模竞赛C题所附数据为例。

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

2。算法原理

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

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

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

图1 随机森林分类流程图

3。算法Python实现

3.1 数据加载

将 pandas 导入为 pd
# 下载数据
X = PD.DataFrame(www.gsm-guard.netad_excel('datax.xlsx'))。 Values#输入特征
y = pd.DataFrame(www.gsm-guard.net_excel('DataY.xlsx')).values# 目标变量 

这里,自变量存储在DataX中,因变量存储在DataY中。如果需要进行样本预测,可以单独保存一个文件(格式与DataX一致),稍后替换到predict中。

3.2 创建随机森林分类器

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

本文设置迭代次数为100

3.3 创建ShuffleSplit对象来进行自动洗牌

从 sklearn.model_selection 导入 ShuffleSplit
#创建ShuffleSplit对象来进行自动洗牌
ss = ShuffleSplit(n_splits=1, train_size=0.7, test_size=0.3, random_state=0)

这里,70%的样本数据作为训练集,30%的样本数据作为测试集。如果用于国际比赛,可以通过调整测试训练比来分析模型的敏感性和稳定性。

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

从sklearn.metrics导入confusion_matrix,classification_report,accuracy_score
# 循环遍历每个分割并使用随机森林分类器训练和评估每个分割
对于 ss.split(X, y) 中的 train_index、test_index:
  X_train, X_test = X[train_index], X[test_index]
  y_train, y_test = y[train_index], y[test_index]
  www.gsm-guard.net(X_train, y_train)
  y_pred = clf.predict(X_test)
  print("混淆矩阵:")
  print(confusion_matrix(y_test, y_pred)) # 输出分类结果矩阵
  print("分类报告:")
  print(classification_report(y_test, y_pred)) # 输出混淆矩阵
  print("准确率:")
  打印(准确度分数(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 计算特征重要性

# 计算特征重要性
重要性 = clf.feature_importances_打印(重要性)

如何判断选中的特征是否需要再次降维?得到的特征重要性很低,意味着该指标对算法的分类不起明显作用,可以删除该特征。

3.6 可视化特征重要性

将 matplotlib.pyplot 导入为 plt
# 绘制条形图
plt.barh(范围(len(重要性)), 重要性)
 
#添加标题
plt.title("特征重要性")
feature_names = ['CDRSB_bl', 'PIB_bl', 'FBB_bl']
#添加功能名称
plt.yticks(范围(len(重要性)), feature_names)
 
# 显示图像
# www.gsm-guard.net()
plt.savefig('feature_importance.png')

可视化特征的重要性可以提高论文的识别度,这也是一个加分项,比简单地做成表格要好。

3.7 生成决策树可视化图形

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

这是随机森林算法过程的可视化。总体来说很长,图片也不好看。不需要包含在论文中,简单解释一下即可。

3.8 完整实现代码

从 sklearn.ensemble 导入 RandomForestClassifier
从sklearn.metrics导入confusion_matrix,classification_report,accuracy_score
从 sklearn.model_selection 导入 ShuffleSplit
将 pandas 导入为 pd
从sklearn.tree导入export_graphviz
导入图形可视化
将 matplotlib.pyplot 导入为 plt
 
# 下载数据
X = pd.DataFrame(www.gsm-guard.net_excel('DataX.xlsx')).values # 输入特征
y = pd.DataFrame(www.gsm-guard.net_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)
# 循环遍历每个分割并使用随机森林分类器训练和评估每个分割
对于 ss.split(X, y) 中的 train_index、test_index:
  X_train, X_test = X[train_index], X[test_index]
  y_train, y_test = y[train_index], y[test_index]
  www.gsm-guard.net(X_train, y_train)
  y_pred = clf.predict(X_test)
  print("混淆矩阵:")print(confusion_matrix(y_test, y_pred)) # 输出分类结果矩阵
  print("分类报告:")
  print(classification_report(y_test, y_pred)) # 输出混淆矩阵
  print("准确率:")
  打印(准确度分数(y_test,y_pred))
  print(clf.predict(X_train)) # 这用于预测。预测数据可以从与 DataX 格式相同的另一个文件导入
  打印(clf.score(X_test,y_test))
 
importances = clf.feature_importances_ # 计算特征重要性
打印(重要性)
# 绘制条形图
plt.barh(范围(len(重要性)), 重要性)
 
#添加标题
plt.title("特征重要性")
feature_names = ['CDRSB_bl', 'PIB_bl', 'FBB_bl']
#添加功能名称
plt.yticks(范围(len(重要性)), feature_names)
 
# 显示图像
# www.gsm-guard.net()
plt.savefig('feature_importance.png')
# 使用export_graphviz函数将决策树保存为点文件
dot_data = export_graphviz(clf.estimators_[0], out_file=None,
              feature_names=['CDRSB_bl', 'PIB_bl',
                     'FBB_bl'])
 
# 使用graphviz库读取dot文件并生成决策树可视化图形
图 = graphviz.Source(dot_data)
graph.render('decision_tree')

4。结论

使用Python实现了随机森林,并计算了结果矩阵、评价矩阵和准确率,可以支持模型的准确率、适用性、灵敏度和稳定性分析。

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

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

审稿编辑:唐子红

-->