京公网安备 11010802034615号
经营许可证编号:京B2-20210330
一些常见的特征选择方法
现实中产生的特征维度可能很多,特征质量参差不齐,不仅会增加训练过程的时间,也可能会降低模型质量。因此,提取出最具代表性的一部分特征来参与训练就很重要了。
特征抽取
对于特征之间存在正交关系,数据满足高斯分布或指数分布的数据,作线性变换,使用方差、协方差去噪,生成新的主元,接下来按重要性排序后取少数参与训练,达到减少特征的目的。
这里最重要的思想是把多个特征进行线性变换,使用较少的特征表达原来多个特征的主要特点。
由于现实中取得的数据绝大部分满足高斯分布,所以PCA应用极广。
人脸识别应用
将多幅同一人的人脸图像进行PCA变换,找到代表人脸的主要特征模型。当有新的人脸需要识别时,进行相同变换,并与已存在的人脸特征模型进行匹配。
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
上面三行分别为标准差,方差贡献率,累计方差贡献率。
根据上面的数据,至PC3时,累计方差贡献率已达0.95664,因此只取前三个特征已经足够。
特征选择
特征选择主要有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详解:https://www.cda.cn/view/24633.html
接下来看看R中的应用
//安装和加载woe包。
install.packages("woe")
library(woe)
//计算数据集mtcars中,cyl这一列对目标变量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 -141.2 0.675 0.857 0.143
//计算数据集mtcars中,mpg这一列对目标变量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 -71.9 0.058 0.75 0.25
3 3 15.5 17.3 3 1 4 0.158 0.077 0.125 -71.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
信息熵与信息增益
信息的熵,表示不确定性。
在一个数据集中,先对目标分类变量进行熵的计算,再对目标分类变量按某一个特征值进行分组后进行一次熵的计算,两次熵值之差就是该特征值的信息增益。特征值的信息增益越大,表示该特征值的重要性越高。
这里有一个前提,即,目标变量是一个分类变量。
这里使用R语言代码作个说明
一个老太太去买菜,市场上可供选择的东西有以下几种:西红柿(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代表完全正相关,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")//输出值为:-633.0972
method取值有三种:
pearson:适用于连续变量,如分析血压值和年龄的相关性。
spearman:适用于顺序数据,如分析数学和语言成绩排名相关性。
kendall:适用于有序分类变量,如分析疼痛级别分类和病情严重程序分类。
2、偏相关
当数据集中的特征很多时,两个特征之间的相关性会受到很多其它特征的影响。在排除掉其它特征的影响之后,计算出来的两个特征的相关性系数,叫偏相关系数。
在特征z固定的前提下,分析x、y的相关性,得到的是一阶偏相关系数,在特征z、q固定的前提下,得到的是二阶偏相关系数。
这里给出R应用
library(ggm)
data("marks")//加载marks数据集
var(marks)//计算marks数据集的方差矩阵
//计算固定analysis,statistics时,vectors和algebra的二阶偏相关系数
pcor(c("vectors", "algebra", "analysis", "statistics"), var(marks))//输出结果为:0.388203
pcor(c(2,3,4,5), var(marks))//与上一句代码意义相同
//偏相关系数的显著性检验,入参分别为:偏相关系数,固定变量个数,样本量
pcor.test(0.388203,2,dim(marks)[1])//输出值p=0.0002213427,p<0.01,因此,在固定analysis,statistics时,vectors和algebra两个特征存在明显偏相关性
Lasso
Lasso的基本思想是在回归系数的绝对值之和小于一个常数的约束条件下,使残差平方和最小化,从而能够产生某些严格等于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 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个特征即可。
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
数据敏感度不是天赋,也不是“看一眼数字就能发现问题”的直觉。对市场专员来说,它更接近一套可练习的工作习惯:看到投放ROI、 ...
2026-10-23市场营销专员转数据分析,不是从零重来。你已有的渠道投放、活动执行、线索跟进经验,本身就是分析工作的原料——缺的不是业务理 ...
2026-10-23先说结论:市场岗位并非必须考数据分析证书。招聘方更常看的是你能否把渠道效果、活动ROI、线索转化这些业务问题讲清楚,证书只 ...
2026-10-23市场分析师的职场知识提升,最怕两件事:一是把“学工具”当成学习本身,Excel、SQL、Python轮着学一遍,回到工作里还是不知道怎 ...
2026-10-23市场分析师的通用技能可以归为五块:业务与市场理解、调研与竞品分析、用户与渠道数据分析、指标与分析表达、工具操作。它们不是 ...
2026-10-23市场分析师的核心技能,可以先用一个框架回答:懂业务与市场、能取数与处理数据、会指标与分析方法、能把洞察讲清楚。这四块是共 ...
2026-10-23市场策划不是“会写文案、能办活动”这么简单。它本质上是一个用创意和资源撬动业务结果的岗位:先理解市场和人群,再形成方案, ...
2026-10-23社群运营不是“拉群、发通知、维护气氛”这么简单。它真正要对的结果是:用户进得来、留得住、愿意互动、最终产生转化或复购。因 ...
2026-10-23营销人的能力提升计划,最容易做成一张课程清单:报名几门课、读完几本书、考一个证,年底回头看,工作方式却没变。问题不在努力 ...
2026-10-23人力资源专员的职场价值,不由“做了多少事”决定,而由“解决什么问题、留下什么成果”决定。同样做招聘、算考勤、办入离职,有 ...
2026-10-23产品经理的职场价值,不主要由会画原型、会写文档决定,而由能否用业务结果证明自己的判断与推动决定。同一岗位的人价值差距大, ...
2026-10-23运营专员的能力提升,最容易走偏成两件事:一是把市面上所有工具都学一遍,二是把沟通、协作这类通用能力当成唯一答案。更有效的 ...
2026-10-23市场总监的沟通与管理,难点通常不在话术,而在三件事能否同时成立:向上用结论和数据对齐目标,平级用共同指标换取协同,向下用 ...
2026-10-23市场分析师的沟通失分,往往不是“嘴笨”,而是三件事没做好:结论没提炼出来、指标口径没对齐、建议没有落到决策上。所以提升沟 ...
2026-10-23社群运营做久了,很容易陷入一种忙碌:每天在群里发内容、回消息、做活动,热闹的时候很热闹,可一到月底复盘,说不清哪些动作带 ...
2026-10-23品牌运营的技能提升,最容易走偏的一步是先报课、先学工具。更有效的顺序是:先沿“品牌定位与策略—内容与传播—渠道与活动执行 ...
2026-10-23营销人员想赢得客户信任,单靠话术和关系维护越来越不够。客户在签约前会追问:你懂我的业务吗?方案里的数字怎么来的?承诺的效 ...
2026-10-23APP运营专员的能力提升,容易陷入两种误区:一是把“会用工具”当成能力全部,学了一堆Excel函数和SQL语法,回到岗位仍说不清一 ...
2026-10-23社群运营的沟通难点,不在于“会不会说话”,而在于同一件事要对三类人说清楚:对用户要安抚情绪、给出确定答复;对产品、活动、 ...
2026-10-23营销人员想快速提升职场技能,最容易踩的坑是“什么都学一点”:Excel、SQL、Python、统计学各报一门课,结果每个都停在入门。更 ...
2026-10-23