sklearn决策树算法总结

决策树算法

理论部分可以参考西瓜书,本文主要总结一下决策树算法在sklearn中的一些基本用法。

sklearn.tree

使用决策树的流程

from sklearn import tree             
clf = tree.DecisionTreeClassifier()    #实例化
clf.fit(x_train,y_train)               #训练模型
result = clf.score(x_test,y_test)      #测试

sklearn中的决策树算法都包含在tree这个模块中,使用时导入即可。

from skearn import tree

sklearn中包含了五个模块

Column 1 Column 2
tree.DecisionTreeClassifier 分类树
tree.DecisionTreeRegressor 回归树
tree.export_graphviz 将生成的树导出为DOT格式
tree.ExtraTreeClassifier 高随机版本的分类树
tree.ExtraTreeClassifier 高随机版本的回归树

1.tree.DecisionTreeClassifier

tree.DecisionTreeClassifier官网介绍
在这里插入图片描述
DecisionTreeClassifier的参数很多,其中比较重要的有以下几个:

  • criterion
  • splitter & random_state
  • max_depth
  • min_samples_split & min_samples_leaf
  • max_features & min_impurity_decrease
  • class_weight & min_weight_fraction_leaf

下边分别介绍这几个参数的用法

1.1 criterion

在构建决策树的时候,我们往往希望得到一棵最佳的树,而这个最佳的衡量指标通常指不纯度。一般来说,不纯度越低,决策树对训练数据拟合的越好。
不纯度有两种计算方法:信息熵Entropy和Gini指数
e n t r o p y ( t ) = − ∑ i = 0 n P i l n ( P i ) G i n i ( t ) = 1 − ∑ i = 0 n P i 2 entropy(t)=-\sum_{i=0}^{n}P_iln(P_i) \\ Gini(t)=1-\sum_{i=0}^{n}P_i^2 entropy(t)=i=0nPiln(Pi)Gini(t)=1i=0nPi2
criterion参数是用来决定计算不纯度的方法,可以输入‘entropy’或‘gini’,默认为Gini系数。
应该注意的是,当参数选择‘entropy’时,实际上sklearn计算的是该信息熵的信息增益,即父节点与这个节点信息熵的差值。
与Gini系数相比,信息熵对不纯度更加敏感,在高维度数据或者噪音较多的数据中,选择信息熵造成过拟合的可能性更大;在数据量较少,模型欠拟合的情况下,应该优先选择信息熵。

1.2 splitter & random_state

splitter是决策树的节点在进行分枝时选择特征的方式,有‘random’和‘best’两种方式。‘best’代表决策树的节点在分枝的时候优先选择更加重要的特征;‘random’会在选择特征的时候更加随机,树因此会因为加入了不必要的特征而变得更深更大,可以一定程度上防止过拟合现象的发生。
random_state用来设置分枝时随机模式的参数,默认为None。高维度时随机性会表现得更明显,低维度的数据随机性几乎不会出现。输入一个整数时会生成同一棵树。
这两个参数都可以调节模型的过拟合情况。

1.3 剪枝参数

  • max_depth

    限制树的最大高度,超过的节点将被全部剪掉,建议从3开始设定,根据拟合效果继续设置高度。
  • min_samples_leaf

    一个节点在分枝后每个子节点至少包含min_samples_leaf个样本,否则分枝不会发生,或者,分枝会朝着每个样本都含有min_samples_leaf个样本去分枝。一般从5开始,如果样本包含的数量变化较大,可以输入浮点数表示样本量的百分比来使用。
  • min_samples_split

    一个节点必须包含min_samples_split个样本,否则这个节点的分枝不会发生
  • max_features

    限制分枝时节点的特征个数,超过数量的特征将会被舍弃。但是在不知道模型的特征重要性的情况下,使用这种方法可能会导致模型的学习力不够。如果希望将高维的数据进行降维,建议使用PCA等降维方法。
  • min_impurity_decrease

    限制节点的信息增益,如果节点的信息增益小于设定,分枝不会发生。

1.4 目标权重参数

  • class_weight

    使样本标签平衡的参数。样本不平衡指的是:标签的一类占有很大的比例,比如说飞机失事的概率为1%(即失事:不失事=1:99),如果一个模型把全部的结果预测为飞机不失事,那么正确率也有99%,但是这种模型显而易见并不是一个好的模型。所以可以对某些标签赋予更大的权重,让模型更偏向于少数类。该模型的参数默认为None,即自动给予模型中所有标签相同的权重。
  • min_weight_fraction_leaf

    在设置了class_weight以后,如果需要剪枝,就需要搭配min_weight_fraction_leaf这个基于权重的剪枝参数来使用。

1.5 重要接口

分类决策树有四个重要的接口,分别为fit,score,predict,apply,下边分别对这些参数进行简单的介绍。

  • fit

    用来对模型进行拟合,输入训练数据,得到训练好的实例化模型
    clf = tree.DecisionTreeClassifier()
    clf.fit(x_train,y_train)
    
  • score

    对模型的拟合效果进行评分,输入测试数据,得到模型的评分
    clf = tree.DecisionTreeClassifier()
    clf.fit(x_train,y_train)
    clf.score(x_test,y_test)
    
  • predict

    使用训练好的模型,对测试数据进行预测,输入测试数据,得到每个测试数据对应的结果
     clf = tree.DecisionTreeClassifier()
     clf.fit(x_train,y_train)
     clf.predict(x_test)
    
  • apply

    返回每个测试样本所在的叶子节点的索引
      clf = tree.DecisionTreeClassifier()
      clf.fit(x_train,y_train)
      clf.apply(x_test)
    

2. tree.DecisionTreeRegressor

DecisionTreeRegressor官网
在这里插入图片描述
回归树和分类树的大部分参数、接口的用法相同,需要注意的是,回归树没有标签分别是否均衡的问题,因此没有class_weight这个参数。

重要参数

  • criterion

    回归树衡量分枝质量的指标,可以有‘mse’,‘friedman_mse’,'mae’三种选择。
    1)mse
    用父节点和子节点的均方误差来作为衡量节点分支的标准
    2)friedman_mse
    使用friedman针对潜在分支问题的改进后的均方误差
    3)mae
    用父节点和子节点的绝对平均误差作为衡量节点分支的标准
  • score

    回归树的score接口返回的是R平方
    R 2 = 1 − u v u = ∑ i = 1 N ( f i − y i ) 2 v = ∑ i = 1 N ( y i − y ) 2 R^2 = 1-\frac{u}{v}\\ u = \sum_{i=1}^{N}(f_i - y_i)^2\\v = \sum_{i=1}^{N}(y_i - y)^2 R2=1vuu=i=1N(fiyi)2v=i=1N(yiy)2
    其中, f i f_i fi是回归得到的值, y i y_i yi是真实值, y y y是真实值的平均值

你可能感兴趣的:(决策树)