手書き数字
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 57/58。
郵便局の仕分け機は、「Digits at a Glance」で見た8×8のスキャン画像から、手書きの郵便番号の数字を読み取ります。load_digits:
2つの候補がこの仕事を狙っています。エンジニアが提案する k の値を使う k-NN と、100本の木からなるランダムフォレストです。
今回は、間違いが重要です。オフィスが必要としているのは、より公平な方、その未見のスキャンでのスコア、そして最もよくある取り違えです。そのため、それらの数字は人に引き継がれます。
チャレンジ
難しいプログラムはエンジニアの k を読み込み、スターターコードでタイトル付きのグラフを設定します。
- 層化してテスト用に4分の1を分割します。
random_state=0。 - 学習データで、
kを使った k-NN と、100本の木からなるランダムフォレスト(random_state=0)を5分割交差検証します。それぞれの平均(小数点以下3桁)と勝者を出力します。 - 勝者を学習させ、テスト精度を出力します。
- テストデータの混同行列で最も大きな誤りを出力し、
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")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ