今回から、手書きの数字の画像データを用いて学習をさせて予測までさせる方法について学んでいきましょう!
今回の目的は「画像に書かれている数字がなんの数字なのかを予測する人工知能」を作ることです!
データを準備しよう
全体の流れは以下の通りです。
新規ノートブックを作成する
最初に今回プログラムを書いていくノートブックを作成しましょう。
![](https://momotech-dao.com/wp-content/uploads/2025/01/image-33.png)
「①データを準備する」から始めていきましょう。
コード
#1 手書き数字のサンプルデータを読み込む
#2 中身を確認する
import pandas as pd
from sklearn.datasets import load_digits
digits = load_digits() #1
print(digits) #2
参考資料:Python3年生機械学習のしくみ
実行結果
![](https://momotech-dao.com/wp-content/uploads/2025/01/image-35.png)
たくさんのデータが入っているようですが中身はどうなっているのでしょうか。
データ名 | 内容 |
---|---|
data | 学習用の画像データ |
target | 各画像データに対応する番号 |
target_names | 各targetの番号がなんの数字なのか |
images | 画像データを8×8に並べたデータ |
DESCR | データの説明文 |
上の表に書かれている内容のデータが入っているのです!データを確認する際に英語表記がわからなかったら翻訳ソフトなどを使って意味を確かめてみましょう。
データを確認しよう
学習用の画像データ(digits.data)をデータフレームに読み込みましょう。
コード
df = pd.DataFrame(digits.data)
df
参考資料:Python3年生機械学習のしくみ
実行結果
![](https://momotech-dao.com/wp-content/uploads/2025/01/image-36.png)
各1行ずつに数字の画像データがあるので、合計で1797個のデータがあることが分かりました!
次に、これらのデータが何を表しているのかを確認してみましょう。
コード
print(digits.target_names)
参考資料:Python3年生機械学習のしくみ
実行結果
![](https://momotech-dao.com/wp-content/uploads/2025/01/image-37.png)
これは、1797個の画像データは、0から9の数字の画像のデータであることを意味しています。よって、targetが0のとき、数字の0を示しているということです!
では、先頭10行の画像データに対応するtargetの番号を確認してみましょう。
コード
for i in range(10):
print(digits.target[i])
参考資料:Python3年生機械学習のしくみ
実行結果
![](https://momotech-dao.com/wp-content/uploads/2025/01/image-38.png)
最初の10個はきれいに順番通りに並んでいることが分かります。そのあとはバラバラなのかもしれませんが、表示する数を増やして確認してみてもいいかもしれませんね!
targetの確認ができたので先頭10行のdataを画像で確認してみましょう!
コード
%matplotlib inline
import matplotlib.pyplot as plt
for i in range(10):
# 縦に10個並べる
plt.subplot(10, 1, i + 1)
plt.axis("off")
plt.title(digits.target[i])
plt.imshow(digits.data[i:i+1], cmap="Greys")
plt.show()
参考資料:Python3年生機械学習のしくみ
実行結果
![](https://momotech-dao.com/wp-content/uploads/2025/01/image-39.png)
数字が出るかと思いましたが、数字には見えませんね…。実は、これは0から9の数字の画像データです。機械学習に渡せるように横1列に並べられています!
最後に、先頭10行のdataを8×8に変換したtargetを画像で確認してみます。
コード
for i in range(10): # 横に10個並べる
plt.subplot(1, 10, i + 1)
plt.axis("off")
plt.title(digits.target[i])
plt.imshow(digits.images[i], cmap="Greys")
plt.show()
参考資料:Python3年生機械学習のしくみ
実行結果
![](https://momotech-dao.com/wp-content/uploads/2025/01/image-40.png)
少しわかりづらいですが、数字だということが分かりましたね!
この後使っていくSVMモデルでは、人のように数字の線の曲がり具合などを見ているわけではなく、64個の説明変数から数字を班別するという学習をしています。