【0から学ぶAI】第220回:データ前処理の実践 〜欠損値処理や特徴量スケーリングの方法を解説

目次

前回のおさらいと今回のテーマ

こんにちは!前回は、Pythonの機械学習ライブラリScikit-learnを使って、基本的な機械学習モデルの構築と評価方法を解説しました。データの分割、モデルの訓練、そして評価のステップを一貫して行うことで、機械学習の基礎的な流れを理解できたと思います。

今回は、機械学習のモデル構築に欠かせないデータ前処理について学びます。データ前処理は、モデルの精度を高めるために非常に重要なステップで、データを正規化したり、欠損値を処理したりして、モデルに適した形に整えます。正しい前処理を行うことで、モデルの性能が向上し、予測精度が大幅に改善されます。それでは、基本的なデータ前処理の方法を見ていきましょう!

データ前処理とは?

データ前処理とは、機械学習モデルが適切に学習できるように、データを整形・変換する作業のことを指します。主に以下のステップが含まれます。

  1. 欠損値の処理: 欠けているデータを補完または削除して、モデルが扱いやすい形にする。
  2. 特徴量のスケーリング: 特徴量のスケール(尺度)を統一して、モデルの性能を向上させる。
  3. カテゴリ変数のエンコーディング: カテゴリデータを数値データに変換する。
  4. データの分割: 学習データとテストデータに分ける。

今回は、特に重要な欠損値の処理特徴量のスケーリングについて詳しく解説します。

1. 欠損値の処理

データセットには、しばしば欠損値が含まれており、これを適切に処理しないとモデルの精度が低下します。Scikit-learnやPandasを使って欠損値を処理する方法を紹介します。

データセットの準備

まずは、Pandasを使ってサンプルデータを作成します。

import pandas as pd
import numpy as np

# サンプルデータの作成
data = {
    'Age': [25, np.nan, 35, 40, np.nan],
    'Salary': [50000, 60000, np.nan, 80000, 90000],
    'Gender': ['Male', 'Female', 'Female', 'Male', np.nan]
}

df = pd.DataFrame(data)
print(df)

上記のデータには、AgeSalaryGenderの列に欠損値が含まれています。

欠損値の確認

まず、データフレームにどれだけ欠損値が含まれているかを確認します。

# 欠損値の確認
print(df.isnull().sum())

isnull()メソッドを使うと、各列にどれだけの欠損値があるかを確認できます。

欠損値の補完(Imputation)

欠損値を補完する方法にはいくつかありますが、以下の方法が一般的です。

  1. 平均値・中央値で補完: 数値データの場合、欠損値をその列の平均値や中央値で補完します。
  2. 最頻値で補完: カテゴリデータの場合、欠損値を最も頻繁に出現する値で補完します。
  3. 特定の値で補完: 欠損値を0や特定の値で埋めることもあります。
# 平均値で補完(Age列)
df['Age'].fillna(df['Age'].mean(), inplace=True)

# 最頻値で補完(Gender列)
df['Gender'].fillna(df['Gender'].mode()[0], inplace=True)

# 結果の表示
print(df)

欠損値の削除

場合によっては、欠損値を含む行や列を削除することが有効です。

# 欠損値を含む行を削除
df_dropped = df.dropna()

# 欠損値を含む列を削除
df_dropped_cols = df.dropna(axis=1)

dropna()メソッドを使うと、欠損値を含む行や列を削除できます。

2. 特徴量のスケーリング

機械学習モデル、特に距離に基づくアルゴリズム(例:k-最近傍法やSVM)では、特徴量のスケールが異なると性能が悪化します。そのため、特徴量のスケーリングが必要です。

スケーリングの方法

  1. 標準化(Standardization): データを平均0、標準偏差1に変換します。StandardScalerを使います。
  2. 正規化(Normalization): データを0から1の範囲にスケーリングします。MinMaxScalerを使います。

Scikit-learnでのスケーリング

以下のコードでは、StandardScalerMinMaxScalerを使ったスケーリング方法を紹介します。

from sklearn.preprocessing import StandardScaler, MinMaxScaler

# 特徴量の選択(数値データのみ)
X = df[['Age', 'Salary']]

# 標準化
scaler = StandardScaler()
X_standardized = scaler.fit_transform(X)
print("Standardized Data:\n", X_standardized)

# 正規化
scaler = MinMaxScaler()
X_normalized = scaler.fit_transform(X)
print("Normalized Data:\n", X_normalized)
  • StandardScaler(): データを標準化します。平均0、標準偏差1に変換するため、数値データが中心に集まり、スケールが統一されます。
  • MinMaxScaler(): データを0から1の範囲にスケーリングします。特徴量が全て同じ範囲に収まるため、モデルの精度が向上します。

カテゴリ変数のエンコーディング

カテゴリ変数(例:性別や地域)を数値に変換する必要があります。LabelEncoderOneHotEncoderを使って変換します。

from sklearn.preprocessing import LabelEncoder, OneHotEncoder

# ラベルエンコーディング
le = LabelEncoder()
df['Gender_encoded'] = le.fit_transform(df['Gender'])
print(df)

# ワンホットエンコーディング
df_encoded = pd.get_dummies(df, columns=['Gender'])
print(df_encoded)
  • LabelEncoder: カテゴリを整数にエンコーディングします(例:Male → 1, Female → 0)。
  • get_dummies(): ワンホットエンコーディングで、各カテゴリに対して新しい列を作成し、1と0で表現します。

まとめ

今回は、データ前処理の基本として、欠損値処理特徴量のスケーリングについて解説しました。適切な前処理を行うことで、モデルがデータをより正確に学習し、予測精度が向上します。データ前処理は機械学習において非常に重要なステップであり、しっかりと理解しておくことで、より高度なモデルの構築が可能になります。

次回予告

次回は、単純な回帰モデルの実装について解説します。線形回帰モデルを実装し、データに基づいて予測を行う方法を学びましょう!


注釈

  • 標準化(Standardization): データを平均0、標準偏差1に変換することで、異なるスケールの特徴量を統一する方法。
  • 正規化(Normalization): データを0から1の範囲にスケーリングすることで、全ての特徴量が同じ範囲に収まるようにする方法。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

株式会社PROMPTは生成AIに関する様々な情報を発信しています。
記事にしてほしいテーマや調べてほしいテーマがあればお問合せフォームからご連絡ください。
---
PROMPT Inc. provides a variety of information related to generative AI.
If there is a topic you would like us to write an article about or research, please contact us using the inquiry form.

コメント

コメントする

目次