特征选择常用方法
1. 过滤法Filter
按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。
发散性就是去掉那些取值变化小的特征,一般先进行归一化,然后计算方差,删除那些方差比较小的特征。
相关系数法如下:
(1). 互信息(Mutual Information)
互信息(Mutual Information)是衡量随机变量之间相互依赖程度的度量。
假设存在一个随机变量 X ,和另外一个随机变量Y,那么它们的互信息是
I
(
X
;
Y
)
=
H
(
X
)
−
H
(
X
∣
Y
)
I(X ; Y)=H(X)-H(X | Y)
I(X;Y)=H(X)−H(X∣Y)
H(X)是X的信息熵, H(X|Y)是已知Y情况下,X带来的信息熵(条件熵)
从概率角度,互信息是由随机变量X,Y的联合概率分布p(x,y)和边缘概率分布p(x),p(y)得出
I
(
X
;
Y
)
=
∑
y
∈
Y
∑
x
∈
X
p
(
x
,
y
)
log
(
p
(
x
,
y
)
p
(
x
)
p
(
y
)
)
\mathrm{I}(X ; Y)=\sum_{y \in \mathcal{Y}} \sum_{x \in \mathcal{X}} p(x, y) \log \left(\frac{p(x, y)}{p(x) p(y)}\right)
I(X;Y)=y∈Y∑x∈X∑p(x,y)log(p(x)p(y)p(x,y))
(2).Speraman Rank相关系数
ρ = 1 − 6 ∑ d i 2 n ( n 2 − 1 ) \rho=1-\frac{6 \sum d_{i}^{2}}{n\left(n^{2}-1\right)} ρ=1−n(n2−1)6∑di2
其中di = xi - yi表示两个秩之间的差值
n:表示样本的大小
可以理解为将Pearson相关系数把数据先排名,之后按照排名计算出其Pearson相关系数就是Spearman Rank Correction
(3). Pearson相关系数
Pearson相关系数的计算公式, 皮尔森相关系数评估两个连续变量之间的线性关系
ρ
X
,
Y
=
cov
(
X
,
Y
)
σ
X
σ
Y
=
E
(
(
X
−
μ
X
)
(
Y
−
μ
Y
)
)
σ
X
σ
Y
=
E
(
X
Y
)
−
E
(
X
)
E
(
Y
)
E
(
X
2
)
−
E
2
(
X
)
E
(
Y
2
)
−
E
2
(
Y
)
\rho_{X, Y}=\frac{\operatorname{cov}(X, Y)}{\sigma_{X} \sigma_{Y}}=\frac{E\left(\left(X-\mu_{X}\right)\left(Y-\mu_{Y}\right)\right)}{\sigma_{X} \sigma_{Y}}=\frac{E(X Y)-E(X) E(Y)}{\sqrt{E\left(X^{2}\right)-E^{2}(X)} \sqrt{E\left(Y^{2}\right)-E^{2}(Y)}}
ρX,Y=σXσYcov(X,Y)=σXσYE((X−μX)(Y−μY))=E(X2)−E2(X)E(Y2)−E2(Y)E(XY)−E(X)E(Y)
(4).距离相关系数
距离相关系数是为了克服Pearson相关系数的弱点而生的。 用下面式子定义两变量的相关性。
d
^
c
o
r
r
(
u
,
v
)
=
d
^
cov
(
u
,
v
)
dcov
(
u
,
u
)
d
cov
(
v
,
v
)
\operatorname{\hat{d}corr}(u, v)=\frac{\hat{d} \operatorname{cov}(u, v)}{\sqrt{\operatorname{dcov}(u, u) d \operatorname{cov}(v, v)}}
d^corr(u,v)=dcov(u,u)dcov(v,v)d^cov(u,v)
d
^
cov
2
(
u
,
v
)
=
S
1
^
+
S
2
^
−
2
S
3
^
\hat{d} \operatorname{cov}^{2}(u, v)=\widehat{S_{1}}+\widehat{S_{2}}-2 \widehat{S_{3}}
d^cov2(u,v)=S1
+S2
−2S3
,
S
1
^
,
S
2
^
和
/
S
3
\widehat{S_{1}}, \widehat{S_{2}} 和 / \sqrt{S_{3}}
S1
,S2
和/S3分别表示为
S
^
1
=
1
n
2
∑
i
=
1
n
∑
j
=
1
n
∥
u
i
−
u
j
∥
d
u
∥
v
i
−
v
j
∥
d
v
\widehat{S}_{1}=\frac{1}{n^{2}} \sum_{i=1}^{n} \sum_{j=1}^{n}\left\|u_{i}-u_{j}\right\|_{d_{u}}\left\|v_{i}-v_{j}\right\|_{d_{v}}
S
1=n21i=1∑nj=1∑n∥ui−uj∥du∥vi−vj∥dv
S 2 ^ = 1 n 2 ∑ i = 1 n ∑ j = 1 n ∥ u i − u j ∥ d u 1 n 2 ∑ i = 1 n ∑ j = 1 n ∥ v i − v j ∥ d v \widehat{S_{2}}=\frac{1}{n^{2}} \sum_{i=1}^{n} \sum_{j=1}^{n}\left\|u_{i}-u_{j}\right\|_{d_{u}} \frac{1}{n^{2}} \sum_{i=1}^{n} \sum_{j=1}^{n}\left\|v_{i}-v_{j}\right\|_{d_{v}} S2 =n21i=1∑nj=1∑n∥ui−uj∥dun21i=1∑nj=1∑n∥vi−vj∥dv
S 3 ^ = 1 n 3 ∑ i = 1 n ∑ j = 1 n ∑ l = 1 n ∥ u i − u l ∥ d u ∥ v j − v l ∥ d v \widehat{S_{3}}=\frac{1}{n^{3}} \sum_{i=1}^{n} \sum_{j=1}^{n} \sum_{l=1}^{n}\left\|u_{i}-u_{l}\right\|_{d_{u}}\left\|v_{j}-v_{l}\right\|_{d_{v}} S3 =n31i=1∑nj=1∑nl=1∑n∥ui−ul∥du∥vj−vl∥dv
同理计算 d ^ cov ( u , u ) \hat{d} \operatorname{cov}(u, u) d^cov(u,u)
kendall相关系数
略
相关系数法综合的一些想法
一般可以多选取几类相关系数,将它们用Rank-sum ratio(数学建模现学现用。。)综合一下。
2. 包裹法(Wrapper)
递归消除特征法使用一个基模型来进行多轮训练,每轮训练后,移除若干权值系数的特征,再基于新的特征集进行下一轮训练。
sklearn官方解释:对特征含有权重的预测模型(例如,线性模型对应参数coefficients),RFE通过递归减少考察的特征集规模来选择特征。首先,预测模型在原始特征上训练,每个特征指定一个权重。之后,那些拥有最小绝对值权重的特征被踢出特征集。如此往复递归,直至剩余的特征数量达到所需的特征数量。
RFECV 通过交叉验证的方式执行RFE,以此来选择最佳数量的特征:对于一个数量为d的feature的集合,他的所有的子集的个数是2的d次方减1(包含空集)。指定一个外部的学习算法,比如SVM之类的。通过该算法计算所有子集的validation error。选择error最小的那个子集作为所挑选的特征
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
#递归特征消除法,返回特征选择后的数据
#参数estimator为基模型
#参数n_features_to_select为选择的特征个数
RFE(estimator=LogisticRegression(), n_features_to_select=2).fit_transform(iris.data, iris.target)
3.嵌入法(Embedding)
先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。
单变量特征选择方法独立的衡量每个特征与响应变量之间的关系,另一种主流的特征选择方法是基于机器学习模型的方法。有些机器学习方法本身就具有对特征进行打分的机制,或者很容易将其运用到特征选择任务中,例如回归模型,SVM,决策树,随机森林等等。其实Pearson相关系数等价于线性回归里的标准化回归系数。
比如GBDT中的Lgb,自动可以计算出各个因素对于最终要预测值的贡献程度,贡献程度越高,该因素越重要。
Attention:选取的特征可能不是普适的,存在只适用于该模型的可能,比如用lgb选取的特征可能不是对于线性回归的最优特征。