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

作者: 柳叶刀与小鼠标 | 来源:发表于2018-10-17 00:09 被阅读34次

    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)
    # 创建task
    train.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)
    

    相关文章

      网友评论

        本文标题:使用R语言进行机器学习特征选择②

        本文链接:https://www.haomeiwen.com/subject/ieozaftx.html