机器学习笔记1——分类树DecisionTreeClassifier

DecisionTreeClassifier与红酒数据集

1.重要参数

criterion

Criterion这个参数正是用来决定不纯度的计算方法的。sklearn提供了两种选择:
1)输入”entropy“,使用信息熵(Entropy)
2)输入”gini“,使用基尼系数(Gini Impurity)
不填默认基尼系数,填写entropy使用信息增益通常就使用基尼系数,数据维度很大,噪音很大时使用基尼系数。维度低,数据比较清晰的时候,信息熵和基尼系数没区别。当决策树的拟合程度不够的时候,使用信息熵

random_state & splitter

random_state用来设置分枝中的随机模式的参数,默认None,在高维度时随机性会表现更明显,低维度的数据随机性几乎不会显现。输入任意整数,会一直长出同一棵树,让模型稳定下来。

splitter是用来控制决策树中的随机选项的,有两种输入值。
输入”best",会优先选择更重要的特征进行分枝。
输入“random",树会因为含有更多的不必要信息而更深更大,并因这些不必要信息而降低对训练集的拟合。可防止过拟合。

max_depth

限制树的最大深度,超过设定深度的树枝全部剪掉。这是用得最广泛的剪枝参数,在高维度低样本量时非常有效。建议从max_depth = 3开始尝试,看看拟合的效果再决定是否增加设定深度,可以有效限制过拟合。

min_samples_leaf & min_samples_split

min_samples_leaf 限制一个子节点的分支至少包含多少个样本。
建议从min_samples_leaf = 5 开始检测拟合度进行调参。

max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃,在不知道决策树中的各个特征的重要性时,可能会导致模型学习不足。

min_impurity_decrease

min_impurity_decrease限制信息增益的大小,信息增益小于设定数值的分枝不会发生

2.进行红酒数据集的训练

作出回归树

from sklearn import tree  # 导入树
from sklearn.datasets import load_wine  # 生成数据集的模块
from sklearn.model_selection import train_test_split  # 训练集测试集分类
import pandas as pd
import matplotlib.pyplot as plt
import graphviz  # 用于画出决策树

# 实例化数据
wine = load_wine()

# 使用pandas转化为表的形式
table = pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
# print(table)

# print(wine.feature_names)  #特征名称
# print(wine.target_names)   #标签名

# 测试集与训练集的分类
# wine.data 数据集
# wine.target 标签集
# test_size=0.3表示30%作为测试集,70%作为训练集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3)
# print(Xtrain.shape) #查看数据结构

# 实例化分类树
clf = tree.DecisionTreeClassifier(criterion = "entropy"
                                    ,random_state = 30
                                    ,splitter = "random"
                                    #,max_depth =
                                    ,min_samples_leaf = 5
                                    ,min_samples_split = 5
    )
clf = clf.fit(Xtrain, Ytrain) # 将数据带入训练,fit()是用于训练的接口

score = clf.score(Xtest, Ytest) # 返回预测的准确度
print("测试集的准确度:",score)
# apply返回每个测试样本所在的叶子节点的索引
print(clf.apply(Xtest))
# predict返回每个测试样本的分类/回归结果
print(clf.predict(Xtest))



# feature_name 特征名
# class_name 标签名
# filled 是否使用颜色,不纯度越高颜色越浅
# rounded 是否使用圆角边框
feature_name = ['酒精','苹果酸','灰','灰的碱性','镁','总酚','类黄酮','非黄烷类酚类','花青素','颜色强度','色调','od280/od315稀释葡萄酒','脯氨酸']

dot_data = tree.export_graphviz(clf
        ,out_file = None
        ,feature_names= feature_name
        ,class_names=["琴酒","雪莉","贝尔摩德"]
        ,filled=True
        ,rounded=True
)

# 画出决策树
graph = graphviz.Source(dot_data.replace('helvetica','"Microsoft YaHei"'), encoding='utf-8')
graph.render('wine')

# 将特征名称与特征的重要性做表查看
print([*zip(feature_name,clf.feature_importances_)])

分类树展示

机器学习笔记1——分类树DecisionTreeClassifier_第1张图片

3.超参数的学习曲线

超参数的学习曲线,是一条以超参数的取值为横坐标,模型的度量指标为纵坐标的曲线,它是用来衡量不同超参数取值下模型的表现的线。在我们建好的决策树里,我们的模型度量指标就是score。

from sklearn import tree  # 导入树
from sklearn.datasets import load_wine  # 生成数据集的模块
from sklearn.model_selection import train_test_split  # 训练集测试集分类
import pandas as pd
import matplotlib.pyplot as plt
import graphviz  # 用于画出决策树

# 实例化数据
wine = load_wine()

# 使用pandas转化为表的形式
table = pd.concat([pd.DataFrame(wine.data),pd.DataFrame(wine.target)],axis=1)
# print(table)


# 测试集与训练集的分类
# wine.data 数据集
# wine.target 标签集
# test_size=0.3表示30%作为测试集,70%作为训练集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3)
# print(Xtrain.shape) #查看数据结构

# 绘制调参曲线
test = [] # 用于存储每次参数设置的score结果
for i in range(10):
    clf = tree.DecisionTreeClassifier(criterion = "entropy"
                                         ,random_state = 30
                                         ,splitter = "random"
                                         ,max_depth = i+1
                                         ,min_samples_leaf = 5
                                         ,min_samples_split = 5
     )
    clf = clf.fit(Xtrain, Ytrain)
    score = clf.score(Xtest, Ytest)
    test.append(score)
plt.plot(range(1,11),test,color="red",label="max_depth")
plt.legend()
plt.show()

超参数学习曲线展示

由于划分训练集和测试集时的随机性,所以每次运行得出的分类树与超参数学习曲线都会有所不同
机器学习笔记1——分类树DecisionTreeClassifier_第2张图片

你可能感兴趣的:(决策树,python,机器学习,深度学习,人工智能)