tree.DecisionTreeClassifier()函数
class 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, ccp_alpha=0.0)`
源码
criterion
- 特征选择标准,【entropy, gini】。
- 默认gini,即CART算法。
splitter
-
特征划分标准,【best, random】。
-
best在特征的所有划分点中找出最优的划分点,random随机的在部分划分点中找局部最优的划分点。
-
默认的‘best’适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐‘random’。
max_depth
- 决策树最大深度。默认值是‘None’。(int, None)
- 一般数据比较少或者特征少的时候可以不用管这个值,如果模型样本数量多,特征也多时,推荐限制这个最大深度,具体取值取决于数据的分布。常用的可以取值10-100之间,常用来解决过拟合。
min_samples_split
- 内部节点再划分所需最小样本数。默认值为2。(int, float)
- 如果是int,则取传入值本身作为最小样本数;如果是float,则取ceil(min_samples_split*样本数量)作为最小样本数。(向上取整)
min_samples_leaf
- 叶子节点最少样本数。
- 如果是int,则取传入值本身作为最小样本数;如果是float,则取ceil(min_samples_leaf*样本数量)的值作为最小样本数。这个值限制了叶子节点最少的样本数,如果某叶子节点数目小于样本数,则会和兄弟节点一起被剪枝。
min_weight_fraction_leaf
- 叶子节点最小的样本权重和。默认为0。(float)
- 这个值限制了叶子节点所有样本权重和的最小值,如果小于这个值,则会和兄弟节点一起被剪枝。
- 默认是0,就是不考虑权重问题,所有样本的权重相同。一般来说如果我们有较多样本有缺失值或者分类树样本的分布类别偏差很大,就会引入样本权重,这时就要注意此值
max_features
- 在划分数据集时考虑的最多的特征值数量。
- int值,在每次split时最大特征数;float值表示百分数,即(max_features*n_features);|random_state |特征选择标准,【entropy, gini】。默认gini,即CART算法。
max_leaf_nodes
- 最大叶子节点数。默认为None。(int, None)
- 通过设置最大叶子节点数,可以防止过拟合,默认情况下是不设置最大叶子节点数。
- 如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征多,可以加限制,具体的值可以通过交叉验证得到
min_impurity_decrease
- 节点划分最小不纯度。默认值为‘0’。(float,)
- 限制决策树的增长,如果某节点的不纯度(基尼系数,信息增益,均方差,绝对差)小与这个阈值,则该节点不再生成子节点。
min_impurity_split
- 信息增益的阀值。决策树在创建分支时,信息增益必须大于这个阀值,否则不分裂。
class_weight
- 类别权重。默认为None,(dict, list of dicts, balanced)
- 指定样本各类别的权重,主要是为了防止训练集某些类别的样本过多,导致训练的决策树过于偏向这些类别。balanced,算法自己计算权重,样本量少的类别所对应的样本权重会更高。如果样本类别分布没有明显的偏倚,则可以不管这个参数。不适用于回归树,sklearn.tree.DecisionTreeRegressor.
模型调参注意事项:
1、当样本少数量但是样本特征非常多的时候,决策树很容易过拟合,一般来说,样本数比特征数多一些会比较容易建立健壮的模型
2、如果样本数量少但是样本特征非常多,在拟合决策树模型前,推荐先做维度规约,比如主成分分析(PCA),特征选择(Losso)或者独立成分分析(ICA)。这样特征的维度会大大减小。再来拟合决策树模型效果会好。
3、推荐多用决策树的可视化,同时先限制决策树的深度(比如最多3层),这样可以先观察下生成的决策树里数据的初步拟合情况,然后再决定是否要增加深度。
4、在训练模型先,注意观察样本的类别情况(主要指分类树),如果类别分布非常不均匀,就要考虑用class_weight来限制模型过于偏向样本多的类别。
5、决策树的数组使用的是numpy的float32类型,如果训练数据不是这样的格式,算法会先做copy再运行。
6、如果输入的样本矩阵是稀疏的,推荐在拟合前调用csc_matrix稀疏化,在预测前调用csr_matrix稀疏化。
其他:
如果使用默认DecisionTreeClassifier的参数,得到的AUC较低,很可能是因为出现过拟合,需调整默认参数,避免过拟合。