始める無料で始める

観測数が少ない列を削除する

多くの特徴量エンジニアリングを行った後は、一度立ち止まって作成物を見直すのがよい方法です。カテゴリ変数に対して explode や OneHot Encoding などの自動化手法を使うと、新しい二値特徴量が何百個もできていることがあります。特徴量選択はそれ自体が別コースのテーマですが、データセットの次元数を減らすためにすぐ実践できる手順もあります。

この演習では、観測数が30未満の列を削除します。30は統計的有意性のための一般的な最小観測数です。これより少ないと、単なる偶然により関係が生じ、過学習につながりやすくなります。

NOTE: データはデータフレーム df に用意されています。

この演習はコースの一部です

PySparkで学ぶ特徴量エンジニアリング

コースを見る

演習の手順

  • 二値列のリストを反復するあらかじめ用意された for ループを使い、agg 関数でその列の値の sum を計算します。collect() を使って計算を即時実行し、結果を obs_count に保存します。
  • obs_countobs_threshold と比較します。if 文は、obs_countobs_threshold 以下の場合に true になるようにします。
  • cols_to_remove リストに追加された列を、drop() を使って削除します。* を付けるとリストをアンパックできることを思い出してください。
  • PySpark のデータフレームの開始時と終了時の形状を、レコード数は count()、列数は df.columns または new_df.columns に対する len() で出力してください。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

obs_threshold = 30
cols_to_remove = list()
# Inspect first 10 binary columns in list
for col in binary_cols[0:10]:
  # Count the number of 1 values in the binary column
  obs_count = df.____({col: ____}).____()[0][0]
  # If less than our observation threshold, remove
  if ____ ____ ____:
    cols_to_remove.append(col)
    
# Drop columns and print starting and ending dataframe shapes
new_df = df.____(*____)

print('Rows: ' + str(df.____()) + ' Columns: ' + str(____(df.____)))
print('Rows: ' + str(new_df.____()) + ' Columns: ' + str(____(new_df.____)))
コードを編集して実行