1. 学ぶ
  2. /
  3. コース
  4. /
  5. Rで学ぶ caret を使った Machine Learning

Connected

演習

分散がほぼゼロの予測子を削除する

動画で見たとおり、次の一連の演習では blood-brain データセットを使います。これは生化学のデータセットで、以下の値を化合物ごとに予測する課題です。

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

この値は、化合物が血液脳関門を通過できる程度を定量的に表し、その関門の生物学的性質を理解するのに役立ちます。

このデータセットの興味深い点は、変数が非常に多く、その多くが極めて小さい分散しか持たないことです。つまり、ほとんどが単一の値(例: 0)で構成され、情報量がほとんどないということです。

幸い、caret には nearZeroVar() というユーティリティ関数があり、このような変数を除去してモデリングの時間を節約できます。

nearZeroVar() はデータ x を受け取り、最頻値と第2位の頻出値の比 freqCut、および全サンプル数に対する異なる値の割合 uniqueCut を確認します。デフォルトでは、caret はかなり保守的な freqCut = 19 と uniqueCut = 10 を使用します。私はもう少し積極的に、nearZeroVar() を呼び出すときに freqCut = 2 と uniqueCut = 20 を使うのが好みです。

指示

100 XP

bloodbrain_x と bloodbrain_y はワークスペースに読み込まれています。

  • blood-brain データセットに対して nearZeroVar() を実行し、分散がほぼゼロの予測子を特定してください。結果を remove_cols というオブジェクトに保存します。nearZeroVar() の呼び出しでは freqCut = 2 と uniqueCut = 20 を使います。
  • names() を使って、bloodbrain_x のすべての列名を含むベクトルを作成し、all_cols と名付けてください。
  • 分散がほぼゼロの変数を除いた新しいデータフレーム bloodbrain_x_small を作成します。保持したい(つまり削除したくない)列名を抽出するために setdiff() を使ってください。