040_手書きの数字の学習準備を行おう

今回から、手書きの数字の画像データを用いて学習をさせて予測までさせる方法について学んでいきましょう!

今回の目的は「画像に書かれている数字がなんの数字なのかを予測する人工知能」を作ることです!

目次

データを準備しよう

全体の流れは以下の通りです。

STEP
データを準備する
STEP
データを学習用とテスト用に分ける
STEP
モデルを選んで学習させる
STEP
モデルをテストする
STEP
新しい数字を渡して予測して確認する!

新規ノートブックを作成する

最初に今回プログラムを書いていくノートブックを作成しましょう。

「①データを準備する」から始めていきましょう。

コード

#1 手書き数字のサンプルデータを読み込む
#2 中身を確認する


import pandas as pd
from sklearn.datasets import load_digits

digits = load_digits()    #1
print(digits)   #2

参考資料:Python3年生機械学習のしくみ

実行結果

たくさんのデータが入っているようですが中身はどうなっているのでしょうか。

データ名内容
data学習用の画像データ
target各画像データに対応する番号
target_names各targetの番号がなんの数字なのか
images画像データを8×8に並べたデータ
DESCRデータの説明文

上の表に書かれている内容のデータが入っているのです!データを確認する際に英語表記がわからなかったら翻訳ソフトなどを使って意味を確かめてみましょう。

データを確認しよう

学習用の画像データ(digits.data)をデータフレームに読み込みましょう。

コード

df = pd.DataFrame(digits.data)
df

参考資料:Python3年生機械学習のしくみ

実行結果

各1行ずつに数字の画像データがあるので、合計で1797個のデータがあることが分かりました!

次に、これらのデータが何を表しているのかを確認してみましょう。

コード

print(digits.target_names)

参考資料:Python3年生機械学習のしくみ

実行結果

これは、1797個の画像データは、0から9の数字の画像のデータであることを意味しています。よって、targetが0のとき、数字の0を示しているということです!

では、先頭10行の画像データに対応するtargetの番号を確認してみましょう。

コード

for i in range(10):
    print(digits.target[i])

参考資料:Python3年生機械学習のしくみ

実行結果

最初の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年生機械学習のしくみ

実行結果

数字が出るかと思いましたが、数字には見えませんね…。実は、これは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年生機械学習のしくみ

実行結果

少しわかりづらいですが、数字だということが分かりましたね!

この後使っていくSVMモデルでは、人のように数字の線の曲がり具合などを見ているわけではなく、64個の説明変数から数字を班別するという学習をしています。

目次