sklearn 决策树(分类树、回归树)的 重要参数、属性、方法理解

文章目录

  • 决策分类树
    • 引入
    • 重要参数
      • 1,criterion
      • 2,splitter
      • 3,max_depth
      • 4,min_samples_leaf
      • 5,min_samples_split
      • 6,max_features
      • 7,class_weight
    • 重要属性
    • 重要方法
  • 决策回归树

决策分类树

引入

from sklearn.tree import 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_decrease=0.0,min_impurity_split=1e-07, \
                       class_weight=None, presort=False)

重要参数

1,criterion

字符串类型,默认值为 ‘gini’。这个参数指定划分子树的评估标准:

  1. ‘entropy’,使用基于信息熵的方法,即计算信息增益
  2. ‘gini’,使用基尼系数(Gini Impurity)

**推荐设置为 ‘gini’,**因为(1)基尼系数的计算过程相对简单,而计算信息增益需要进行对数运算。(2)使用信息增益作为划分标准时,在使用高纬度数据或者噪声很多的数据时容易过拟合。

2,splitter

字符串类型,默认值为’best’。这个参数用于指定切分原则:

  1. ’best’,优先选择重要特征构造分支
  2. ‘random’,构造分支的时候更随机,一定程度上减少过拟合

默认的 ‘best’ 适合样本量不大的时候,而如果样本数据量量非常大,此时决策树构建推荐‘random’。

3,max_depth

数值型,默认值None。这是与剪枝相关的参数,设置为None时,树的节点会一直分裂,直到:(1)每个叶子都是“纯”的;(2)或者叶子中包含⼩于min_sanples_split个样本。

推荐从 max_depth = 3 尝试增加,观察是否应该继续加大深度。

合适的取值可以是 [3, 5, 8, 15, 25, 30, None]

如果max_leaf_nodes参数非None,则忽略此项

4,min_samples_leaf

数值型,默认值1,指定每个叶子结点包含的最少的样本数。参数的取值除了整数之外,还可以是浮点数,此时(min_samples_leaf * n_samples)向下取整后的整数是每个节点的最小样本数。
此参数设置的过小会导致过拟合,反之就会欠拟合。调整过程:

  1. 从min_samples_leaf=5开始上下调整。
  2. 对于类别不多的分类问题,设置为1通常是合理的选择。
  3. 当叶节点包含样本数量差异很大时,建议设置为浮点数。

推荐的取值可以是:[1, 2, 5, 10]

5,min_samples_split

数值型,默认值2,指定每个内部节点(非叶子节点)包含的最少的样本数。与min_samples_leaf这个参数类似,可以是整数也可以是浮点数。

推荐的取值是:[1, 2, 5, 10, 15, 100]

6,max_features

可以为整数、浮点、字符或者None,默认值为None。此参数用于限制分枝时考虑的特征个数,超过限制个数的特征都会被舍弃。

  1. 如果是整数,则每次切分只考虑max_features个特征。
  2. 如果是浮点数,每次切分只考虑max_features*n_features个特征(max_features指定百分⽐)。
  3. 如果是字符串‘auto’,则max_features等于n_features。
  4. 如果是字符串‘sqrt’,则max_features等于sqrt(n_features)。
  5. 如果是字符串‘log2’,则max_features等于log2(n_features)。
  6. 如果是字符串None,则max_features等于n_features。

推荐的取值为:[‘log2’, ‘sqrt’, None]

7,class_weight

可以是列表、字典、或者字符串’balanced’,还可以是默认值None。这个参数主要是用于样本不平衡数据集,当设置为None时,所有类别样本权重都为1。也可以利用列表或者字典手动设置各个类别样本的权重,将样本较少的类别赋予更大的权重。当设置为’balanced’时,会自动根据样本出现的频率计算权重,即 n_samples / (n_classes * np.bincount(y))
推荐的设置为:[None, ‘balanced’]

重要属性

1,feature_importances_ ,给出了各个特征对模型的重要性。

2,tree_ ,一个Tree对象,即底层的决策树。

重要方法

1,fit(X,y) : 训练模型。
2,predict(X) : 用模型预测,返回预测值。
3,predict_proba(X) : 返回一个数组,数组元素依次为各个样本属于各个类别的概率值。
4,score(X, y) : 返回在(X, y)上预测的准确率(accuracy)。

决策回归树

引入方式如下:

from sklearn.tree import DecisionTreeRegressor
# 全部参数
DecisionTreeRegressor(criterion='mse', 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, \
						presort='deprecated',  ccp_alpha=0.0)

其中,参数criterion 是字符串类型,默认值为 ‘mse’,是衡量回归效果的指标。可选的还有‘friedman_mse’,‘mae’ 。

除了criterion这个参数之外,其他参数、属性、方法的含义与用法与上文提到的决策分类树的参数基本一致。

参考文章:

sklearn.tree.DecisionTreeClassifier

sklearn.tree.DecisionTreeRegressor

SKlearn中分类决策树的重要参数详解

你可能感兴趣的:(机器学习基础,决策树,机器学习,python)