天天看點

使用R語言進行機器學習特征選擇②

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)