データ前処理

End-to-End Machine Learning

Joshua Stapleton

Machine Learning Engineer

データ前処理の手順

データセットには:

  • 欠損値
  • 外れ値
  • 不均衡
  • 空の列
  • 重複

前処理では:

  • EDAの洞察に基づく
  • 下流のモデル性能に不可欠
End-to-End Machine Learning

Null / 空値

  • 欠損/スパースな行・列を削除
  • Nullはモデルを壊すことがある
  • 列は df.drop()
  • 行は df.dropna(how='all')
# count missing values
print(df['oldpeak'].isnull().sum())

# Drop empty column(s) and row(s)
columns_dropped = heart_disease_df.drop(['oldpeak'], axis='columns')
rows_and_columns_dropped = columns_dropped.dropna(how='all')
End-to-End Machine Learning

Null / 空値への対処

  • クリーニング/削除はEDA結果に依存

 

  • 欠損が多い列:
    • 列を削除

 

  • 目的変数に欠損:
    • 欠損行を削除
    • または別カテゴリとして扱う
End-to-End Machine Learning

欠損の補完

欠損が少数の場合は?

  • 補完:

    • 代替値で埋める
  • 戦略

    • 平均/中央値で埋める
    • 定数や直前値を使う
# Calculate the mean cholestrol value 
mean_value = heart_disease_df['chol'].mean()

# Fill missing cholestrol values with the mean
heart_disease_df['chol'].fillna(mean_value, inplace=True)
End-to-End Machine Learning

高度な欠損補完

高度な手法:

  • K近傍法
  • SMOTE(少数クラスの合成オーバーサンプリング)
from sklearn.impute import KNNImputer

# Initialize KNNImputer
imputer = KNNImputer(n_neighbors=2, weights="uniform")

# Perform the imputation on your DataFrame
df_imputed['oldpeak'] = imputer.fit_transform(df['oldpeak'])
End-to-End Machine Learning

重複の削除

 

  • データはクリーン・簡潔・情報量豊富に
  • 冗長性は有害
  • 重複はモデルを偏らせ混乱させる
  • 一意IDで行削除の基準を確認

 

# Drop duplicate rows
heart_disease_duplicates_dropped = heart_disease_column_dropped.drop_duplicates()
End-to-End Machine Learning

Passons à la pratique !

End-to-End Machine Learning

Preparing Video For Download...