「AIを使って画像を判別できるってすごいけど、自分でも作れるの?」
そう思ったことはありませんか?
本記事では、Pythonを使って「手書き数字を読み取るAI」を誰でも簡単に作れる方法を、プログラミング初心者でもわかるように解説しています。
使用するのは、機械学習の代表的な教材『MNISTデータセット』と、人気のPythonライブラリ『scikit-learn』。
AI開発の第一歩として最適なこのテーマを通じて、画像認識の仕組みや機械学習の基本も身につきます。
MNISTとは何かを知ろう
結論:MNISTはAI学習の登竜門
MNIST(エムニスト)は、手書き数字(0〜9)を集めた画像データセットで、機械学習の基礎を学ぶのに最適です。
MNISTの基本情報
• 画像サイズ:28×28ピクセルのグレースケール
• データ件数:訓練用6万枚、テスト用1万枚
• 利用目的:主に画像認識アルゴリズムの評価
なぜMNISTが選ばれるのか?
• データが整っていて扱いやすい
• 複雑な前処理が不要
• モデルの学習が短時間で終わる
• 初心者からプロまで利用している
参考:アメリカ国立標準技術研究所(NIST)による公開

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アプリと連携してサービス化