R語言筆記之特徵工程

1.特徵構建(藝術成分最高)

特徵構建指的是從原始數據中人工地構建新的特徵
它需要我們從原始數據中找出一些具有物理意義的特徵

2.特徵提取

它是一項用不同變量的組合代替原變量的技術
它的目的是自動地構建新的特徵,將原始特徵轉換爲一組具有明顯物理意義或者統計意義的特徵。
下面是3個常用的對數據降維的特徵提取方法
(1)主成分分析(PCA)
(2)探索性因子分析(EFA)
(3)高維標度化(MDS)

3.特徵選擇

在建立統計模型常常會有以下幾個問題
a.模型擬合情況如何?
b.模型在新樣本上預測的情況如何?
c.所有的自變量都有助於解釋因變量(y),還是隻有其中部分重要的自變量?
以上三個問題的共同前提是要先有一個評判模型的好與壞的標準
特徵選擇的主要目的是刪除無信息變量或冗餘變量,從而達到降維的效果。
特徵選擇的方法主要可以分成3類:
(1)過濾法(filter)

過濾法主要側重於單個特徵與目標變量的關係,在建模前對每個特徵進行評估,選擇“重要”的變量進行建模。
這裏所說的重要性指的是一個量化預測變量和結果變量之間關係的粗略度量。
如果缺失某特徵導致模型表現大幅度下降,表明變量重要性大。
該方法優點是計算時間上較高效。
該方法缺點是傾向於選擇冗餘的特徵,因爲他們不考慮特徵之間的相關性,如果某一個特徵重要性較高,所有和該特徵高相關的特徵重要性都會很高。
a.特徵重要性度量
特徵重要性度量的方式和其類型有關,分類型和連續型特徵度量差別很大
這裏我們按照不同的特徵和因變量類型來介紹相應的常用度量。
a1.-因變量和特徵都是數值型,最常用的是簡單相關性統計量。
Pearson相關係數衡量線性相關,Spearman相關係數衡量曲線相關
Kendall相關係數衡量兩個變量觀測排序的一致性
基礎包中的cor()函數可以計算這些相關性。
-用一個相關性度量有時會丟失很多信息,可以用局部加權迴歸模型(Loess),該方法對一系列局部區域樣本應用多項式迴歸。這種方法可以有效得到平滑的迴歸趨勢。
基礎包中的loess()函數可以進行Loess平滑。
Lattice包中的xyplot()以及ggplot2包可以很方便對其進行可視化。
a2:對於特徵是數值型,因變量是分類型的情況,可以使用ROC曲線下面積量化特徵和因變量的相關性。
a3:如果特徵和因變量都是分類型,有幾種用於測量變量重要性的方法。
對於二分類預測變量,一個有效的方式是使用讓步比。它表明從預測變量的第一類到預測變量的第二類,對應時間發生比的變化。
可以用Fisher確切檢驗來測量預測變量和相應結果類別的聯繫。
b.Relief算法
Relief爲一系列算法,和其他重要性衡量的方法類似,該算法給出的是一個重要性分值,將分值低於某個閾值的特徵移除。
這裏可以將閾值當作調優參數通過劃分測試集合訓練集,基於一個模型表現的度量進行選擇。
原始的Relief算法的基本原理是通過特徵對近距離樣本的區分能力來估計重要性。
c.結束

Relief算法的運行時間隨着樣本的抽樣次數m和原始特徵個數p的增加線性地增加,因而運行效率非常高。
Relief統計量的計算可以使用CORElearn包,attrEval()函數能計算幾個不同版本的Relief值(使用estimator選項),該函數也能用來計算其他分值,如增益比,基尼係數等。

> library(CORElearn)
Warning message:
程輯包‘CORElearn’是用R版本3.4.3 來建造的 
> infoCore(what="attrEvalReg")
[1] "RReliefFequalK"      "RReliefFexpRank"     "RReliefFbestK"       "RReliefFwithMSE"     "MSEofMean"          
[6] "MSEofModel"          "MAEofModel"          "RReliefFdistance"    "RReliefFsqrDistance"
> infoCore(what="attrEval")
 [1] "ReliefFequalK"      "ReliefFexpRank"     "ReliefFbestK"       "Relief"             "InfGain"            "GainRatio"         
 [7] "MDL"                "Gini"               "MyopicReliefF"      "Accuracy"           "ReliefFmerit"       "ReliefFdistance"   
[13] "ReliefFsqrDistance" "DKM"                "ReliefFexpC"        "ReliefFavgC"        "ReliefFpe"          "ReliefFpa"         
[19] "ReliefFsmp"         "GainRatioCost"      "DKMcost"            "ReliefKukar"        "MDLsmp"             "ImpurityEuclid"    
[25] "ImpurityHellinger"  "UniformDKM"         "UniformGini"        "UniformInf"         "UniformAccuracy"    "EqualDKM"          
[31] "EqualGini"          "EqualInf"           "EqualHellinger"     "DistHellinger"      "DistAUC"            "DistAngle"         
[37] "DistEuclid"        
>  

要用置換檢驗觀測到的Relief分值可以使用AppliedPredictiveModeling包中的permuteRelief()函數
重要性分值的置換分佈非常有用,它能夠讓我們直觀的瞭解分值 的隨機性。(lattice::histogram())
標準化後的分值,其代表了觀測到Relief分值(無置換)離置換分佈中心的距離與標註差的比值。

(2)繞封法(wrapper)
它按照一定規律不斷增加或者刪除變量,通過評估不同特徵組合得到的模型擬合結果尋找能夠最優化模型擬合的特徵組合。
其本質是搜索算法,將不同的特徵子集當作輸入,將模型評估結果作爲需要優化的輸出。
a.窮舉法:
通過窮舉得到所有可能的特徵子集,然後找到優化模型擬合的組合。
通過leap包中 regsubsets()函數進行窮舉變量選擇
該方法問題在於:要擬合和評估所有可能的特徵子集,對稍微大一點的p來說計算量過大。同時這種方法也會導致統計問題,如過度擬合和參數估計的高方差。
b.向前選擇法(逐步迴歸)
其從沒有特徵的模型開始逐一加入特徵,直到所有的特徵都在模型當中。
當加入一個變量對模型提升有很大幫助時,就將該變量保留在模型中。
可以繼續使用regsubsets()函數進行向前選擇,只需要設置method=”forward”

c.向後選擇法(逐步迴歸)
和向前選擇不同的是,向後選擇從含有所有p個特徵的全模型開始,然後迭代逐一刪除最 無效的特徵。
向後選擇評估的模型個數和向前選擇一樣,但它無法保證選出迭代模型是全局最優的。
可以用regsubsets()函數進行向後選擇,需要設置method=”backward”

d.雙向選擇法(逐步迴歸)
和向前選擇類似,模型從0個特徵開始向模型里加特徵,但不同的是,每次加入特徵之後算法會重新評估模型,看是否有些特徵可以移除。
R中的MASS包的函數stepAIC()可以根據AIC進行雙向選擇。
此外,基礎包中step()函數也可以用來進行向前,向後和雙向選擇。

(3)內嵌法(embedded)
它是將特徵選擇的過程內嵌入建模的過程,它是學習器自身自主選擇特徵,如Lasso,或者使用決策樹思想的方法。

發佈了53 篇原創文章 · 獲贊 27 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章