【保存版】Pythonで手書き数字識別AIを作る方法|MNISTとscikit-learnで入門!

プログラミング

「AIを使って画像を判別できるってすごいけど、自分でも作れるの?」

そう思ったことはありませんか?

本記事では、Pythonを使って「手書き数字を読み取るAI」を誰でも簡単に作れる方法を、プログラミング初心者でもわかるように解説しています。

使用するのは、機械学習の代表的な教材『MNISTデータセット』と、人気のPythonライブラリ『scikit-learn』

AI開発の第一歩として最適なこのテーマを通じて、画像認識の仕組みや機械学習の基本も身につきます。

MNISTとは何かを知ろう

結論:MNISTはAI学習の登竜門

MNIST(エムニスト)は、手書き数字(0〜9)を集めた画像データセットで、機械学習の基礎を学ぶのに最適です。

MNISTの基本情報

• 画像サイズ:28×28ピクセルのグレースケール

• データ件数:訓練用6万枚、テスト用1万枚

• 利用目的:主に画像認識アルゴリズムの評価

なぜMNISTが選ばれるのか?

• データが整っていて扱いやすい

• 複雑な前処理が不要

• モデルの学習が短時間で終わる

• 初心者からプロまで利用している

参考:アメリカ国立標準技術研究所(NIST)による公開

The EMNIST Dataset
What is it?The EMNIST dataset is a set of handwritten character digits derived from the

Pythonとscikit-learnで準備する環境

結論:Anaconda環境で準備すれば初心者も安心

Pythonの開発環境を整えるには、Anacondaの利用が便利です。

Pythonのインストール方法

公式サイトからAnacondaをダウンロード

• Pythonと主要なライブラリが最初から含まれています

必要なライブラリ

1
pip install numpy matplotlib scikit-learn

• NumPy:数値計算

• Matplotlib:グラフ描画

• Scikit-learn:機械学習モデル

これだけで、すぐにAI開発が始められます。

MNISTのデータを読み込んでみよう

結論:scikit-learnだけで簡単に読み込めます

MNISTは、scikit-learnの中に組み込まれているので、外部サイトからのダウンロードは不要です。

データの読み込みコード

1
2
3
4
from sklearn.datasets import fetch_openml
 
mnist = fetch_openml('mnist_784', version=1)
X, y = mnist['data'], mnist['target']

X:画像のピクセル情報(784次元)

• y:正解ラベル(0〜9)

データの中身を見てみよう

1
2
3
4
5
6
import matplotlib.pyplot as plt
 
digit = X[0].reshape(28, 28)
plt.imshow(digit, cmap='gray')
plt.title(f'Label: {y[0]}')
plt.show()

画像とラベルをセットで表示できるため、直感的に理解できます。

手書き数字識別AIを作成する手順

結論:scikit-learnのSVMモデルで高精度な分類が可能

SVM(サポートベクターマシン)は、MNISTと相性が良く、高精度な分類結果が得られます。

モデルの作成と学習

1
2
3
4
5
6
7
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
 
model = SVC(gamma=0.05)
model.fit(X_train, y_train)

実際に予測してみる

1
2
pred = model.predict([X_test[0]])
print(f"予測結果:{pred[0]}")

目で見た数字と、AIが読み取った数字を比べてみましょう。

モデルの精度を評価する方法

結論:精度評価でAIの信頼度が分かります

モデルの性能を知るには、テストデータでの評価が欠かせません。

精度を確認するコード

1
2
3
4
5
from sklearn.metrics import accuracy_score
 
y_pred = model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"正解率:{accuracy:.2f}")

他にも確認しておきたい指標

• 混同行列

• 再現率・適合率

• F1スコア

1
2
from sklearn.metrics import classification_report
print(classification_report(y_test, y_pred))

まとめと今後の応用

結論:手書きAIは最初の一歩に最適

手書き数字の分類は、AIの入門テーマとして最適です。

今後のステップ

• 他の分類問題にも挑戦(犬猫の画像など)

• ディープラーニング(TensorFlowやPyTorch)へ進化

• Webアプリと連携してサービス化

タイトルとURLをコピーしました