继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

使用R语言进行机器学习特征选择②

慕村9548890
关注TA
已关注
手记 1249
粉丝 227
获赞 989

1.特征工程概述

特征工程其实是一个偏工程的术语,在数据库领域可能叫做属性选择,而在统计学领域叫变量选择,其实是一个意思:即最大限度地从原始数据中提取有用信息以供算法和模型使用,通过寻求最优特征子集等方法使模型预测性能最高。

我们以经典的鸢尾花数据iris为例,分别根据已有的特征选择的框架图,本人结合网络上给出的python代码总结,添加了运用R实现特征选择的方法,来对比两种语言的差异。

1导入数据

data("iris")
# 特征矩阵iris.data <- iris[, -length(iris)]# 目标向量iris.targer <- iris[, length(iris)]

4.2数据预处理

  • 标准化(要求数据符合正态性)

scale(iris.data, center = TRUE, scale = TRUE)# 或者运用BBmisc包中的normalize函数library(BBmisc)
normalize(iris.data)
  • 依据公式构建区间放缩函数

maxmin <- function(col) {
    maxmin <- (col - min(col))/(max(col) - min(col))    return(maxmin)}
maxmin(iris.data)
  • 归一化

此处的归一化是指依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”.归一化后样本各属性的平方和为1.

norm <- function(data) {
    norm = apply(data, 1, function(x) {
        x/sqrt(sum(x^2))
    })
    norm = t(norm)    return(norm)}
norm(iris.data)

标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,转换为标准正态分布。而归一化是将样本的特征值转换到同一量纲下把数据映射到[0,1]区间内,因此区间放缩法是归一化的一种。

Filter法(过滤法)

按照变量内部特征或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数选择特征.与特定的学习算法无关,因此具有较好的通用性,作为特征的预筛选器非常合适。缺点主要是由于算法的评价标准独立于特定的学习算法,所选的特征子集在分类准确率方面通常低于Wrapper方法。

1.方差选择法

计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征.

library(mlr)# 创建tasktrain.task <- makeClassifTask(data = iris, target = "Species")# 查看变量选择可选方法listFilterMethods()# 选择计算方差,进行特征选择var_imp <- generateFilterValuesData(train.task, method = "variance", nselect = 3)
var_imp# 对衡量特征指标进行绘图plotFilterValues(var_imp, feat.type.cols = TRUE, n.show = 3)



作者:夜神moon
链接:https://www.jianshu.com/p/f6f6b0d6fc5c


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP