首先,我们要知道决策树有哪些参数
criterion: Any = "gini"
splitter: Any ="best"
max_depth: Any = None.
min_samples_split: Any = 2
min_samples_leaf: Any = 1
min_weight_fraction_leaf: Any = 0.
max_features: Any = None.
random_state: Any = None.
max_leaf_nodes: Any = None,
min_impurity_decrease: Any = 0.
class_weight: Any = None
这是DecisionTreeClassifier里的参数,下面我给你们一一介绍
①criterion,他默认是基尼系数,gini指的是表示样本被分错的概率,gini参数越小,表示集合越集中,这里还可以是entropy,也就是信息熵,信息熵表示与相关性程度,熵越高,偏离的就越多,也就是离散程度大,相关性差,相反,熵越低,也就与越其接近,相关性搞,我们这里选用的是基尼系数。
②splitter,默认是best,也可以设置为best,best参数是根据算法选择最佳的切分特征,如果我们样本的数据量特别大的时候,就用random。
③max_depth,他决定了最大深度,指的是树的层数,默认值是None,所以我们看最后的代码将max_depth的值修改了以后,所生成的图像的层数是不一样的。
④min_samples_split, 内部节点再划分所需最小样本数,可选参数,默认是2,这个值限制了子树继续划分的条件,他表示的是最小的样本数,如果样本数小于min_samples_split,则会停止划分;如果这个参数我们输入的是一个浮点数的话,采取向上取整的原则。理论上这个值一般不用变动,只有当样本特别大的时候,建议向上调整这个值。(感觉这个参数和max_depth差不多,都是用来划分树的长度啥的)。
⑤min_samples_leaf,这个参数与上面的参数很相似,上面的那个参数是针对于节点而言的,而这个是针对于节点后的子节点,停止划分的规则应该是一样的。
⑥min_weight_fraction_leaf,叶子节点最小的样本权重和,参数默认是0。如果小于这个值,则会和兄弟节点一起被剪枝。因此,一般当有很大偏差时,会引入这个参数,减小偏差。(防止有大的偏差用的)。
⑦max_features,子集特征的个数,这个值越小,森林里的树就越不一样,默认是用sqrt来取值,auto,log2均可取值,sqrt和auto是取其开方数,而log2是取对数。
⑧random_state,他的默认值也是None,若是使用None则是使用随机数生成器,但一般是建议设置一个整数进去(没有设置随机数,则随机出来的数随时间而变化,而设置了随机数,随机出来的数不随时间的变化而变化。)
⑨max_leaf_nodes, 最大叶子节点数,参数默认是None。通过限制最大叶子节点数,可以防止过拟合。如果加了限制,算法会建立在最大叶子节点数内最优的决策树。特征少,不用管,特征多,用这个,通过交叉验证得到(我也不知道交叉验证是啥,可能是一种高深的计算吧)。
⑩min_impurity_decrease,节点划分最小不纯度,参数默认是1e-7。这个值限制了决策树的增长,如果某节点的不纯度(基尼系数,信息熵)小于这个值,则该节点不再生成子节点,即为叶子节点。(应该可以理解为criterion的下限)。
⑪class_weight,类别权重,参数默认是None,也可以字典、字典列表、balanced。主要是为了防止训练集某些类别的样本过多,导致训练的决策树过于偏向这些类别。类别的权重可以通过{class_label:weight}这样的格式给出,这里可以自己指定各个样本的权重,或者用balanced,使用balanced算法会自己计算权重,样本量少的类别所对应的样本权重会高。当然,如果样本类别分布没有明显的偏倚,直接不用管这个参数。(样本过多才用,过少直接不管)。
这便是决策树里面的参数,希望大家可以收获满满!