OOB计算
用未被选择到的学习的数据,做验证集计算。不必另外做validation了
Feature Selection
如果没有做好这部分,也是有缺点的:
其中最致命的就是,可能得到的是错误的答案,一不小心找到的关系就是关联,而不是原因。
所以RF中加入了在哪里切一刀。
pemunitation
随机打乱这个特征的数据,看最后的结果和之前是否一致,这样保证了数据分布的一致。
如果一致,说明特征影响并不大。
直接删除呢?并没办法很好的决定出是否重要,因为该特征可能对组合有效?改变太多对结果的影响并不好说。
特征重要性排序
在这个特征里面加入一些垃圾,如果和不放的准确率类似,那么就可以说明是重要的。
加什么垃圾呢?垃圾还能选吗?
一个是把原数据的分布改掉,一个是杂絮的影响。
有放回抽样bootstrap,这里选择类似的思想。
pemunitation test:看下原来的表现和现在被污染之后的表现的差距
i
m
p
o
r
t
a
n
c
e
(
i
)
=
p
e
r
f
o
r
m
a
n
c
e
(
D
)
−
p
e
r
f
o
r
m
a
n
c
e
(
D
p
)
importance(i) = performance(D) - performance(D^p)
importance(i)=performance(D)−performance(Dp)
这样的操作需要训练P次,实际的算法采用了近似的方法,采用OOB的方法计算特征重要度排序。
i
m
p
o
r
t
a
n
c
e
(
i
)
=
E
o
o
b
(
D
)
−
E
o
o
b
(
D
p
)
importance(i) = E_{oob}(D) - E_{oob}(D^p)
importance(i)=Eoob(D)−Eoob(Dp) 如果是对原数据的分布进行改变,依旧没有什么影响。
但是可进一步转化为:
i
m
p
o
r
t
a
n
c
e
(
i
)
=
E
o
o
b
(
D
)
−
E
o
o
b
p
(
D
)
importance(i) = E_{oob}(D) - E_{oob}^p(D)
importance(i)=Eoob(D)−Eoobp(D),直接在验证上动手脚,训练只训练一次,但是计算OOB的时候对相应的特征,计算相应的OOB分数。