Menu
CoddyTech

手書き数字

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 57/58。

郵便局の仕分け機は、「Digits at a Glance」で見た8×8のスキャン画像から、手書きの郵便番号の数字を読み取ります。load_digits:

2人の異なる筆者が書いた0から9までの数字を2段に並べた、手書き数字20個。小さなブロック状の灰色のスキャン画像で、ほかの数字によく似ているものもいくつかあります

2つの候補がこの仕事を狙っています。エンジニアが提案する k の値を使う k-NN と、100本の木からなるランダムフォレストです。

今回は、間違いが重要です。オフィスが必要としているのは、より公平な方、その未見のスキャンでのスコア、そして最もよくある取り違えです。そのため、それらの数字は人に引き継がれます。

challenge icon

チャレンジ

難しい

プログラムはエンジニアの k を読み込み、スターターコードでタイトル付きのグラフを設定します。

  1. 層化してテスト用に4分の1を分割します。random_state=0。
  2. 学習データで、k を使った k-NN と、100本の木からなるランダムフォレスト(random_state=0)を5分割交差検証します。それぞれの平均(小数点以下3桁)と勝者を出力します。
  3. 勝者を学習させ、テスト精度を出力します。
  4. テストデータの混同行列で最も大きな誤りを出力し、ax に行列を描画して表示します。

別のマシンで 3 を入力した場合:

k-NN: CV accuracy 0.979
Random forest: CV accuracy 0.968
Winner: k-NN
Test accuracy: 0.976
Most confused: 7 read as 2 (3 times)

その後、Coddy が混同行列を表示します。

自分で試してみよう

import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.neighbors import KNeighborsClassifier
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay

digits = load_digits()
X = digits.data
y = digits.target
k = int(input())

fig, ax = plt.subplots()
ax.set_title("Test Digits")

# 以下にコードを書いてください
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

教師あり学習のすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ