Decision Tree

2020-02-15  本文已影响0人  echolvan

决策树算法最主要要解决的问题:

决策树

在sklearn中
sklearn中的决策树都在sklearn.tree中

from sklearn.tree import DecisionTreeClassifier

clf = DecisionTreeClassifier()
clf = clf.fit(X_train, y_train)
result = clf.score(X_test, y_test)

重要参数

1.criterion

衡量最佳指标叫不纯度,不纯度越低,决策树对训练数据的拟合效果越好。
不纯度有两种计算方法:

在实际使用中这两种计算方式效果差不多。

因为信息熵对不纯度更加敏 感,所以信息熵作为指标时,决策树的生长会更加“精细”,因此对于高维数据或者噪音很多的数据,信息熵很容易 过拟合。
基尼系数在这种情况下效果往往比较好。当模型拟合程度不足的时候,即当模型在训练集和测试集上都表 现不太好的时候,使用信息熵。当然,这些不是绝对的。
当然我们可以两种都试一试。

2.random_state & splitter

random_state用于设置分枝的随机模式的参数,就如随机种子一般
splitter控制决策树中的随机选项,两种输入值
'best'
决策树在分支的时候虽然是随机,但是还是会选择更加重要的特征来进行分支
'random'
决策树在分支时会更加随机,因此树就会在不必要的信息上分支生长深,并且因为这些不必要的信息反而降低了对训练集的拟合。

3.剪枝参数

我们如果不进行任何限制,决策树会生长到不纯度最优,或者用到没有特征可用,这样我们的决策树通常会过拟合。剪枝参数是对决策树过拟合解决的最好调节方法了, 可以说剪枝是决策树的核心

有了权重之后,样本量就不再是单纯地记录数目,而是受输入的权重影响了,因此这时候剪枝,就需要搭配min_ weight_fraction_leaf这个基于权重的剪枝参数来使用。另请注意,基于权重的剪枝参数(例如min_weight_ fraction_leaf)将比不知道样本权重的标准(比如min_samples_leaf)更少偏向主导类。如果样本是加权的,则使 用基于权重的预修剪标准来更容易优化树结构,这确保叶节点至少包含样本权重的总和的一小部分

如何确定最优的剪枝参数呢?

诚然我们可以画超参数的学习曲线。但是我们在实际中是没有什么条件去使用学习曲线的。如果你手中的数据集特别大,那么无论如何是需要剪枝的。

import graphviz
from sklearn import tree 
from sklearn.datasets import load_wine 
from sklearn.model_selection import train_test_split 

wine = load_wine()
wine.data.shape
wine.target
wine.target_names

# 分割测试集和训练集
Xtrain, Xtest, Ytrain, Ytest = train_test_split(wine.data,wine.target,test_size=0.3)
 
Xtrain.shape
Xtest.shape

# 建立模型
clf = tree.DecisionTreeClassifier(criterion="entropy"
,random_state=30
,splitter='best'
,max_depth=3
,min_samples_leaf=10
,min_samples_split=10
)
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) #返回预测的准确度
 
score

# 画一棵树
dot_data = tree.export_graphviz(clf
,out_file = None
,feature_names= wine.feature_names
,class_names=wine.class_names
,filled=True
,rounded=True
)
graph = graphviz.Source(dot_data)
graph

# 特征重要性
clf.feature_importances_
[*zip(feature_name,clf.feature_importances_)]

重要属性和接口

对决策树来说,最重要的是feature_importances_,能 够查看各个特征对模型的重要性。
四个接口:fit,score,apply,predict

上一篇下一篇

猜你喜欢

热点阅读