開始使用免費開始

移除近乎零變異的預測變數

就像你在影片中看到的,在接下來的練習中,你會使用 blood-brain 資料集。這是一個生化領域的資料集,任務是要為一組生化化合物預測下列值:

log((concentration of compound in brain) /
      (concentration of compound in blood))

這個指標量化了化合物通過血腦障壁(blood-brain barrier)的能力,對於理解該障壁的生物學特性很有幫助。

這個資料集有個有趣之處:它包含很多變數,而其中許多變數的變異極低。這代表這些變數幾乎沒有資訊量,因為它們大多只有單一數值(例如 0)。

所幸,caret 提供了名為 nearZeroVar() 的工具函式,可在建模前移除這類變數以節省時間。

nearZeroVar() 會接收資料 x,接著查看最常見值與第二常見值的比例 freqCut,以及「不同值」佔所有樣本數的百分比 uniqueCut。預設情況下,caret 使用 freqCut = 19uniqueCut = 10,這算是相當保守。我偏好更積極一點,在呼叫 nearZeroVar() 時使用 freqCut = 2uniqueCut = 20

本練習屬於課程

使用 R 的 caret 進行 Machine Learning

檢視課程

練習說明

bloodbrain_xbloodbrain_y 已載入到你的工作空間。

  • 透過在 blood-brain 資料集上執行 nearZeroVar(),找出近乎零變異的預測變數。將結果存成名為 remove_cols 的物件。在呼叫 nearZeroVar() 時使用 freqCut = 2uniqueCut = 20
  • 使用 names() 建立一個包含 bloodbrain_x 所有欄位名稱的向量。將它命名為 all_cols
  • 建立新的資料框 bloodbrain_x_small,將近乎零變異的變數移除。使用 setdiff() 篩選出你要保留的欄位名稱(也就是你不想移除的那些)。

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

# Identify near zero variance predictors: remove_cols
remove_cols <- nearZeroVar(___, names = TRUE, 
                           freqCut = ___, uniqueCut = ___)

# Get all column names from bloodbrain_x: all_cols


# Remove from data: bloodbrain_x_small
bloodbrain_x_small <- bloodbrain_x[ , setdiff(___, ___)]
編輯並執行程式碼