機器學(xué)習(xí)專題:特征選擇(R)

載入數(shù)據(jù)

library(readr)

# 載入數(shù)據(jù)
sampleTraits<-read_csv("2-datTraits_95.csv", col_names = T) 
#datExpr1<-read_csv("6-DEGset-95_DEseq_miRBAse_batch_scale.csv", col_names = T) #用于box
#datExpr2<-read_csv("5-DEGset_95_DEseq_miRBAse_batch.csv", col_names = T)      #用于lasso
#datExpr3<-read_csv("6-DEGset-95_DEseq_miRBAse_batch_scale_final.csv", col_names = T) #用于box
#datExpr4<-read_csv("6-DEGset_95_DEseq_miRBAse_batch_final.csv", col_names = T)      #用于lasso
datExpr5<-read_csv("6-DEGset_95_DEseq_miRBAse_batch_final_log2fc.csv", col_names = T)      #用于lasso

datExpr<-datExpr5 #**************************
dim(datExpr)

# 矩陣轉(zhuǎn)置
miR<-as.vector(unlist(datExpr[,1]))
datExpr_t<-t(datExpr[,-1])
#datExpr_t[c(1:3),c(1:3)] 
colnames(datExpr_t)<-miR 
datExpr_t[c(1:3),c(1:3)]  # 列為樣本抛蚁,行為變量

1.封裝法

#遞歸特征消除(Recursive Feature Elimination)
library(caret)
#library(gam)
data.x<-datExpr_t[,c(1:dim(datExpr_t)[2])] #矩陣格式
data.outcome<-factor(sampleTraits$Diagnosis, level = c('ASD', 'CTL')) # $用于列表

set.seed(123)
filter1<-rfe(x = data.x,
             y = data.outcome,
             sizes = seq(5,16,1), #sizes:通過一個整數(shù)向量钉跷,指定需要保留的特征數(shù)量
             #rfFuncs(隨機森林)爷辙,lmFuncs(線性回歸)膝晾,nbFuncs(樸素貝葉斯)务冕,treebagFuncs(裝袋決策樹)时甚,caretFuncs(自定義的訓(xùn)練模型)             
             rfeControl = rfeControl(functions = rfFuncs, 
                                     method = 'cv', #Cross-Validated (10 fold)
                                     repeats = 5)) #抽嚷嵬恕?組樣本
plot(filter1, type=c("g", "o"))
print(filter1)
predictors(filter1)

2.LASSO回歸

# Lasso全名The leastAbsolute shrinkage and Selectionator operator(最小絕對(值)收縮和變量選擇)
library(glmnet)
set.seed(123)
filter2<-cv.glmnet(x = data.x,
                   y = data.outcome,
                   family='binomial', #可選gaussian一維連續(xù)因變量滋戳,binomial二元離散因變量
                   nfolds=5, #默認為10
                   type.measure = "auc") #可選deviance啥刻,mse可帽,mae,class
filter3<-glmnet(x = data.x,
                y = data.outcome,
                family='binomial')
plot(filter2);plot(filter3, xvar = 'lambda', label=TRUE)

filter2$lambda.min #最佳lambda值
filter2$lambda.1se #$lambda.1se#指在lambda.min一個標準差范圍內(nèi)最簡模型的lambda值钝满。

filter2.coef.lambda.1se<-coef(filter2, s=filter2$lambda.1se)
filter2.coef.lambda.1se #篩后指標
filter2.1se.out<-filter2.coef.lambda.1se[which(filter2.coef.lambda.1se != 0),]
filter2.1se.out<-round(filter2.1se.out, 4) #保留小數(shù)位數(shù)
filter2.1se.out;length(filter2.1se.out)

3.隨機森林法(袋外誤差(OOB))

## https://blog.csdn.net/wishchin/article/details/52515516
if(!suppressWarnings(require(varSelRF)))
{
  install.packages('varSelRF')
  require(varSelRF)
}

setwd('C:/Users/xllix/Documents/WORK/2019論文準備/1-論文初稿/2-results')
library(varSelRF)
library(readr)
set.seed(123)
rf.vs1<-varSelRF(data.x, 
                 data.outcome, 
                 c.sd = 1, mtryFactor = 1, 
                 ntree = 5000,ntreeIterat = 2000, #默認值500
                 vars.drop.num = NULL, vars.drop.frac = 0.1,
                 whole.range = TRUE, recompute.var.imp = FALSE, verbose = FALSE,
                 returnFirstForest = TRUE, fitted.rf = NULL, keep.forest = FALSE)
rf.vs1
select.history<-rf.vs1$selec.history;names(select.history)
select.history[select.history$Number.Variables == rf.vs1$best.model.nvars,]

selected.vars<-rf.vs1$selected.vars

plot(rf.vs1)
dev.off()
write.table(select.history,"7.4-for_svm_oob_log2fc2.txt", row.names = F, quote = F)

4.特征匯總

box<-predictors(filter1)
lasso<-row.names(as.data.frame(filter2.1se.out))[-1]
oob<-selected.vars

sect<-Reduce(intersect, list(box, oob, lasso));length(sect) #7

print('封裝法/遞歸特征消除');box
print('LASSO回歸');lasso
print('隨機森林oob');oob
print('取交集');sect
write.table(box, "7.4-for_svm_box_log2fc.csv",row.names = F) #都不用scale
write.table(lasso, "7.4-for_svm_lasso_log2fc_5fc.csv",row.names = F)
write.table(oob, "7.4-for_svm_oob_log2fc.csv",row.names = F)

write.csv(sect, "7.5-for_svm_sec_log2fc.csv",row.names = F)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末路鹰,一起剝皮案震驚了整個濱河市收厨,隨后出現(xiàn)的幾起案子诵叁,更是在濱河造成了極大的恐慌拧额,老刑警劉巖侥锦,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件快毛,死亡現(xiàn)場離奇詭異祸泪,居然都是意外死亡建芙,警方通過查閱死者的電腦和手機禁荸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來映砖,“玉大人邑退,你說我怎么就攤上這事◎谄撸” “怎么了飒硅?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵三娩,是天一觀的道長雀监。 經(jīng)常有香客問我滔悉,道長回官,這世上最難降的妖魔是什么歉提? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮废离,結(jié)果婚禮上蜻韭,老公的妹妹穿的比我還像新娘肖方。我一直安慰自己,他們只是感情好析桥,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布埋虹。 她就那樣靜靜地躺著吨岭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪峦树。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天急灭,我揣著相機與錄音谷遂,去河邊找鬼肾扰。 笑死,一個胖子當(dāng)著我的面吹牛窗悯,可吹牛的內(nèi)容都是我干的蒋院。 我是一名探鬼主播欺旧,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼震肮!你這毒婦竟也來了钙蒙?” 一聲冷哼從身側(cè)響起躬厌,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤鸿捧,失蹤者是張志新(化名)和其女友劉穎匙奴,沒想到半個月后泼菌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體哗伯,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡焊刹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贺奠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敞嗡。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡喉悴,死狀恐怖箕肃,靈堂內(nèi)的尸體忽然破棺而出勺像,到底是詐尸還是另有隱情吟宦,我是刑警寧澤涩维,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布蜗侈,位于F島的核電站踏幻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏夭苗。R本人自食惡果不足惜听诸,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望须妻。 院中可真熱鬧荒吏,春花似錦、人聲如沸瞧挤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尝丐。三九已至,卻和暖如春远荠,著一層夾襖步出監(jiān)牢的瞬間譬淳,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工蛤迎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留替裆,地道東北人。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像把鉴,于是被迫代替她去往敵國和親庭砍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354