该参数表示分裂所要求的最少样本,默认值为 2,如果数量少于该值就不再分叉了,观察图 1 末尾的几节点,可以发现存在样本量为 3 时还在继续分裂,这时候生成的模型也容易过拟合,如果我们设置 min_samples_split = 30,就会生成下面的决策树:
图 4:限制 `min_samples_split = 30` 生成的决策树
可以发现决策树是简洁了一点点。
另外该参数也支持浮点型,表示所占总样本量的百分比,如果样本量除以总样本量低于这个值,便不再分裂。比方说我们令 min_samples_split = 0.2(\(150*0.2=30\)),会生成和图 4 一样的树。
该参数表示每个决策树的叶子节点上面的样本数量,少于设置值就会被剪掉(当然包括兄弟结点)。该参数同样也支持浮点型,意义同参数 min_samples_split,注意与 min_samples_split 的区别,如果设置了 min_samples_leaf 值,表示生成树中没有样本量低于该值的叶子节点,而 min_samples_split 值表示低于该值便不再分裂。
min_weight_fraction_leaf该值限制了叶子节点样本量占所有样本百分比(权重)的最小值,如果小于这个值,则会和兄弟节点一起剪掉,其和 min_samples_leaf 的百分比形式等价。 默认值是 0,就是不考虑权重问题。一般来说,如果我们有较多样本有缺失值,或者分类树样本的分布类别偏差很大,就会引入样本权重,这时我们就要注意这个值了。
max_features该值确定参与分裂的特征数,默认值是 None,即全部特征都参与。其详细取值如下:
如果是整型 int,就作为所选取的特征数目:max_features
如果是 float 类型,选取特征数目由所有特征乘以这个小数决定:n_features*max_features
如果是 \'auto\',则特征数目为:sqrt(n_features)
如果是 \'sqrt\', 则特征数目也为:sqrt(n_features)
如果是 \'log2\',则特征数目为:\(log_2\)(n_features)
如果是 \'None\', 则特征数目为:n_features
random_state这个也很好理解,如果是 int,那么 random_state 是随机数字发生器的种子。如果是 RandomState,那么 random_state 就是随机数字发生器。如果是默认的 None,则表示随机数字发生器是 np.random 使用的 RandomState instance.
max_leaf_nodes该值限制了生成树的叶子结点树,默认是 None,表示没有限制。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。如果特征不多,可以不考虑这个值,但是如果特征多的话,可以加以限制,具体的值可以通过交叉验证得到。比如我们限制其值为 2,那么就会生成如下的决策树:
图 5:限制 `max_leaf_nodes = 2` 生成的决策树
再强调一句,决策树没有奇数的叶子节点,如果你设置 max_leaf_nodes = 3 ,那么就会生成具有 4 个叶子节点的决策树。
min_impurity_decrease最小不纯度值减少的量,默认是 0.,一个节点只有在分裂后其不纯度值减少的量大于该值时才会被分裂。
最小不纯度值,默认是 None. 一个节点只有其不纯度值大于该值时才会被分裂。
指定样本各类别的的权重,主要是为了防止训练集某些类别的样本过多导致训练的决策树过于偏向这些类别。默认值是 None,这里可以自己指定各个样本的权重如果使用 \'balanced\',则算法会自己计算权重,样本量少的类别所对应的样本权重会高。 也可以自己定义权重,使用字典类型,详细看官网。 ,
presort该值表示对样本是否进行预排序,默认是 False,即不排序。一般来说,如果样本量少或者限制了一个深度很小的决策树,设置为 True 可以让划分点选择更加快,决策树建立的更加快。如果样本量太大的话,反而没有什么好处。
属性拟合数据后得到的模型有一些属性,可以查看相关信息。
形状为 [n_classes,] 的数组或者列表,表示预测的类。对 iris 数据集,因为共有三类,所以输出 [0, 1, 2].
feature_importances_形状为 [n_classes,] 的数组或者列表,表示特征的重要度。值越大表示越重要,由于其生成树过程中有一定的随机性,所以每次运行该值并不唯一,如果固定了 random_state,那就确定了,其它参数默认,运行会发现,最后一个特征,即花瓣宽度最重要。