两个月没更新了,没有其它理由,就是懒惰,间接持续性的懒惰,一直持续了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.插补

  • 随机森林插补

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

首先是将缺失的连续值用变量均值,分类值用众数插补好,然后将数据切为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).

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分类因子:

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

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

输出结果如下:

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

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

得到结果如下

可以看到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.

实操:

我现在有特征矩阵如下:

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

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

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

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

递归式特征消除

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

就是首先用所有的特征来拟合模型,然后对特征进行排序,去掉最垃圾的特征后再次拟合模型,并对模型进行排序,再去掉最垃圾的特征,这样循环下来,模型表现最好的时候对应的特征就是最后留下的特征。和倒推法筛选变量的思想有点类似的。

之前有给大家写过模型外部验证的重要性,思考这么一个问题,在使用rfe的时候决定特征的标准依然是模型的表现,我们知道模型表现是受样本影响的,所以整个的rfe过程依然需要在交叉验证中考虑:

就是我们得在交叉验证中去考虑模型表现,什么意思呢,就是将整个rfe过程封装在resampling中,这样最大限度避免模型表现的随机性。

实例操练

我现在有数据如下:

这个数据集有303个观测,14个变量,其中一个是我们要预测的标签。所以其实我们是有13个可用的特征的,我现在就用递归特征消除看看,多少个特征适合模型。

做rfe需要用到的函数为rfe,其需要的参数如下:

其中有两个参数比较重要,一个是需要参数的个数,另一个是选择参数的算法。

算法是在rfeControl参数中设置的,我们可以设置的参数算法体现在functions中

functions选择用什么样的模型进行自变量排序,可以选择的有rfFuncs(随机森林),lmFuncs(线性回归),nbFuncs(朴素贝叶斯,只能用于分类),treebagFuncs(装袋决策树),ldaFuncs(只能用于分类),lrFuncs,caretFuncs等等。

比如我现在使用随机森林作为变量筛选的模型,我就可以写出如下代码:

control <- rfeControl(functions = rfFuncs, # random forest
method = "repeatedcv", # repeated cv
repeats = 5, # number of repeats
number = 10) # number of folds
result_rfe1 <- rfe(x = x_train,
y = y_train,
sizes = c(1:13),
rfeControl = control)

运行后得到结果:

可以看到我们分别尝试了使用1到13个这么多的变量进行建模,每个数量特征表现都有列出,当模型中特征数量为8的时候,整体的AUC最好,然后最重要的5个特征是哪5个结果中都有提示。具体的8个特征使用predictors()函数就可以调出来。

实例操练2

接下来给大家写逐步法筛选变量的操作,我现在有数据如下:

我要预测的变量是Fertility,其余全是我的备选特征,此时使用逐步法的代码如下:

train.control <- trainControl(method = "cv", number = 10)
step.model <- train(Fertility ~., data = swiss, method = "leapBackward", tuneGrid = data.frame(nvmax = 1:5), trControl = train.control )
step.model$results

运行后得到结果如下:

可以看到在模型中特征数量为4的时候模型的R方最大,rmse最小,所以4个特征的时候模型的表现最好,同时运行step.model$bestTune也可以得到最好的模型是4个特征的模型,运行下面的代码即可以得到具体的使得模型表现最好的特征:

summary(step.model$finalModel)

从图中可以看到,我们将Examination拿掉之后模型的表现是最好的。

上面介绍的方法都可以达到特征选择的目的,以上就是给大家介绍的特征选择的方法,大家自行选择使用。

R机器学习:特征工程与特征选择的介绍的更多相关文章

  1. 机器学习-特征工程-Missing value和Category encoding

    好了,大家现在进入到机器学习中的一块核心部分了,那就是特征工程,洋文叫做Feature Engineering.实际在机器学习的应用中,真正用于算法的结构分析和部署的工作只占很少的一部分,相反,用于特 ...

  2. 机器学习-特征工程-Feature generation 和 Feature selection

    概述:上节咱们说了特征工程是机器学习的一个核心内容.然后咱们已经学习了特征工程中的基础内容,分别是missing value handling和categorical data encoding的一些 ...

  3. Machine Learning-特征工程之特征选择

    特征工程之特征选择 目录 简介 1 Filter(过滤式选择) 1.1 移除低方差特征(variance threshold) 1.2 信息增益(information gain) 1.3 单变量特征 ...

  4. 2022年Python顶级自动化特征工程框架⛵

    作者:韩信子@ShowMeAI 机器学习实战系列:https://www.showmeai.tech/tutorials/41 本文地址:https://www.showmeai.tech/artic ...

  5. 机器学习实战基础(十七):sklearn中的数据预处理和特征工程(十)特征选择 之 Embedded嵌入法

    Embedded嵌入法 嵌入法是一种让算法自己决定使用哪些特征的方法,即特征选择和算法训练同时进行.在使用嵌入法时,我们先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据权值系数从大 ...

  6. 机器学习实战基础(十五):sklearn中的数据预处理和特征工程(八)特征选择 之 Filter过滤法(二) 相关性过滤

    相关性过滤 方差挑选完毕之后,我们就要考虑下一个问题:相关性了. 我们希望选出与标签相关且有意义的特征,因为这样的特征能够为我们提供大量信息.如果特征与标签无关,那只会白白浪费我们的计算内存,可能还会 ...

  7. 机器学习实战基础(十四):sklearn中的数据预处理和特征工程(七)特征选择 之 Filter过滤法(一) 方差过滤

    Filter过滤法 过滤方法通常用作预处理步骤,特征选择完全独立于任何机器学习算法.它是根据各种统计检验中的分数以及相关性的各项指标来选择特征 1 方差过滤 1.1 VarianceThreshold ...

  8. 机器学习实战基础(十三):sklearn中的数据预处理和特征工程(六)特征选择 feature_selection 简介

    当数据预处理完成后,我们就要开始进行特征工程了. 在做特征选择之前,有三件非常重要的事:跟数据提供者开会!跟数据提供者开会!跟数据提供者开会!一定要抓住给你提供数据的人,尤其是理解业务和数据含义的人, ...

  9. 机器学习实战基础(十八):sklearn中的数据预处理和特征工程(十一)特征选择 之 Wrapper包装法

    Wrapper包装法 包装法也是一个特征选择和算法训练同时进行的方法,与嵌入法十分相似,它也是依赖于算法自身的选择,比如coef_属性或feature_importances_属性来完成特征选择.但不 ...

  10. 什么是机器学习的特征工程?【数据集特征抽取(字典,文本TF-Idf)、特征预处理(标准化,归一化)、特征降维(低方差,相关系数,PCA)】

    2.特征工程 2.1 数据集 2.1.1 可用数据集 Kaggle网址:https://www.kaggle.com/datasets UCI数据集网址: http://archive.ics.uci ...

随机推荐

  1. 均值回归策略在A股ETF市场获利的可能性

    如何在股票市场获利 曾经有人告诉我一个在股票市场赚钱的秘诀,只要掌握这个秘诀,赚钱就像捡钱一样容易.他说:这个秘诀其实很简单,就是在股票价格低的时候买入,在价格高的时候卖出. 啧啧,不愧是秘诀,明明是 ...

  2. 北京智和信通 | 无人值守的IDC机房动环综合监控运维

    随着信息技术的发展和全面应用,数据中心机房已成为各大企事业单位维持业务正常运营的重要组成部分,网络设备.系统.业务应用数量与日俱增,规模逐渐扩大,一旦机房内的设备出现故障,将对数据处理.传输.存储以及 ...

  3. linux内核 快速分片,技术|Linux slabtop命令——显示内核片缓存信息

    Linux内核需要为临时对象如任务或者设备结构和节点分配内存,缓存分配器管理着这些类型对象的缓存.现代Linux内核部署了该缓存分配器以持有缓存,称之为片.不同类型的片缓存由片分配器维护.本文集中讨论 ...

  4. 直播预告 | YashanDB 2023年度发布会正式定档11月8日,邀您共同见证国产数据库发展实践!

    11月8日,YashanDB 2023年度发布会将于云端直播开启,发布会以 「惟实·励新」 为主题,邀请企业用户.合作伙伴.广大开发者共同见证全新产品与解决方案.届时发布会将在墨天轮社区同步进行,欢迎 ...

  5. query和params的区别

    2者都是编程式路由跳转用来存放传递数据的位置,query使用path引入,数据显示在地址栏上,params使用name引入,传递的数据在页面看不见 :

  6. 9. JS的数据类型,区别

    js 有2大数据类型分类 : 基本数据类型: 1. string 字符串 使用单.双引号包裹,或者使用反引号包裹 2. number 数字类型 3. boolean 布尔值 true false 4. ...

  7. 云原生爱好者周刊:Dapr 成为 CNCF 孵化项目

    云原生一周动态要闻: Dapr 加入 CNCF 孵化器 Knative 1.0 发布 Canonical 开始提供针对 Intel CPU 优化的 Ubuntu 图像 Longhorn 为 CNCF ...

  8. 删除 KubeSphere 中一直卡在 Terminating 的 Namespace

    介绍 最近一直在玩 EKS(Elastic Kubernetes Service -- Amazon EKS) 和 KubeSphere. 因为之前没有使用过 EKS 和 KubeSphere,所以这 ...

  9. 云原生周刊:12 个容易忽略的 Kubernetes 安装错误

    文章推荐 12 个容易忽略的 Kubernetes 安装错误 这篇文章总结了 12 个在 Kubernetes 安装过程中容易忽略但却必须注意的错误.这些错误包括: 没有正确安装 kubectl. 没 ...

  10. AWS服务 简介

    1 Amazon Elastic Compute Cloud (Amazon EC2) 是一种提供可调节计算容量的 Web 服务 – 简单来说,就是 Amazon 数据中心里的服务器 – 您可以使用它 ...