决策树
分类
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(random_state=0)
iris = load_iris()
cross_val_score(clf, iris.data, iris.target, cv=10)
array([ 1. , 0.93333333, 1. , 0.93333333, 0.93333333,
0.86666667, 0.93333333, 1. , 1. , 1. ])
可视化
参考博客:https://www.cnblogs.com/pinard/p/6056319.html
from sklearn.datasets import load_iris
from sklearn import tree
iris = load_iris()
clf = tree.DecisionTreeClassifier()
clf = clf.fit(iris.data, iris.target)
with open("iris.dot", 'w') as f:
f = tree.export_graphviz(clf, out_file=f)
import pydotplus
from IPython.display import Image
dot_data = tree.export_graphviz(clf, out_file=None,
feature_names=iris.feature_names,
class_names=iris.target_names,
filled=True, rounded=True,
special_characters=True)
graph = pydotplus.graph_from_dot_data(dot_data)
Image(graph.create_png())
clf.predict(iris.data[:1, :])
array([0])
clf.predict_proba(iris.data[:1, :])
array([[ 1., 0., 0.]])
回归
from sklearn import tree
X = [[0, 0], [2, 2]]
y = [0.5, 2.5]
clf = tree.DecisionTreeRegressor()
clf = clf.fit(X, y)
clf.predict([[1, 1]])
array([ 0.5])
实际使用技巧
- 对于拥有大量特征的数据决策树会出现过拟合的现象。获得一个合适的样本比例和特征数量十分重要,因为在高维空间中只有少量的样本的树是十分容易过拟合的。
- 考虑事先进行降维( PCA , ICA ,使您的树更好地找到具有分辨性的特征。
- 通过
export
功能可以可视化您的决策树。使用max_depth
=3 作为初始树深度,让决策树知道如何适应您的数据,然后再增加树的深度。 - 请记住,填充树的样本数量会增加树的每个附加级别。使用
max_depth
来控制输的大小防止过拟合. - 通过使用
min_samples_split
和min_samples_leaf
来控制叶节点上的样本数量。当这个值很小时意味着生成的决策树将会过拟合,然而当这个值很大时将会不利于决策树的对样本的学习。所以尝试min_samples_leaf
=5 作为初始值。如果样本的变化量很大,可以使用浮点数作为这两个参数中的百分比。两者之间的主要区别在于min_samples_leaf
保证叶结点中最少的采样数,而min_samples_split
可以创建任意小的叶子,尽管在文献中min_samples_split
更常见。 - 在训练之前平衡您的数据集,以防止决策树偏向于主导类.可以通过从每个类中抽取相等数量的样本来进行类平衡,或者优选地通过将每个类的样本权重 (
sample_weight
) 的和归一化为相同的值。还要注意的是,基于权重的预修剪标准 (min_weight_fraction_leaf
) 对于显性类别的偏倚偏小,而不是不了解样本权重的标准,如min_samples_leaf
.