决策树与正则化超参数

2019-06-25  本文已影响0人  Cingti

星期二, 25. 六月 2019 09:43下午

CART为分类与回归树(classification and regression tree)的简称,CART假设决策树是二叉树,内部节点特征的取值为是和否。在决策树算法中,寻找最优决策树是一个NPC问题,即无法用计算机在多项式时间内,找出全局最优解,因此,大多数决策树算法都采用启发式的思想,在每一个节点上寻找局部最优解,于是,决策树得到的结果无法保证全局最优解

1.回归树的生成算法

回归树对应着输入空间的一个划分以及在划分的单元上的输出值。这里采用启发式的思想,选择第j个变量x^{(j)}和它的取值s,作为切分变量和切分点,并定义切分得到的区域分别为R_1R_2:
R_1(j,s)=\{x|x^{(j)}\leq s\}
R_2(j,s)=\{x|x^{(j)}> s\}
然后寻找最优切分变量j和最优切分点s,这里采用MSE来计算,求解下式:
\min \limits_{j,s} [\min \limits_{c_1}\sum \limits_{x_i\in R_1(j,s)}(y_i-c_1)^2+\min \limits_{c_2}\sum \limits_{x_i\in R_2(j,s)}(y_i-c_2)^2]
对于固定输入变量j可以找到最优切分点s。遍历所有输入变量,找到最优的切分变量j,构成一个(j,s)对,依次将输入空间划分为两个区域,接着,重复上述过程,对每个区域重复上述过程,直到满足停止条件为止。

2.分类树的生成算法

分类树的生成算法和回归树类似,只是分类树用基尼指数选择最优特征,同时决定该特征的最优二值切分点。
在特征A的条件下,集合D的基尼指数的定义为:
Gini(D,A)=\frac{|D_1|}{|D|}Gini(D_1)+\frac{|D_2|}{|D|}Gini(D_2)
其中,样本集合D根据特征A是否取某一可能值a被分割成D_1D_2两部分;基尼指数Gini(D)表示集合D的不确定性,基尼系数Gini(D,A)表示经A=a分割后集合D的不确定性。
对于给定的样本集合D,其基尼指数为:
Gini(D)=1-\sum_{k=1}^{K}(\frac{|C_k|}{|D|})^2
其中,C_kD中属于第k类的样本子集,K是类的个数。

3.Python下决策树函数的参数解释

(1)DecisionTreeClassifier和DecisionTreeRegressor主要参数解释

注:通过增大min_samples_split值和min_samples_leaf值 或者减少max_features值和max_leaf_nodes,可以使模型有效控制过拟合

(2)采用export_graphviz对树结构的可视化

# -*- coding: utf-8 -*-

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.tree import export_graphviz

iris = load_iris()
X = iris.data
y = iris.target


tree_clf = DecisionTreeClassifier(
    max_depth=None,
    min_samples_split=2,
    min_samples_leaf=3,
    max_features=None,
    max_leaf_nodes=None,
    presort=False,
).fit(X, y)

export_graphviz(
    tree_clf,
    out_file="iris_tree.dot",
    feature_names=iris.feature_names,
    class_names=iris.target_names,
    rounded=True,
    filled=True,
)

执行完上述程序后,会在文件夹下生成iris_tree.dot文件,需要在cd到该文件夹下的终端,输入代码

dot -Tpng iris_tree.dot -o iris_tree.png

即可生成树状结构的.png图,效果如下。

iris_tree.png

第三篇未讲完部分会在后期补上,第五篇开始就会结合深度学习一起讲,欢迎留言

上一篇 下一篇

猜你喜欢

热点阅读