特徵選擇(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...