使用Boruta進行特徵選擇

2021-09-25 17:13:44 字數 2645 閱讀 3474

特徵選擇(feature selsection)是機器學習最重要的步驟,如果說演算法決定了模型的下限,那麼特徵就決定模型的上限;另外,需要注意不是說用盡可能多的特徵得出的模型表現越好,有些時候數個特徵就能得到理想的結果。

boruta採用隨機森林的辦法抽取特徵、打亂特徵順序計算特徵的重要性

#1.安裝特徵選擇包boruta

if(!requirenamespace(

'boruta',quietly=t))

install.packages(

'boruta'

)library(

'boruta'

)# ?boruta #檢視使用方法

#2.理解資料

if(!requirenamespace(

'mlbench',quietly=t))

install.packages(

'mlbench'

)library(

'mlbench'

) data(

'ozone'

)#載入mlbench的資料集ozone

help(ozone)

#檢視資料集內容

#這是乙份洛杉磯在2023年臭氧汙染的資料,資料框格式,366個觀測值(每乙個觀測值即是1天),13個變數(包括第幾天,每天中最大的1小時平均臭氧量、風速、濕度、溫度、能見度等)。想要研究的問題就是如何**日最大臭氧量。

summary(ozone)

#每個特徵的五分位數統計

rawdim<-dim(ozone)

#檢視有多少行多少列資料

head(ozone)

#檢視前10行資料,發現在7、8、9等列存在缺失值

ozone <- na.omit(ozone)

#刪掉含有缺失值的觀測值(行),只要存在缺失值就去掉(na>=1);對於空值,可以先賦值給na,再按此法處理

head(ozone)

#檢查去掉缺失值後的資料

rawdim[

1]-dim(ozone)[1

]#可知去掉了163行含有na的缺失值

#3.feature selecton

set.seed(1)

boruta.ozone <- boruta(v4 ~ ., data = ozone, dotrace =

2, maxruns =

500,getimp = getimprfz)

#v4 ~ .,待分析模型的公式,左邊是因變數,右邊是自變數,'.'表示除開因變數列的其他所有列

#data = ozone,公式要分析的資料

#dotrace =2,嘮叨模式,0不嘮叨,3最嘮叨(詳細)

#maxruns = 500,計算importance的最大迭代次數,當要保留暫時屬性時(tentative feature)應提高該值。

#getimp = getimprfz,用來衡量屬性重要性的計算方法,預設使用隨機森林整合平均下降精度的z-scores,該值越大說明該屬性越重要。

boruta.ozone #報告整體決策情況

#str(boruta.ozone) #str()展示boruta資料物件的內部結構

#boruta物件最重要的是finaldecision,包含3個型別:tentative暫時/待定特徵(不足以接受或者拒絕),confirmed接受的特徵,rejected拒絕特徵

#boruta.ozone$finaldecision #檢視每個特徵的最終決定情況(去或留)

#boruta.ozone[["finaldecision"]][["v1"]] #檢視特徵1的(第一列)的決定情況,list取值操作

#boruta.ozone[["imphistory"]] #記錄著每個特徵的重要性得分

write.table(boruta.ozone$finaldecision,'finaldecision.txt',sep=

"\t",quote=f,col.names=f)

plot(boruta.ozone)

#橫軸是feature,縱軸是重要性得分,分越高,說明該特徵越重要,紅色boxplot表示rejected,綠色塊confirmed

#由結果可知,v9,v8,v12即'temperature (degrees f) measured at el monte, ca','temperature (degrees f) measured at sandburg, 'temperature (degrees f) measured at sandburg, ca','inversion base temperature (degrees f) at lax',說明溫度對於**日最大臭氧量影響最大。

#同時會輸出3個額外的表徵,shadowmin,shadmean,shadmax是判別finaldecision的依據

confirmedformula<-getconfirmedformula(boruta.ozone)

#獲得confirmed特徵的公式,用於後續的建模

confirmed.boruta.ozone <- boruta(confirmedformula, data = ozone, dotrace =

2, maxruns =

500,getimp = getimprfz)

confirmed.boruta.ozone #驗證之前的結果

使用決策樹進行特徵選擇

使用決策樹進行特徵選擇 決策樹也是常用的特徵選取方法。使用決策樹集合 如隨機森林等 也可以計算每個特徵的相對重要性。這些重要性能夠輔助進行特徵選擇。該方法主要使用資訊增益率來進行特徵選擇。from sklearn import datasets from sklearn import metrics...

如何進行特徵選擇

前言 理論部分 乙個典型的機器學習任務是通過樣本的特徵來 樣本所對應的值。特徵過多會導致模型過於複雜,從而導致過擬合 而特徵過少則會導致模型過於簡單,從而導致欠擬合。事實上,如果特徵數大於樣本數,那麼過擬合就不可避免。特徵數比較少的時候,我們需要增加特徵。增加特徵方法很多 依照經驗 利用已有演算法提...

實訓專案利用boruta演算法進行實踐

今天利用r語言進行了特徵值的選取,一開始不給力,只出了乙個特徵值。elo。記錄一下。結果 後來修改了一下 就成功了。如下 引入包 library boruta 讀入資料 predictors tag decision integrate nbachara boruta set.seed 77 bor...