移除近乎零變異的預測變數
就像你在影片中看到的,在接下來的練習中,你會使用 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 = 19 與 uniqueCut = 10,這算是相當保守。我偏好更積極一點,在呼叫 nearZeroVar() 時使用 freqCut = 2 與 uniqueCut = 20。
本練習屬於課程
使用 R 的 caret 進行 Machine Learning
練習說明
bloodbrain_x 與 bloodbrain_y 已載入到你的工作空間。
- 透過在 blood-brain 資料集上執行
nearZeroVar(),找出近乎零變異的預測變數。將結果存成名為remove_cols的物件。在呼叫nearZeroVar()時使用freqCut = 2與uniqueCut = 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(___, ___)]