欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sklearn学习——决策树分类

程序员文章站 2024-02-03 20:50:10
...

sklearn学习——决策树分类

1 数据集

采用红酒数据集load_wine,下载地址
共有13个特征,样本标签三个

sklearn学习——决策树分类

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运行结果图

sklearn学习——决策树分类
sklearn学习——决策树分类
sklearn学习——决策树分类

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) 官方文档中文版

相关标签: 机器学习