R机器学习:特征工程与特征选择的介绍

两个月没更新了,没有其它理由,就是懒惰,间接持续性的懒惰,一直持续了2个月,简直懒惰!!!大家的好多的私信也没回就过期回不了了。请大家批评我!!!。

看了很多高深的算法之后,实在是看不太明白,所以今天又来带大家复习基本功,都是两个非常非常重要的东西,先定两个基调,所谓的特征工程就是数据预处理,所谓的特征选择就是变量筛选,这样大家就不觉得这么难了。

Feature engineering improves the performance of the machine learning model by selecting the right features for the model and preparing the features in a way that is suitable for the machine learning model.

并且你也可以将特征选择看作是特征工程的一部分,概念上不去纠结它。同时特征工程的整个过程也要结合具体问题具体分析,需要经验,需要背景知识,也是没有金标准的。是一项科学与艺术相结合的工作。

特征工程

特征工程又称特征提取或特征发现,是使用领域知识从原始数据中提取特征的过程(怎么提,怎么将背景知识和提取方法结合其实是个艺术活)。这就涉及到一系列的操作,主要的目的就是将原始数据处理成可以直接喂给算法的数据特征。比如有些算法要求数据不能有缺失,你就得处理缺失值吧,比如有些算法需要正态数据,你就得进行数据转换吧,这些都是特征工程。

特征工程具体的操作包括

基础的操作:像One-hot encoding(哑变量转换),log转换,Outlier handling离群值处理,简单插补,Binning连续变量分箱都暂时略过(之后给大家写)。今天我们看下面的内容

1.插补

  • 随机森林插补

随机森林插补缺失应该是大家的首选方法,这个方法既可以处理连续特征又可以处理分类特征,而且对离群值和非线性数据的适合性都较好,其大概流程如下:

[图片上传失败...(image-3c1b66-1667044441336)]

首先是将缺失的连续值用变量均值,分类值用众数插补好,然后将数据切为2部分,一部分是完整数据集(training set),一部分是插补后的数据集 (prediction set),然后用完整数据集训练随机森林模型,在插补后的数据集中更新缺失值,这样迭代,直到插补值稳定或者达到最大迭代次数。代码示例如下:

imp_train_X <- missForest(train_X)$ximp
  • KNN插补

KNN插补的思路是用缺失值附近(Euclidean distance)的K个值的均值将缺失插补上,只需要用kNN函数就可以实现,其示例如下,大家应该一读就知道这个方法只适合连续变量,因为其要计算距离

air_imp_knn <- kNN(airquality, k = 5, variable = "Ozone")
n_miss(air_imp_knn$Ozone)

3.特征放缩

特征缩放有下面的三种常见的方法:

Min Max Scaler:MinMaxScaler method is one of the methods of standardizing the data where values are made to lie between 0 and 1

**Normalization **: All values are scaled in a specified range between 0 and 1 via normalisation (or min-max normalisation)

Standardization: Standardization (also known as z-score normalisation) is the process of scaling values while accounting for standard deviation

特征处理好之后,接下来的问题就是用哪些特征来训练我们的模型,就是特征选择。

特征选择

特征选择的方法又可以分为三个大类Filter Methods, Wrapper Methods 和 Embedded Methods(也叫Intrinsic Method).

[图片上传失败...(image-be8a2-1667044441336)]

Filter Methods就是我们平常论文中常用的单变量筛选方法,比如ANOVA, Pearson Correlation, Chi-Square.--单因素分析有意义的时候纳入模型就是说的这个,这一部分有一个方法叫做“低信息特征过滤”,大家不常见到,但是很好理解,就是说有些变量基本上没有变异,全部观测都是取的同一个值或者接近全是同一个值,这样的特征其实是没有用的,需要过滤出去,此时用到的函数叫做nearZeroVar(),或者可以用preProcess()函数将method参数设置成“nzv”也是可以的。这个方法应该是特征选择的时候第一步使用。

Wrapper Methods指的是依靠模型表现来筛选变量,将筛选过程包装在建模过程里面,从而看看到底用哪些变量可以使模型表现更加好,这类方法就更加的有模型针对性了。常见的Wrapper Method包括递归式特征消除,逐步法Stepwise selection和基因算法。

Stepwise selection逐步法的概念统计书上将回归的章节都会有提到,要么就是在spss实操的书中会有的,包括前进和后退以及逐步3中方法。这儿要提醒大家的是前进法和逐步法都是可以用在高维数据中的(比如你的变量比观测多都可以用),但是后退法不行。

Embedded Methods这个方法和Wrapper Methods方法其实有点像的,都是要基于模型表现的,不同的地方就在于Embedded Methods结合了模型的固有特征(intrinsic properties),代表性的方法包括lasso法和决策树法。

接下来给大家写几个特征选择的具体例子:

变量重要性计算

首先我们要理解同一个机器学习问题,用不同的算法的时候,各个特征的重要性是不一样的,通常我们都会去用多个模型去解决我们的问题,具体例子,比如说一些在基于树的模型中表现很好的变量,在放在回归模型中有可能就没那么重要了。

所以变量重要性这种方法是属于Wrapper Methods的一种,同时其依赖于具体算法。

看实例:

我现在有这么一个数据集,特征全部是数值,标签是2分类因子:

[图片上传失败...(image-aea94-1667044441336)]

首先我用rpart训练一个决策树模型,得到其变量重要性,代码如下:

rPartMod <- train(Class ~ ., data=trainData, method="rpart")
rpartImp <- varImp(rPartMod)

输出结果如下:

[图片上传失败...(image-73e74d-1667044441336)]

同样的数据,我再考虑另外一个模型,比如说随机森林模型:

rrfMod <- train(Class ~ ., data=trainData, method="RRF")
rrfImp <- varImp(rrfMod, scale=F)

得到结果如下

[图片上传失败...(image-16a946-1667044441336)]

可以看到2个算法给出的特征的重要性排序是不一样的。

lasso法筛选变量

lasso回归的基本思路是给回归方程加一个惩罚项,惩罚作用和系数大小成比例,这么一来将起到的作用就是部分的原来回归系数比较小的特征就给惩罚没了。从而达到了减少特征的作用。在lasso回归中有一个超参λ,越大惩罚越强,越小越弱:

  • When lambda = 0, no parameters are eliminated.
  • As lambda increases, more and more coefficients are set to zero and eliminated & bias increases.
  • When lambda = infinity, all coefficients are eliminated.
  • As lambda decreases, variance increases.

实操:

我现在有特征矩阵如下:

[图片上传失败...(image-b0dc1c-1667044441336)]

总共有62个特征,然后我的结局是同样长度的一个2分类的向量,此时我要进行一个lasso回归筛选一下到底取哪些特征可以更好地预测我的结局,我可以写出如下代码:

cv.lasso <- cv.glmnet(x, y, family='binomial', alpha=1, parallel=TRUE, standardize=TRUE, type.measure='auc')
plot(cv.lasso)

运行代码后可以出图如下:

[图片上传失败...(image-a8e615-1667044441335)]

图的横轴是lasso的超参取值(λ的对数),纵轴是模型的AUC,图中最上面的一排数值是对于的特征个数,可以看到当我们的特征是21个的时候模型的AUC其实是相对较高的,所以其实我们并不需要将所有的特征都纳入到模型中的。

递归式特征消除

递归特征消除Recursive feature elimination (RFE)递归特征消除的主要思想是反复的构建模型(如SVM或者回归模型)然后选出最好的(或者最差的)的特征,其基本原理如下

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容