机器学习中分类和预测算法的评估: |
---|
准确率 |
速度 |
强壮性 |
可规模性 |
可解释性 |
熵:
H
(
x
)
=
−
∑
x
P
(
x
)
l
o
g
2
[
P
(
x
)
]
H(x)=-\sum_{x}P(x)log_2[P(x)]
H(x)=−∑xP(x)log2[P(x)]
变量的不确定性越大,熵越大
ID3算法:
如何选择属性判断节点
信息获取量(Information Gain):
G
a
i
n
(
A
)
=
I
n
f
o
(
D
)
−
I
n
f
o
r
A
(
D
)
Gain(A)=Info(D)-Infor_A(D)
Gain(A)=Info(D)−InforA(D)
通过A来作为节点分类获取了多少信息
其他算法:
C4.5:Quinlan
Classification and Regression Tree(CART)
共同点:都是贪心算法,自上而下
区别:属性选择度量方法不同:C4.5(gain ratio),CART(gini index)ID3(Information Gain)
sklearn中决策树的模块 | 解释 |
---|---|
tree.DecisionTreeClassifier | 分类树 |
tree.DecisionTreeRegressor | 回归树 |
tree.export_graphviz | 将生成的决策树导出为DOT格式,画图专用 |
tree.ExtraTreeClassifier | 高随机版本的分类树 |
tree.ExtraTreeRegressor | 高随机版本的回归树 |
三步骤:
(1)实例化,建立评估模型对象
(2)通过模型接口训练模型
(3)通过模型接口提取需要的信息
from sklearn import tree #导入需要的模块
clf=tree.DecisionTreeClassifier() #实例化
clf=clf.fit(X_train,y_train) #用训练集训练模型
result=clf.score(X_test,y_test) #导入测试集,从接口中调用需要的信息
DecisionTreeClassifier中重要的参数
1.criterion:这个参数就是用来决定不纯度的计算方法的。
(1)输入"entropy",使用信息熵
(2)输入"gini",使用基尼系数
E
n
t
r
o
p
y
(
t
)
=
−
∑
i
=
0
c
−
1
p
(
i
∣
t
)
l
o
g
2
p
(
i
∣
t
)
Entropy(t)=-\sum_{i=0}^{c-1}p(i|t)log_2p(i|t)
Entropy(t)=−i=0∑c−1p(i∣t)log2p(i∣t)
G
i
n
i
(
t
)
=
1
−
∑
i
=
0
c
−
1
p
(
i
∣
t
)
2
Gini(t)=1-\sum_{i=0}^{c-1}p(i|t)^2
Gini(t)=1−i=0∑c−1p(i∣t)2
怎么进行选取:
通常就使用基尼系数
数据维度很大,噪声很大的时候使用基尼系数
纬度低,数据比较清晰的时候,两者没区别别
当决策树的拟合程度不够的时候,使用信息熵
两个都试试,不好换另外一个
决策树的基本流程
random_state用来设置分支中的随机模式的参数,默认为None,在高维度时随机性会表现的更明显。输入任意整数,会一直长出同一棵树,让模型稳定。
splitter也是用来控制决策树中的随机选项的,有两种输入值,输入"best",决策树在分枝时虽然随机但是还是会优先选择更重要的特征进行分枝(重要性通过feature_importances_查看),输入“random”,决策树在分支时会更加随机,树会更深,对训练集的你和将会降低,这也是防止过拟合的一种方法。
剪枝参数
在不加限制的情况下,一棵决策树会生长到衡量不纯度的指标最优,或者没有更多的特征可用为止,这样往往会过拟合,这就是说,他会在训练集上表现很好,在测试集上表现糟糕。
sklearn中的剪枝策略:
max_depth:限制树的最大深度,超过设定深度的树枝全部剪掉
这是用的最广泛的剪枝参数,在高维度低样本量时非常有效。决策树多生长一层,对样本的需求量就会增加一倍,所以限制树的深度能够有效的限制过拟合。在集成算法中也非常实用。实际使用时,建议从**=3开始尝试**,看看拟合效果再决定是否增加设定深度
min_samples_leaf:一个节点在分枝后的每个子节点都必须包含至少min_samples_leaf个训练样本,不然就剪枝,或者,分支会朝着满足每个子节点都包含min_samples_leaf个样本的方向去发生。
一般搭配max_depth使用,在回归树中有神奇的效果,可以让模型变的更加平滑。这个参数的数量设置得大小会引起过拟合,设置的太大就会阻止模型学习数据。一般来说,建议从=5开始使用。如果节点中含有的样本量变化很大,建议输入浮点数作为样本量的百分比来使用。同时,这个参数可以保证每个叶子的最小尺寸,可以在回归问题中避免低方差,过拟合的叶子节点出现。对于类别不多的分类问题,=1通常是最最佳选择。
min_samples_split:一个节点必须要包含至少min_samples_split个训练样本,这个节点才允许被分支,否则分支就不会发生。
max_features:限制分支时考虑的特征数,超过限制个数的特征都会被舍弃。但是这个方法很暴力,直接减去一些特征,可能会导致学习不足。如果希望通过降维的方式防止过拟合,建议使用PCA,ICA或者特征选择模块中的降维算法。
min_impurity_decrease:限制信息增益的大小,信息增益小于设定值的话就不在继续分支。