1、scikit-learn决策树算法类库介绍
scikit-learn决策树算法类库内部实现是使用了调优过的CART树算法,既可以做分类,又可以做回归。分类决策树的类对应的是DecisionTreeClassifier,而回归决策树的类对应的是DecisionTreeRegressor。两者的参数定义几乎完全相同,但是意义不全相同。下面就对DecisionTreeClassifier和DecisionTreeRegressor的重要参数做一个总结,重点比较两者参数使用的不同点和调参的注意点。
2、DecisionTreeClassifier和DecisionTreeClassifier 重要参数调参注意点
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_split=1e-07,class_weight=None,presort=False)
2.1 特征选择标准criterion
DecisionTreeClassifier:可以使用"gini"或者"entropy",前者代表基尼系数,后者代表信息增益。默认的基尼系数"gini"是CART算法。若用ID3, C4.5的"entropy"最优特征选择方法。
DecisionTreeRegressor:可以使用"mse"或者"mae",前者是均方差,后者是和均值之差的绝对值之和。推荐使用默认的"mse"。一般来说"mse"比"mae"更加精确。
2.2 特征划分点选择标准splitter
可以使用"best"或者"random"。前者在特征的所有划分点中找出最优的划分点。后者是随机的在部分划分点中找局部最优的划分点。
默认的"best"适合样本量不大的时候,而如果样本数据量非常大,此时决策树构建推荐"random"
2.3 划分时考虑的最大特征数max_features
可以使用很多种类型的值,默认是"None",意味着划分时考虑所有的特征数;
如果是"log2"意味着划分时最多考虑log2N个特征;
如果是"sqrt"或者"auto"意味着划分时最多考虑sqrt(N)个特征。
如果是整数,代表考虑的特征绝对数。
如果是浮点数,代表考虑特征百分比,即考虑(百分比xN)取整后的特征数。其中N为样本总特征数。
一般来说,如果样本特征数不多,比如小于50,我们用默认的"None"就可以了,如果特征数非常多,我们可以灵活使用刚才描述的