当前位置:   article > 正文

使用scikit-learn对csv数据文件构建随机森林并可视化_csv 随机森林5分类

csv 随机森林5分类
1、对数据进行处理并训练评估模型
from sklearn.model_selection import train_test_split, cross_val_score, KFold, GridSearchCV
import pandas as pd
import numpy as np

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import StandardScaler
from sklearn.tree import export_graphviz

path = "你自己的csv.csv"  # 5分类的
data = pd.read_csv(path)

# 打乱数据集
from sklearn import utils
data = utils.shuffle(data)

Y = data["score"].values
X = data.drop("score", axis=1).values
print(f"X=\n{X}")
print(f"\nY=\n{Y}")

# 数据标准化
scaler = StandardScaler()       # 实例化
scaler.fit(X)                   # 训练标准化对象
X = scaler.transform(X)         # 转换数据集

# 拆分训练集和测试集
train_X, test_X, train_Y, test_Y = train_test_split(X, Y, test_size=0.3, random_state=0)

# 实例化分类器(默认生成100颗树,信息熵,叶子结点最少样本量为3,最大深度为15)
clf = RandomForestClassifier(n_estimators=2, criterion="entropy", min_samples_leaf=3, max_depth=15)

# 训练
clf.fit(train_X, train_Y)
# 预测并评估
predict_Y = clf.predict(test_X)

print(f"准确率acc = {accuracy_score(y_pred=predict_Y, y_true=test_Y)}")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

2、下面绘制随机森林

需要一些准备和解释:
1、需要下载安装Graphviz,代码中还要指出安装的bin目录位置
参考(都要看):
https://blog.csdn.net/Candy_GL/article/details/79684947

https://blog.csdn.net/qq_40304090/article/details/88594813

2、注意绘制的森林并不是在一张图像上的,而是需要一棵树一棵树的绘制

## 绘制随机森林
# 加入Graphviz的环境路径
import os
os.environ["PATH"] += os.pathsep + "G:/24_graphviz_msi/bin"
# 提取随机森林中单个树
# estimator = clf.estimators_[5]  # 提取第5颗树
# 遍历提取所有树,分别绘制
for i_tree in range(len(clf.estimators_)):
    # 绘图并导出
    dot_data = export_graphviz(clf.estimators_[i_tree], out_file=None,
                               feature_names=(list(data.drop("score", axis=1).columns)))  # 第1个参数Decision_tree是dtc或clf都可以
    import pydotplus
    graph = pydotplus.graph_from_dot_data(dot_data)
    graph.get_nodes()[7].set_fillcolor("#FFF2DD")
    if os.path.exists(f"{i_tree}_out.png"):
       pass
    else:
        graph.write_png(f"{i_tree}_out.png")  # 当前文件夹生成out.png
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

3、还有一些其他的打印路径的方法,如sklearn官方提供的export_text,以及一些用户自己写的方法,请点击 另一篇文章

如果你使用export_text遇到报错sklearn.tree export_textc error,请直接更新scikit-learn

pip install scikit-learn --upgrade
  • 1

参考:
《如何用Scikit-learn可视化随机森林中的一棵树》
《如何能将sklearn里随机森林分类树的结构给画出来?》

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/285485
推荐阅读
相关标签
  

闽ICP备14008679号