近年、AI技術の発展により「機械学習(Machine Learning)」という言葉をよく耳にするようになりました。
しかし「実際にどうやって機械学習が行われているのか?」という具体的な流れは、少し難しく感じるかもしれません。
この記事では、初心者の方でも理解しやすいように、サンプルデータを用いた機械学習の一連の流れを、以下のステップに沿って丁寧に解説していきます。
「なんとなく知っていた」から「自分でもできそう!」と思ってもらえるような構成で進めていきます。
機械学習において最も重要なのは「データ」です。
例えば、ある花の種類を分類したい場合、「花の特徴(がくの長さ、花びらの幅など)」と「それがどの種類の花か」という情報が必要です。
今回は、機械学習の練習でよく使われる「Iris(アイリス)」という有名なサンプルデータを使います。
このデータには、以下のような項目が含まれています。
Irisデータは150件のデータがあり、3種類の花(Setosa、Versicolor、Virginica)が均等に含まれています。
このように、目的(ここでは花の種類を分類する)に合ったデータを十分な量集めることが、最初のステップです。
集めたデータをそのまま使えるとは限りません。
現実のデータには「欠損値(空白の値)」や「単位の違い」「外れ値(極端に大きい・小さい値)」などが含まれていることも多く、これらを処理して使いやすくする必要があります。
今回のIrisデータはきれいなデータですが、前処理の例として次の作業が考えられます。
このような作業は、「モデルが正確に学習するための土台作り」といえます。
次に行うのが「どのアルゴリズムで学習させるか」というモデルの選択です。
今回のタスクは「花の種類を分類すること」ですから、「分類問題」に適したアルゴリズムが選択肢となります。
代表的なものには以下があります。
今回は、初心者でもわかりやすく、可視化もできる決定木モデルを選んで学習してみましょう。
次に、前処理済みのデータを使ってモデルに学習させます。
ここでは、データを「訓練用」と「テスト用」に分けて、訓練用データで学習を行います。
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
# データを読み込み
iris = load_iris()
X = iris.data
y = iris.target
# データを訓練用とテスト用に分割(8:2)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# モデル作成と学習
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)
このコードで、Irisデータを基にした「花の分類モデル」が完成します。
学習したモデルがどれだけ正確なのかを確かめるのが「評価」です。
訓練に使わなかった「テスト用データ」を使って、予測精度を確認します。
以下は、正解率(Accuracy)を評価する例です。
from sklearn.metrics import accuracy_score, classification_report
# テストデータで予測
y_pred = clf.predict(X_test)
# 評価
print("正解率:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred, target_names=iris.target_names))
実行すると、正解率や「Precision(適合率)」「Recall(再現率)」「F1スコア」などが確認できます。
たとえば「正解率が95%」であれば、かなり良い精度のモデルといえます。
評価結果が期待より低かった場合、いくつかの改善方法があります。
例えば、決定木の「最大深さ」を制限することで、過学習を防ぎ、より汎化性能の高いモデルを目指せます。
# 深さを制限したモデル
clf2 = DecisionTreeClassifier(max_depth=3)
clf2.fit(X_train, y_train)
このように、評価と改善を繰り返すことで、モデルの精度を高めていくのが機械学習の基本です。
この記事では、機械学習の一連の流れを以下のステップで解説しました。
そして、サンプルデータ(Iris)を用いた実例も交えながら、初心者にもわかりやすく説明しました。
機械学習は「一発で正解を出す技術」ではなく、「データと対話しながら精度を高めていくプロセス」です。
小さく試しながら、徐々に理解を深めていくのがポイントです。
これから学習を始める方も、ぜひPythonやScikit-learnを使って、実際に手を動かして体験してみてください!