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