移除近零方差的预测变量
正如视频中所示,在接下来的练习中,您将使用 blood-brain 数据集。该数据集是一个生化数据集,任务是为一组生化化合物预测下面这个值:
log((concentration of compound in brain) /
(concentration of compound in blood))
这个值定量衡量化合物跨越血脑屏障的能力,有助于理解该屏障的生物学特性。
这个数据集的一个有趣之处在于,它包含了许多变量,其中不少变量的方差极低。这意味着这些变量所含的信息很少,因为它们大多只有单一取值(例如 0)。
幸运的是,caret 提供了一个名为 nearZeroVar() 的实用函数,可以移除此类变量,从而在建模时节省时间。
nearZeroVar() 接收数据 x,然后考察最常见取值与第二常见取值的比率 freqCut,以及不同取值在总样本数中的百分比 uniqueCut。默认情况下,caret 使用 freqCut = 19 和 uniqueCut = 10,这相对保守。我更偏向稍激进一些,在调用 nearZeroVar() 时使用 freqCut = 2 和 uniqueCut = 20。
本练习是课程的一部分
在 R 中使用 caret 的机器学习
练习说明
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(___, ___)]