機械学習のデータ準備と前処理の重要性
みんな、機械学習って難しそうに聞こえるけど、実はデータの準備がめっちゃ大事なんやで!データセットをしっかり整えてあげることで、モデルの精度がグッと上がるんやからな。
例えば、料理を作るときに材料がちゃんと揃ってないと、美味しい料理はできひんやろ?それと同じで、機械学習でもデータが整ってないと、いい結果は出えへんねん。今回は、データをどうやって準備するか、具体的に見ていこか!
これからの章では、データの読み込みや欠損値の扱い方、カテゴリ変数の処理、特徴量のスケーリング、そしてトレーニングデータとテストデータの分割について学んでいくで!楽しみにしててな!
データセットの読み込み(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がよく使われるけど、データが少ない時は、もっと多くのデータをトレーニングに使った方がええ場合もあるから、バランスを考えてな!
まとめ
これで、データの準備と前処理の基本が分かったな!欠損値の扱いやカテゴリ変数の処理、特徴量のスケーリング、データの分割について学んできたけど、どれも大事なステップやで。これらをしっかり理解して、次の機械学習モデルの構築に進んでいこう!それでは、次の章でまたお会いしましょう!
【機械学習入門】データ準備と前処理の秘訣:ワンホットエンコーディングやスケーリングの具体例とサンプルコード!