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

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)}")

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

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

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

pip install scikit-learn --upgrade

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章