【機械学習入門】データ準備と前処理の秘訣:ワンホットエンコーディングやスケーリングの具体例とサンプルコード!

※関数の書き方・実行結果に誤りがあるケースがあります。随時修正中です。また誤りに気づかれた方はこちらからご連絡頂きますとめちゃ嬉しいです。

目次

機械学習のデータ準備と前処理の重要性

みんな、機械学習って難しそうに聞こえるけど、実はデータの準備がめっちゃ大事なんやで!データセットをしっかり整えてあげることで、モデルの精度がグッと上がるんやからな。

例えば、料理を作るときに材料がちゃんと揃ってないと、美味しい料理はできひんやろ?それと同じで、機械学習でもデータが整ってないと、いい結果は出えへんねん。今回は、データをどうやって準備するか、具体的に見ていこか!

これからの章では、データの読み込みや欠損値の扱い方、カテゴリ変数の処理、特徴量のスケーリング、そしてトレーニングデータとテストデータの分割について学んでいくで!楽しみにしててな!

データセットの読み込み(CSVファイルの使用)

さて、まずはデータセットを読み込む方法についてや!ここでは、一般的に使われるCSVファイルを使ってデータを読み込む方法を紹介するで。

CSVファイルとは?

CSV(Comma Separated Values)ファイルは、データをカンマで区切って保存するファイル形式や。エクセルみたいな表計算ソフトでも扱えるし、データのやり取りがめっちゃ楽やねん。

データの読み込み方法

Pythonの中には「pandas」という便利なライブラリがあるんや。このライブラリを使うと、簡単にCSVファイルを読み込むことができるで。まずは、pandasをインポートしてCSVファイルを読み込むコードを見てみよう!

import pandas as pd

# CSVファイルを読み込む
data = pd.read_csv('your_dataset.csv')

# データの最初の5行を表示
print(data.head())

このコードでは、「your_dataset.csv」という名前のCSVファイルを読み込んで、その内容を「data」っていう変数に格納してるんや。そして、head()メソッドを使ってデータの最初の5行を表示してるで。

実際にやってみよう!

Google Colabを使ってる場合は、まずCSVファイルをアップロードする必要があるから、右側のファイルアイコンからファイルをアップロードして、さっきのコードを実行してみてな!データがちゃんと読み込めたら、次のステップに進んでいこう!

欠損値の扱い方(削除と補完)

次は、データの中にある欠損値について考えてみよう!データの中に「空の値」や「NaN(Not a Number)」があると、モデルの学習に影響が出るからな。これを上手に処理してあげることが大事やで。

欠損値の確認

まずは、データの中にどれくらい欠損値があるかを確認する方法を見てみよう。pandasには、isnull()メソッドとsum()メソッドを組み合わせて使うことで、各列の欠損値の数を確認できるで。

# 各列の欠損値の数を表示
print(data.isnull().sum())

欠損値の削除

欠損値が多すぎて使えへんデータやったら、思い切って削除するのも一つの方法や。dropna()メソッドを使うと、欠損値を含む行を削除できるで。

# 欠損値を含む行を削除
cleaned_data = data.dropna()

# データの最初の5行を表示
print(cleaned_data.head())

欠損値の補完

でも、欠損値を削除するのはデータが少なくなってしまうから、補完する方法もあるで!例えば、平均値や中央値を使って欠損値を埋めることができるんや。これにはfillna()メソッドを使うで。

# 平均値で欠損値を補完
filled_data = data.fillna(data.mean())

# データの最初の5行を表示
print(filled_data.head())

どっちを選ぶ?

欠損値をどう扱うかは、データの状況や分析の目的によるから、慎重に選んでな!時には削除がいい場合もあれば、補完が良い場合もある。使うデータの性質をしっかり理解して、最適な方法を見つけていこう!次は、カテゴリ変数の処理について学んでいくで!

カテゴリ変数の処理(ワンホットエンコーディング)

今度は、カテゴリ変数の処理についてや!カテゴリ変数っていうのは、例えば「性別」や「地域」といった、数値ではなくラベルで表現されるデータのことや。機械学習モデルは数値データを扱うのが得意やから、これをどうにかせなあかんで。

ワンホットエンコーディングとは?

ワンホットエンコーディングっていうのは、カテゴリ変数を数値の形式に変換する方法や。例えば、性別が「男」と「女」の2つのカテゴリやったら、これを次のように変換するんや。

  • 男 → [1, 0]
  • 女 → [0, 1]

こうすれば、モデルが扱いやすくなるで!

pandasを使ったワンホットエンコーディング

pandasには、簡単にワンホットエンコーディングをするためのget_dummies()メソッドがあるんや。これを使って、カテゴリ変数を数値に変換してみよか。

# 'gender'という列をワンホットエンコーディング
data_encoded = pd.get_dummies(data, columns=['gender'])

# データの最初の5行を表示
print(data_encoded.head())

このコードでは、genderという列の値をワンホットエンコーディングして、新しいデータフレームを作成してるで。これで、カテゴリ変数が数値に変わったから、モデルに入力できるようになったな!

注意点

ただし、ワンホットエンコーディングをすると、元の列が多くの列に変わるから、データが大きくなりすぎることがあるんや。そういう時は、スパース処理を考えたり、特定の数値のみに絞ったりする工夫が必要やで。

次は、特徴量のスケーリングについて学んでいくで!データをさらに整えて、機械学習モデルの精度を上げていこう!

特徴量のスケーリング(標準化と正規化)

さて、次は特徴量のスケーリングについてや!機械学習モデルは、特徴量の値の範囲が異なると、うまく学習できへんことがあるんや。そこで、スケーリングをしてあげる必要があるで。

スケーリングの必要性

例えば、身長(170cm)と体重(70kg)をそのまま使うと、体重の方が数値が小さいから、モデルが身長にばかり注目してしまうかもしれへん。これを防ぐために、スケーリングを行うんや!

標準化(Standardization)

標準化は、データの平均を0、標準偏差を1に変換する方法や。これによって、特徴量の分布が標準正規分布に近づくで。pandasではStandardScalerを使うことができるんや。

from sklearn.preprocessing import StandardScaler

# スケーラーのインスタンスを作成
scaler = StandardScaler()

# 特徴量を標準化
scaled_data = scaler.fit_transform(data_encoded)

# スケーリングされたデータの最初の5行を表示
print(scaled_data[:5])

正規化(Normalization)

正規化は、データを特定の範囲(通常は0から1)にスケーリングする方法や。これもモデルの性能を向上させるために役立つで。こちらもMinMaxScalerを使えるで。

from sklearn.preprocessing import MinMaxScaler

# スケーラーのインスタンスを作成
minmax_scaler = MinMaxScaler()

# 特徴量を正規化
normalized_data = minmax_scaler.fit_transform(data_encoded)

# 正規化されたデータの最初の5行を表示
print(normalized_data[:5])

どっちを選ぶ?

標準化と正規化、どっちを使うかはデータの性質によるから、試してみるのが一番や!一般的には、ニューラルネットワークを使うときは正規化が好まれることが多いけど、他のアルゴリズムでは標準化が良かったりするで。

次は、トレーニングデータとテストデータの分割について学んでいこう!これでモデルの精度をしっかり評価できるようになるで!

トレーニングデータとテストデータの分割

最後は、トレーニングデータとテストデータの分割について学ぶで!機械学習のモデルを作る時、データを適切に分けることがめっちゃ重要なんや。これをせんと、モデルの性能を正しく評価できへんからな。

データの分割の理由

データをトレーニングデータとテストデータに分ける理由は、モデルが「見たことのないデータ」に対してどんな性能を発揮するかを評価するためや。トレーニングデータで学習した後、テストデータで検証することで、過学習を防ぐことができるんや。

sklearnを使ったデータの分割

Pythonのsklearnライブラリには、データを簡単に分割できるtrain_test_split()メソッドがあるんや。これを使って、トレーニングデータとテストデータを分割してみよう!

from sklearn.model_selection import train_test_split

# 特徴量とターゲットを定義
X = scaled_data  # スケーリングされた特徴量
y = target_data   # ターゲットデータ(予測したい値)

# データの分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# データのサイズを表示
print("トレーニングデータのサイズ:", X_train.shape)
print("テストデータのサイズ:", X_test.shape)

分割の割合

上の例では、全体の20%をテストデータにして、残りの80%をトレーニングデータにしたで。この割合は、データの量や目的に応じて変えてもいいんや。一般的には、80:20や70:30がよく使われるけど、データが少ない時は、もっと多くのデータをトレーニングに使った方がええ場合もあるから、バランスを考えてな!

まとめ

これで、データの準備と前処理の基本が分かったな!欠損値の扱いやカテゴリ変数の処理、特徴量のスケーリング、データの分割について学んできたけど、どれも大事なステップやで。これらをしっかり理解して、次の機械学習モデルの構築に進んでいこう!それでは、次の章でまたお会いしましょう!

【機械学習入門】データ準備と前処理の秘訣:ワンホットエンコーディングやスケーリングの具体例とサンプルコード!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次