欠損値の補完

Machine LearningMachine LearningBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

多くの現実世界のデータセットには欠損値が含まれており、完全な数値データを想定する機械学習アルゴリズムを使用する際に問題を引き起こす可能性があります。このような場合、利用可能なデータを最大限活用するために欠損値を適切に処理することが重要です。一般的な戦略の1つは補完であり、これはデータの既知の部分に基づいて欠損値を埋めることを含みます。

このチュートリアルでは、Pythonの人気のある機械学習ライブラリであるscikit-learnを使用して欠損値を補完するさまざまな戦略を探ります。

VMのヒント

VMの起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebookを使って練習しましょう。

時々、Jupyter Notebookが読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebookの制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labbyにお問い合わせください。セッション後にフィードバックを提供してください。そうすれば、迅速に問題を解決します。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL sklearn(("Sklearn")) -.-> sklearn/DataPreprocessingandFeatureEngineeringGroup(["Data Preprocessing and Feature Engineering"]) ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) sklearn/DataPreprocessingandFeatureEngineeringGroup -.-> sklearn/impute("Impute") ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills sklearn/impute -.-> lab-71131{{"欠損値の補完"}} ml/sklearn -.-> lab-71131{{"欠損値の補完"}} end

必要なモジュールをインポートする

まず、scikit-learnライブラリから必要なモジュールをインポートする必要があります。単変量特徴量の欠損値補完にはSimpleImputerクラスを、多変量特徴量の欠損値補完にはIterativeImputerクラスを使用します。

import numpy as np
from sklearn.impute import SimpleImputer, IterativeImputer

SimpleImputerを使った単変量特徴量の欠損値補完

SimpleImputerクラスは、単変量の方法で欠損値を補完するための基本的な戦略を提供します。欠損値を定数値で置き換えるか、各列の平均値、中央値、または最頻値を使って欠損値を補完するなど、さまざまな戦略から選ぶことができます。

まず平均戦略を考えてみましょう。SimpleImputerのインスタンスを作成し、データに適合させて欠損値補完戦略を学習します。その後、学習した戦略に基づいて欠損値を補完するためにtransformメソッドを使用できます。

imp = SimpleImputer(strategy='mean')
X = [[1, 2], [np.nan, 3], [7, 6]]
imp.fit(X)
X_test = [[np.nan, 2], [6, np.nan], [7, 6]]
imputed_X_test = imp.transform(X_test)

IterativeImputerを使った多変量特徴量の欠損値補完

IterativeImputerクラスは、欠損値を補完するためのより高度なアプローチです。欠損値を持つ各特徴量を他の特徴量の関数としてモデル化し、その推定値を欠損値補完に使用します。特徴量間の関係を反復的に学習し、これらの関係に基づいて欠損値を補完します。

imp = IterativeImputer()
X = [[1, 2], [3, 6], [4, 8], [np.nan, 3], [7, np.nan]]
imp.fit(X)
X_test = [[np.nan, 2], [6, np.nan], [np.nan, 6]]
imputed_X_test = imp.transform(X_test)

KNNImputerを使った最近傍法による欠損値補完

KNNImputerクラスは、k-最近傍法を使って欠損値を埋めるための欠損値補完を提供します。欠損値を持つ各サンプルに対して最近傍点を見つけ、それらの近傍点の値に基づいて欠損した特徴量の値を補完します。

from sklearn.impute import KNNImputer
nan = np.nan
X = [[1, 2, nan], [3, 4, 3], [nan, 6, 5], [8, 8, 7]]
imputer = KNNImputer(n_neighbors=2)
imputed_X = imputer.fit_transform(X)

特徴量の数を一定に保つ

デフォルトでは、scikit-learnの欠損値補完ツールは欠損値のみの列を削除します。ただし、場合によっては、データの形状を維持するために空の特徴量を残す必要があります。これは、keep_empty_featuresパラメータをTrueに設定することで達成できます。

imputer = SimpleImputer(keep_empty_features=True)
X = np.array([[np.nan, 1], [np.nan, 2], [np.nan, 3]])
imputed_X = imputer.fit_transform(X)

MissingIndicatorを使った欠損値補完された値のマーキング

MissingIndicator変換器は、データセットにおける欠損値の存在を示すのに役立ちます。欠損値補完と併用して、どの値が欠損値補完されたかに関する情報を保持するために使用できます。この変換器は、データセットにおける欠損値の存在を示す2値行列を返します。

from sklearn.impute import MissingIndicator
X = np.array([[-1, -1, 1, 3], [4, -1, 0, -1], [8, -1, 1, 0]])
indicator = MissingIndicator()
mask_missing_values_only = indicator.fit_transform(X)

まとめ

このチュートリアルでは、scikit-learnを使って欠損値を補完するさまざまな戦略を学びました。SimpleImputerを使った単変量特徴量の欠損値補完、IterativeImputerを使った多変量特徴量の欠損値補完、KNNImputerを使った最近傍法による欠損値補完、特徴量の数を一定に保つ方法、およびMissingIndicatorを使った欠損値補完された値のマーキングについて検討しました。これらの手法は、欠損データを処理し、機械学習アルゴリズムを不完全なデータセットに適用できるようにするための貴重なツールになります。