sklearn学习——决策树分类
程序员文章站
2024-02-03 20:50:10
...
sklearn学习——决策树分类
1 数据集
采用红酒数据集load_wine,下载地址
共有13个特征,样本标签三个
2 配置环境
在anaconda配置环境
conda install scilit-learn
conda install pandas
conda install numpy
conda install python-graphviz
conda install matplotlib
3 代码
from sklearn import tree #导入需要的模块
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
import pandas as pd
import graphviz
import matplotlib.pyplot as plt
# 读取数据
wine = load_wine()
# print(wine)#数据集
# print(wine.data)#特征数据
# print(wine.target)#标签数据
print(wine.data.shape)#特征数据的行和列
print(wine.feature_names)#特征数据的名称
print(wine.target_names)#标签数据的名称
#,矩阵形式查看
wine1=pd.concat([pd.DataFrame(wine.data), pd.DataFrame(wine.target)], axis=1)
print(wine1)
# 数据分割
train_data, test_data, train_label, test_label = \
train_test_split(wine.data, wine.target, random_state=1, test_size=0.3)
# test_size=0.3表示测试数据占比30%,random_state=1表示每次选取的数据固定
# print(train_data)#训练数据
# print(test_data)#测试数据
# print(train_label)#训练标签
# print(test_label)#测试标签
# 如何读取自己的数据
'''
# 1.读取数据集
path = '333.txt'# 填写自己的数据,注意应用逗号,txt文本,前面是特征,最后一列是标签
data = np.loadtxt(path, dtype=float, delimiter=',')#读取样本集
# 2.划分数据与标签
x, y = np.split(data, indices_or_sections=(4,), axis=1) # x为数据特征,y为标签,indices_or_sections=(4,)填列数-1
train_data, test_data, train_label, test_label = \
train_test_split(x, y, random_state=1, train_size=0.75,test_size=0.25)
'''
# 训练模型
clf = tree.DecisionTreeClassifier(criterion='entropy'#选取信息熵,也可以输入”gini“,使用基尼系数
, random_state=30 # 控制随机数
, splitter='random' # 控制随机数
, max_depth=3 # 树深度
# , min_samples_leaf=10 #分的叶子样本最小10
# , min_samples_split=10 #节点样本数最小10
# , max_features=5 #选取特征最大数目5
)
clf.fit(train_data, train_label)
# 查看决策树
# 通过命令行dot -Tpdf tree.dot -o output.pdf,dot -Tpng tree.dot -o output.png
# 将dot文件生成png或者pdf文件
with open("tree1.dot", 'w') as f:
f = tree.export_graphviz(clf,
feature_names=wine.feature_names, # 特征名称
class_names =["琴酒", "雪莉", "贝尔摩德"],# 类别名
filled=True, # 由颜色标识不纯度
rounded=True, # 树节点为圆角矩形
out_file=f
)
# 模型准确率
print('predict_result:\n', clf.predict(test_data)) #测试训练结果
print("训练集:", clf.score(train_data, train_label))#训练集的精度
print("测试集:", clf.score(test_data, test_label))#测试集的精度
# print([*zip(clf.feature_importances_)])#
print(clf.feature_importances_)#重要特征占比
# 预测值和测试值打分
score = classification_report(test_label, clf.predict(test_data))
print(score)
# 如何选取最佳深度
test = []
for i in range(10):
clf = tree.DecisionTreeClassifier(max_depth=i+1
, criterion='entropy'
, random_state=30
, splitter='random'
)
clf = clf.fit(train_data, train_label)
score = clf.score(test_data, test_label)
print(score)
test.append(score)
plt.plot(range(1, 11), test, color="red", label="max_depth")
plt.legend()
plt.show()
4运行结果图
5 决策树查看
1 决策树图需要下载graphviz,下载链接
2 下载解压到文件,添加环境变量到bin
3 在终端中进入到代码生成的tree1.dot的文件夹中
4 通过命令行dot -Tpdf tree.dot -o output.pdf或者dot -Tpng tree.dot -o output.png,
6参考资料
plt.plot()的使用方法以及参数介绍
Python决策树demo可视化
用graphviz可视化决策树
DecisionTree决策树大全
准确率、精确率、召回率、F1值、ROC/AUC整理笔记
scikit-learn中决策树分类DecisionTreeClassifier参数
scikit-learn (sklearn) 官方文档中文版