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)