振り返り:スケートボードの修理
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 40/58。
チャレンジ
中級スケートパークのレンタル受付では、返却されたボードのうち修理が必要なものを見つけるモデルを求めています。プログラムは、試す最大の k を読み込みます。
- 25%をテスト用の行として分けます(
random_state=0)。 ks内の各 k について、訓練用の行でk-NNを交差検証します(cv=5)。平均値を棒グラフで描画し、最適な k を出力します。depthsを対象に、決定木のmax_depthをグリッドサーチします(cv=5、random_state=0)。最適な値を出力します。- 平均値が高い方を勝者とし、テスト精度とともに
Winner: k-NNまたはWinner: treeを出力します。
別のスケートパークで13を入力した場合:
Best k: 13 (mean 0.785)
Best depth: 5 (mean 0.763)
Winner: k-NN, test accuracy 0.822次にCoddyがあなたのグラフを説明します。Coddyのグラフは次のようになります:
自分で試してみよう
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.neighbors import KNeighborsClassifier
from sklearn.tree import DecisionTreeClassifier
# 試す最大の k。たとえば 15
max_k = int(input())
# 返却されたスケートボード 1 台につき 1 行:前回の整備以降のレンタル回数と、0 から 10 の摩耗スコア
# およびデッキのひび割れ。repair の 1 は修理工房に送られたことを意味する
boards = pd.read_csv("skateboards.csv")
features = ["rentals", "wheel_wear", "bearing_noise", "grip_wear", "truck_wobble", "deck_cracks"]
X = boards[features]
y = boards["repair"]
# 各特徴量は小さな回数またはスコアなので、ここでは k-NN にスケーラーは不要
ks = list(range(1, max_k + 1, 2))
depths = [2, 3, 4, 5, 6, 7, 8]
fig, ax = plt.subplots()
ax.set_title("Skateboard Repairs: Accuracy by k")
ax.set_xlabel("k (neighbors)")
ax.set_ylabel("Mean CV accuracy")
ax.set_xticks(ks)
ax.set_ylim(0.6, 0.9) # 小さな差が見えるように 0.6 から始める
# 以下にコードを書く
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ