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里随机森林分类树的结构给画出来?》