sklearn.tree.DecisionTreeClassifier (criterion=’gini’, splitter=’best’, max_depth=None,
min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None,
random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None,
class_weight=None, presort=False)
criterion:
为了要将表格转化为一棵树,决策树需要找出最佳节点和最佳的分枝方法,对分类树来说,衡量这个“最佳”的指标叫做“不纯度”。通常来说,不纯度越低,决策树对训练集的拟合越好。Criterion这个参数正是用来决定不纯度的计算方法的。sklearn提供了两种选择:
1)输入”entropy“,使用信息熵(Entropy)
2)输入”gini“,使用基尼系数(Gini Impurity)
两种算法
其中t代表给定的节点,i代表标签的任意分类,p(i|t)代表标签分类i在节点t上所占的比例。注意,当使用信息熵时,sklearn实际计算的是基于信息熵的信息增益(Information Gain),即父节点的信息熵和子节点的信息熵之差。
random_state:
相当于随机数种子任意带有随机性的类或函数里作为参数来控制随机模式,随机数给定了,得分也就固定了
splitter:
‘best’:优先选择更重要的特征进行分支(使用feature_importances_进行查看)
‘random’: 分枝时随机性更大,深度更能更大,信息处理更多会降低训练集拟合。
对于剪枝方面的参数:
Code | Text |
---|---|
max_depth=None | 限制树的最大深度,超过设定深度的树枝全部剪掉 |
min_samples_leaf | 一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,否则分枝就不会发生,或者,分枝会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生(分枝后) |
min_samples_split | 一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分枝,否则分枝就不会发生。(分枝前) |
max_features | max_features限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。 |
min_impurity_decrease | 限制信息增益的大小,信息增益小于设定数值的分枝不会发生 |
创建决策树主要代码
clf = tree.DecisionTreeClassifier(criterion="entropy",random_state=30)
clf = clf.fit(Xtrain, Ytrain)
score = clf.score(Xtest, Ytest) #返回预测的准确度
Code | Text |
---|---|
fit(self, X, y, sample_weight=None, check_input=True, X_idx_sorted=None) | 根据给定的训练集构建决策树分类器,就是求得训练集X的均值,方差,最大值,最小值这些训练集X固有的属性。可以理解为一个训练过程 |
predict(self, X, check_input=True) | predict返回每个测试样本的分类/回归结果 |
score(self, X, y, sample_weight=None) | 根据给定的数据和标签计算模型精度的平均值 |
apply(self, X, check_input=True) | apply返回每个测试样本所在的叶子节点的索引 |
后三个主要是对训练后的模型进行一个查看。
整理过程中可能有些不足或者有误,欢迎大家指正或者补充