<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          機器學習第18篇 - Boruta特征變量篩選(2)

          共 720字,需瀏覽 2分鐘

           ·

          2021-02-25 22:18

          前面(機器學習第17篇 - 特征變量篩選(1))評估顯示Boruta在生物數(shù)據(jù)中具有較高的特征變量選擇準確度,下面就具體看下如何應用Boruta進行特征變量選擇。

          Boruta算法概述

          Boruta得名于斯拉夫神話中的樹神,可以識別所有對分類或回歸有顯著貢獻的變量。其核心思想是統(tǒng)計比較數(shù)據(jù)中真實存在的特征變量與隨機加入的變量(也稱為影子變量)的重要性。

          1. 初次建模時,把原始變量拷貝一份作為影子變量。

          2. 原始變量的值隨機化后作為對應影子變量的值 (隨機化就是打亂原始變量值的順序)。

          3. 使用隨機森林建模并計算每個變量的重要性得分。

          4. 對于每一個真實特征變量,統(tǒng)計檢驗其與所有影子變量的重要性最大值的差別。

            重要性顯著高于影子變量的真實特征變量定義為重要。

            重要性顯著低于影子變量的真實特征變量定義為不重要。

          5. 所有不重要的變量和影子變量移除。

            基于新變量構(gòu)成的數(shù)據(jù)集再次重復剛才的建模和選擇過程,直到所有變量都被分類為重要不重要,或達到預先設置的迭代次數(shù)。

          其優(yōu)點是:

          1. 同時適用于分類問題和回歸問題

          2. 考慮多個變量的關系信息

          3. 改善了常用于變量選擇的隨機森林變量重要性計算方式

          4. 會輸出所有與模型性能相關的變量而不是只返回一個最小變量集合

          5. 可以處理變量的互作

          6. 可以規(guī)避隨機森林自身計算變量重要性的隨機波動性問題和不能計算顯著性的問題

          Boruta算法實戰(zhàn)

          # install.packages("Boruta")library(Boruta)
          set.seed(1)
          boruta <- Boruta(x=train_data, y=train_data_group, pValue=0.01, mcAdj=T,
          maxRuns=300)
          boruta
          ## Boruta performed 299 iterations in 1.452285 mins.
          ## 54 attributes confirmed important: AC002073_cds1_at, D13633_at,
          ## D31887_at, D55716_at, D78134_at and 49 more;
          ## 6980 attributes confirmed unimportant: A28102, AB000114_at,
          ## AB000115_at, AB000220_at, AB000381_s_at and 6975 more;
          ## 36 tentative attributes left: D31886_at, D43950_at, D79997_at,
          ## HG2279.HT2375_at, HG417.HT417_s_at and 31 more;

          速度還是可以的(尤其是跟后面要介紹的 RFE 的速度比起來)

          boruta$timeTaken
          ## Time difference of 1.452285 mins

          查看下變量重要性鑒定結(jié)果(實際上面的輸出中也已經(jīng)有體現(xiàn)了),54個重要的變量,36個可能重要的變量 (tentative variable, 重要性得分與最好的影子變量得分無統(tǒng)計差異),6,980個不重要的變量。

          table(boruta$finalDecision)
          ## 
          ## Tentative Confirmed Rejected
          ## 36 54 6980
          boruta$finalDecision[boruta$finalDecision=="Confirmed"]
          ## AC002073_cds1_at        D13633_at        D31887_at        D55716_at 
          ## Confirmed Confirmed Confirmed Confirmed
          ## D78134_at D82348_at D87119_at HG2874.HT3018_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## HG4074.HT4344_at HG4258.HT4528_at J02645_at J03909_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## K02268_at L17131_rna1_at L27071_at L42324_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## M10901_at M57710_at M60830_at M63138_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## M63835_at U14518_at U23143_at U28386_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## U37352_at U38896_at U56102_at U59309_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## U63743_at U68030_at X01060_at X02152_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## X14850_at X16983_at X17620_at X56494_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## X62078_at X67155_at X67951_at X69433_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## Z11793_at Z21966_at Z35227_at Z96810_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## U16307_at HG3928.HT4198_at V00594_s_at X03689_s_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## M14328_s_at X91911_s_at X12530_s_at X81836_s_at
          ## Confirmed Confirmed Confirmed Confirmed
          ## HG1980.HT2023_at M94880_f_at
          ## Confirmed Confirmed
          ## Levels: Tentative Confirmed Rejected

          繪制Boruta算法運行過程中各個變量的重要性得分的變化 (綠色是重要的變量,紅色是不重要的變量,藍色是影子變量,黃色是Tentative變量)。

          這個圖也可以用來查看是否有必要增加迭代的次數(shù)以便再次確認Tentative變量中是否有一部分為有意義的特征變量。從下圖來看,黃色變量部分隨著迭代還是有部分可能高于最高值,可以繼續(xù)嘗試增加迭代次數(shù)。

          Boruta::plotImpHistory(boruta)

          繪制鑒定出的變量的重要性。變量少了可以用默認繪圖,變量多時繪制的圖看不清,需要自己整理數(shù)據(jù)繪圖。

          # ?plot.Boruta# plot(boruta)

          定義一個函數(shù)提取每個變量對應的重要性值。

          library(dplyr)
          boruta.imp <- function(x){
          imp <- reshape2::melt(x$ImpHistory, na.rm=T)[,-1]
          colnames(imp) <- c("Variable","Importance")
          imp <- imp[is.finite(imp$Importance),]

          variableGrp <- data.frame(Variable=names(x$finalDecision),
          finalDecision=x$finalDecision)

          showGrp <- data.frame(Variable=c("shadowMax", "shadowMean", "shadowMin"),
          finalDecision=c("shadowMax", "shadowMean", "shadowMin"))

          variableGrp <- rbind(variableGrp, showGrp)

          boruta.variable.imp <- merge(imp, variableGrp, all.x=T)

          sortedVariable <- boruta.variable.imp %>% group_by(Variable) %>%
          summarise(median=median(Importance)) %>% arrange(median)
          sortedVariable <- as.vector(sortedVariable$Variable)


          boruta.variable.imp$Variable <- factor(boruta.variable.imp$Variable, levels=sortedVariable)

          invisible(boruta.variable.imp)
          }
          boruta.variable.imp <- boruta.imp(boruta)

          head(boruta.variable.imp)
          ##   Variable Importance finalDecision
          ## 1 A28102 0 Rejected
          ## 2 A28102 0 Rejected
          ## 3 A28102 0 Rejected
          ## 4 A28102 0 Rejected
          ## 5 A28102 0 Rejected
          ## 6 A28102 0 Rejected

          只繪制Confirmed變量。

          library(YSX)

          sp_boxplot(boruta.variable.imp, melted=T, xvariable = "Variable", yvariable = "Importance",
          legend_variable = "finalDecision", legend_variable_order = c("shadowMax", "shadowMean", "shadowMin", "Confirmed"),
          xtics_angle = 90)

          提取重要的變量 (可能重要的變量可提取可不提取)

          boruta.finalVars <- data.frame(Item=getSelectedAttributes(boruta, withTentative = F), Type="Boruta")

          也可以使用TentativeRoughFix函數(shù)進一步計算。這一步的計算比較粗糙,根據(jù)重要性的值高低判斷Tentative類型的變量是否要為ConfirmedRejected。

          Tentative.boruta <- TentativeRoughFix(boruta)


          機器學習系列教程


          從隨機森林開始,一步步理解決策樹、隨機森林、ROC/AUC、數(shù)據(jù)集、交叉驗證的概念和實踐。


          文字能說清的用文字、圖片能展示的用、描述不清的用公式、公式還不清楚的寫個簡單代碼,一步步理清各個環(huán)節(jié)和概念。


          再到成熟代碼應用、模型調(diào)參、模型比較、模型評估,學習整個機器學習需要用到的知識和技能。

          1. 機器學習算法 - 隨機森林之決策樹初探(1)

          2. 機器學習算法-隨機森林之決策樹R 代碼從頭暴力實現(xiàn)(2)

          3. 機器學習算法-隨機森林之決策樹R 代碼從頭暴力實現(xiàn)(3)

          4. 機器學習算法-隨機森林之理論概述

          5. 隨機森林拖了這么久,終于到實戰(zhàn)了。先分享很多套用于機器學習的多種癌癥表達數(shù)據(jù)集 https://file.biolab.si/biolab/supp/bi-cancer/projections/。

          6. 機器學習算法-隨機森林初探(1)

          7. 機器學習 模型評估指標 - ROC曲線和AUC值

          8. 機器學習 - 訓練集、驗證集、測試集

          9. 機器學習 - 隨機森林手動10 折交叉驗證

          10. 一個函數(shù)統(tǒng)一238個機器學習R包,這也太贊了吧

          11. 基于Caret和RandomForest包進行隨機森林分析的一般步驟 (1)

          12. Caret模型訓練和調(diào)參更多參數(shù)解讀(2)

          13. 機器學習相關書籍分享

          14. 基于Caret進行隨機森林隨機調(diào)參的4種方式

          15. 送你一個在線機器學習網(wǎng)站,真香!

          16. UCI機器學習數(shù)據(jù)集

          17. 機器學習第17篇 - 特征變量篩選(1)



          瀏覽 170
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩欧美国产黄色电影 | 69日逼网 | 亚洲无码黄色片 | 西西午夜无码视频色欲 | 操日本逼|