国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > 服务器 > 一些常见的特征选择方法

一些常见的特征选择方法

来源:程序员人生   发布时间:2016-11-10 09:10:58 阅读次数:3269次

现实中产生的特点维度可能很多,特点质量良莠不齐,不但会增加训练进程的时间,也可能会下降模型质量。因此,提取出最具代表性的1部份特点来参与训练就很重要了。
通常有特点抽取和特点选择两种方法。这里分别介绍1下。

特点抽取

特点抽取中最多见确当属PCA了。

PCA

对特点之间存在正交关系,数据满足高斯散布或指数散布的数据,作线性变换,使用方差、协方差去噪,生成新的主元,接下来按重要性排序后取少数参与训练,到达减少特点的目的。
这里最重要的思想是把多个特点进行线性变换,使用较少的特点表达原来多个特点的主要特点。
由于现实中获得的数据绝大部份满足高斯散布,所以PCA利用极广。

人脸辨认利用
将多幅同1人的人脸图象进行PCA变换,找到代表人脸的主要特点模型。当有新的人脸需要辨认时,进行相同变换,并与已存在的人脸特点模型进行匹配。

原理讲授参考文档
http://www.360doc.com/content/10/0318/20/1024901_19297267.shtml

R利用方法

//PCA方案1:用SVD实现 pca1<-prcomp(USArrests, scale = TRUE) //PCA方案2:采取线性代数中的实对称均值的对角化实现 pca2<-princomp(USArrests,cor=T) summary(pc1)

summary的输出为:

Importance of components:
PC1 PC2 PC3 PC4
Standard deviation 1.5749 0.9949 0.59713 0.41645
Proportion of Variance 0.6201 0.2474 0.08914 0.04336
Cumulative Proportion 0.6201 0.8675 0.95664 1.00000

上面3行分别为标准差,方差贡献率,累计方差贡献率。
根据上面的数据,至PC3时,累计方差贡献率已达0.95664,因此只取前3个特点已足够。

特点选择

特点选择主要有Filter、Wrapper、Embedded等几种不同的思路。这里主要写写Filter。

卡方检验

在有不同特点值的影响下,对两组目标变量作卡方检验,计算x2值,看两组数据是不是有统计学上的明显差异。

这里给出R中的代码例子。

1、使用卡方检验判断患者医治方式对医治效果的影响

library(vcd)//加载vcd数据包 //准备进行卡检验所需的数据,提取医治方式与医治效果 mytable<-xtabs(~Treatment+Improved,data=Arthritis) //对mytable进行卡方检验 chisq.test(mytable)

以下是输出结果

Pearson's Chi-squared test

data: mytable
X-squared = 13.055, df = 2, p-value = 0.001463

p < 0.01,可以判断患者接受的医治方式对医治效果有明显影响。

2、使用卡方检验判断患者的性别对医治效果的影响

library(vcd)//加载vcd数据包 //准备进行卡检验所需的数据,提取患者性别与医治效果 mytable<-xtabs(~Improved+Sex,data=Arthritis) //对mytable进行卡方检验 chisq.test(mytable)

以下是输出结果

Pearson's Chi-squared test

data: mytable
X-squared = 4.8407, df = 2, p-value = 0.08889

p > 0.05,可以判断患者的性别对医治效果无明显影响。

上面的实验中,p值表示不同列之间的相互独立的几率。
在1中,由于p值很小,所以谢绝了医治方式与医治效果之间相互独立的假定。
在2中,由于p值不够小,所以没法谢绝性别与医治效果之间相互独立的假定。

WOE、IV

预测目标变量所需的信息总量包含在所有的特点中,某个特点所包含信息量(IV值)越大,则越重要。
IV值的计算以WOE为基础。
详细的概念、原理及公式可以参考这篇文章
数据发掘模型中的IV和WOE详解:
http://www.17bigdata.com/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98%E6%A8%A1%E5%9E%8B%E4%B8%AD%E7%9A%84iv%E5%92%8Cwoe%E8%AF%A6%E8%A7%A3.html

接下来看看R中的利用

//安装和加载woe包。 install.packages("woe") library(woe) //计算数据集mtcars中,cyl这1列对目标变量am的woe值和iv值。 woe(Data=mtcars,"cyl",FALSE,"am",10,Bad=0,Good=1)

以下是输出结果

BIN BAD GOOD TOTAL BAD% GOOD% TOTAL% WOE IV BAD_SPLIT GOOD_SPLIT
1 4 3 8 11 0.158 0.615 0.344 135.9 0.621 0.273 0.727
2 6 4 3 7 0.211 0.231 0.219 9.1 0.002 0.571 0.429
3 8 12 2 14 0.632 0.154 0.438 ⑴41.2 0.675 0.857 0.143

//计算数据集mtcars中,mpg这1列对目标变量am的woe值和iv值。 woe(Data=mtcars,"mpg",TRUE,"am",10,Bad=0,Good=1)

以下是输出结果

BIN MIN MAX BAD GOOD TOTAL BAD% GOOD% TOTAL% WOE IV BAD_SPLIT GOOD_SPLIT
1 1 10.4 14.3 4 0 4 0.211 0.000 0.125 -Inf Inf 1.00 0.00
2 2 14.7 15.2 3 1 4 0.158 0.077 0.125 ⑺1.9 0.058 0.75 0.25
3 3 15.5 17.3 3 1 4 0.158 0.077 0.125 ⑺1.9 0.058 0.75 0.25
4 4 17.8 19.2 4 0 4 0.211 0.000 0.125 -Inf Inf 1.00 0.00
5 5 19.2 21.0 1 3 4 0.053 0.231 0.125 147.2 0.262 0.25 0.75
6 6 21.4 22.8 2 2 4 0.105 0.154 0.125 38.3 0.019 0.50 0.50
7 7 22.8 27.3 2 2 4 0.105 0.154 0.125 38.3 0.019 0.50 0.50
8 8 30.4 33.9 0 4 4 0.000 0.308 0.125 Inf Inf 0.00 1.00

信息熵与信息增益

信息的熵,表示不肯定性。
在1个数据集中,先对目标分类变量进行熵的计算,再对目标分类变量按某1个特点值进行分组落后行1次熵的计算,两次熵值之差就是该特点值的信息增益。特点值的信息增益越大,表示该特点值的重要性越高。
这里有1个条件,即,目标变量是1个分类变量。

这里使用R语言代码作个说明
我原来写过1篇老太太买菜与最大熵模型
1个老太太去买菜,市场上可供选择的东西有以下几种:西红柿(1)、白菜(2)、豆腐(3)、咸菜(4)、馒头(5)、西瓜(6)、樱桃(7)、苹果(8)、猪肉(10)、牛肉(11)、羊肉(12)。不给出任何其它信息之前,我们没法判断老太太今天会买甚么菜。此时熵值最大,为

install.packages("entropy") library(entropy) y<-c(1,2,3,4,5,6,7,8,9,10,11,12) //使用max likehood方式计算熵值 entropy(y,method = "ML")//输出值为:2.327497

接下来,在给出4条老太太买菜习惯的信息后,我们发现老太太今天只可能会买樱桃或西瓜。
此时不肯定性变小,熵值变小,为:

y<-c(6,7) entropy(y,method = "ML")//输出值为:0.6901857

因此,4条老太太买菜习惯的信息增闪为:2.327497-0.6901857=1.637311

Gini指数

这个指标同信息增益原理类似,哪一个特点对Gini指数贡献大,哪一个特点重要。

给出R语言实现
不给出任何信息时,Gini指数为:

install.packages("ineq") library(ineq) y<-c(1,2,3,4,5,6,7,8,9,10,11,12) Gini(y)//输出结果为:0.3055556

给出4个买菜习惯信息后,Gini指数为:

y<-c(6,7) Gini(y)//输出结果为:0.03846154

相干性

数据集中的两个特点之间存在共线性,即较强的线性关系,就存在冗余,在终究训练时只使用其中1个就足够。

这里列出1些衡量相干性的值。

1、协方差与相干系数。
这两个值描写的是两个变量与各自期望值之间的误差是不是变动1致,它们之间可以相互转换,1般使用相干系数较多。相干系数范围为[⑴,1],其中⑴代表完全负相干,1代表完全正相干,0代表完全独立。

这里列出R利用方法

//计算两列数据之间的相干系数 cor(mtcars$cyl,mtcars$disp,method = "pearson")//输出值为:0.9020329,表示两列数据正相干 cor(mtcars$mpg,mtcars$disp,method = "pearson")//输出值为:-0.8475514,表示负相干 //计算两列数据之间的协方差 cov(mtcars$cyl,mtcars$disp,method = "pearson")//输出值为:199.6603 cov(mtcars$mpg,mtcars$disp,method = "pearson")//输出值为:⑹33.0972

method取值有3种:
pearson:适用于连续变量,如分析血压值和年龄的相干性。
spearman:适用于顺序数据,如分析数学和语言成绩排名相干性。
kendall:适用于有序分类变量,如分析疼痛级别分类和病情严重程序分类。

2、偏相干
当数据集中的特点很多时,两个特点之间的相干性会遭到很多其它特点的影响。在排除掉其它特点的影响以后,计算出来的两个特点的相干性系数,叫偏相干系数。
在特点z固定的条件下,分析x、y的相干性,得到的是1阶偏相干系数,在特点z、q固定的条件下,得到的是2阶偏相干系数。

这里给出R利用

library(ggm) data("marks")//加载marks数据集 var(marks)//计算marks数据集的方差矩阵 //计算固定analysis,statistics时,vectors和algebra的2阶偏相干系数 pcor(c("vectors", "algebra", "analysis", "statistics"), var(marks))//输出结果为:0.388203 pcor(c(2,3,4,5), var(marks))//与上1句代码意义相同 //偏相干系数的显著性检验,入参分别为:偏相干系数,固定变量个数,样本量 pcor.test(0.388203,2,dim(marks)[1])//输出值p=0.0002213427,p<0.01,因此,在固定analysis,statistics时,vectors和algebra两个特点存在明显偏相干性

Lasso

Lasso的基本思想是在回归系数的绝对值之和小于1个常数的束缚条件下,使残差平方和最小化,从而能够产生某些严格等于0的回归系数,到达特点选择的目的。

这里给出R中的利用例子

data(diabetes)//加载数据集diabetes //使用lasso进行特点选择 lars(diabetes$x,diabetes$y,type="lasso")

输出结果为:

Call:
lars(x = diabetesx,y=diabetesy)
R-squared: 0.518
Sequence of LASSO moves:
bmi ltg map hdl sex glu tc tch ldl age hdl hdl
Var 3 9 4 7 2 10 5 8 6 1 ⑺ 7
Step 1 2 3 4 5 6 7 8 9 10 11 12

Var行即是lasso给出的特点选择顺序,Setp行即时顺序编号。

以下方法可以得到各特点的多重共线性:

data<-lars(diabetes$x,diabetes$y) summary(data)

输出结果为:

LARS/LASSO
Call: lars(x = diabetesx,y=diabetesy)
Df Rss Cp
0 1 2621009 453.7263
1 2 2510465 418.0322
2 3 1700369 143.8012
3 4 1527165 86.7411
4 5 1365734 33.6957
5 6 1324118 21.5052
6 7 1308932 18.3270
7 8 1275355 8.8775
8 9 1270233 9.1311
9 10 1269390 10.8435
10 11 1264977 11.3390
11 10 1264765 9.2668
12 11 1263983 11.0000

按data中Step行指定的顺序,顺次选取特点,则Cp的值从上往下对应变化,Cp值越小,表示回归模型越精确。
如果我们取前3个特点,则cp值为86.7411。如果取前7个特点,则Cp值为8.8775,到达最小。
因此,计算量允许的范围内,取前7个特点进行训练,得到的回归模型最精确。如果要严格控制计算量,则取前3个特点便可。

参考文档:
用R建立岭回归和lasso回归
http://blog.csdn.net/jiabiao1602/article/details/39338181

总述

IV、信息增益、Gini增益主要用于单特点重要性评估。
Lasso主要用于超大范围特点的降维挑选。

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生