はじめに
このプロジェクトでは、scikit-learn ライブラリが提供する DIGITS データセットを使って、簡単な手書き文字認識分類器を構築する方法を学びます。手書き文字認識は機械学習における古典的な問題であり、このプロジェクトでは、手書き文字画像に表される数字を正確に予測できる分類器を作成するプロセスを案内します。
🎯 タスク
このプロジェクトでは、以下のことを学びます。
- DIGITS データセットを読み込み、学習用とテスト用に分割する方法
- 学習データに対してサポートベクターマシン(SVM)分類器を作成して学習する方法
- 単一の手書き文字画像を分類する関数を実装する方法
- サンプルの手書き文字画像を使って分類器をテストする方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- 機械学習タスク用のデータセットを読み込み、前処理する
- scikit-learn を使って SVM 分類器を作成して学習する
- 新しいサンプルを分類する予測関数を実装する
- 機械学習技術を使った手書き文字認識の基本を理解する
DIGITS データセットを読み込む
このステップでは、scikit-learn ライブラリから DIGITS データセットを読み込む方法を学びます。以下の手順に従ってこのステップを完了しましょう。
handwritten_digit_classifier.pyファイルを開き、必要なライブラリをインポートします。
from sklearn import datasets
from sklearn.model_selection import train_test_split
datasets.load_digits()関数を使って DIGITS データセットを読み込みます。
digits = datasets.load_digits()
X, y = digits.data, digits.target
X変数には 8x8 ピクセルの画像がフラット化されたものが含まれ、y変数には対応する数字のラベル(0-9)が含まれます。
train_test_split()を使ってデータセットを学習用とテスト用に分割します。
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
これにより、データが 80%の学習用と 20%のテスト用に分割されます。
SVM 分類器を作成して学習する
このステップでは、学習データに対してサポートベクターマシン(SVM)分類器を作成して学習する方法を学びます。以下の手順に従ってこのステップを完了しましょう。
handwritten_digit_classifier.pyファイルのsklearn.svmモジュールからSVCクラスをインポートします。
from sklearn.svm import SVC
線形カーネルと正則化パラメータ 1 の SVM 分類器を作成します。
clf = SVC(kernel="linear", C=1)
fit()メソッドを使って学習データに対して SVM 分類器を学習させます。
clf.fit(X_train, y_train)
これにより、学習データに対して SVM 分類器が学習されます。
予測関数を実装する
このステップでは、単一の手書き文字画像を分類するためのpredict(sample)関数を実装します。以下の手順に従ってこのステップを完了しましょう。
handwritten_digit_classifier.pyファイルでnumpyモジュールをインポートします。
import numpy as np
predict(sample)関数を定義します。
def predict(sample):
"""
Parameters:
sample -- A list of pixel values of a handwritten character image
Returns:
pred -- The predicted label for the handwritten character image as an integer
"""
## Reshape the input sample
sample = np.array(sample).reshape(1, -1)
## Use the trained classifier to make a prediction
pred = clf.predict(sample)
return int(pred[0])
predict(sample)関数では:
- 入力の
sampleリストを NumPy 配列に変換し、学習データと同じ形式の単一のサンプルに整形します。 - 学習済みの
clf分類器を使って、predict()メソッドを用いて整形された入力サンプルのラベルを予測します。 - 予測されたラベルを整数として返します。
分類器をテストする
これで、サンプルの手書き文字画像を使ってpredict(sample)関数をテストすることができます。handwritten_digit_classifier.pyファイルの例を以下に示します。
sample = [
0.0, 0.0, 6.0, 14.0, 4.0, 0.0, 0.0, 0.0,
0.0, 0.0, 11.0, 16.0, 10.0, 0.0, 0.0, 0.0,
0.0, 0.0, 8.0, 14.0, 16.0, 2.0, 0.0, 0.0,
0.0, 0.0, 1.0, 12.0, 12.0, 11.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 11.0, 3.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 5.0, 11.0, 0.0, 0.0,
0.0, 1.0, 4.0, 4.0, 7.0, 16.0, 2.0, 0.0,
0.0, 7.0, 16.0, 16.0, 13.0, 11.0, 1.0, 0.0
]
result = predict(sample)
print("Predicted Label:", result)
これにより、与えられた手書き文字画像の予測ラベルが出力されるはずです。
handwritten_digit_classifier.pyファイルを実行して例を実行します。
python handwritten_digit_classifier.py
## Predicted Label: 9
まとめ
おめでとうございます!このプロジェクトを完了しました。あなたは実験(Lab)をもっとたくさん行って技術力を向上させることができます。



