开始使用免费开始使用

移除近零方差的预测变量

正如视频中所示,在接下来的练习中,您将使用 blood-brain 数据集。该数据集是一个生化数据集,任务是为一组生化化合物预测下面这个值:

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

这个值定量衡量化合物跨越血脑屏障的能力,有助于理解该屏障的生物学特性。

这个数据集的一个有趣之处在于,它包含了许多变量,其中不少变量的方差极低。这意味着这些变量所含的信息很少,因为它们大多只有单一取值(例如 0)。

幸运的是,caret 提供了一个名为 nearZeroVar() 的实用函数,可以移除此类变量,从而在建模时节省时间。

nearZeroVar() 接收数据 x,然后考察最常见取值与第二常见取值的比率 freqCut,以及不同取值在总样本数中的百分比 uniqueCut。默认情况下,caret 使用 freqCut = 19uniqueCut = 10,这相对保守。我更偏向稍激进一些,在调用 nearZeroVar() 时使用 freqCut = 2uniqueCut = 20

本练习是课程的一部分

在 R 中使用 caret 的机器学习

查看课程

练习说明

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(___, ___)]
编辑并运行代码