糖尿病の経過
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 55/58。
糖尿病クリニックでは、各患者の病状が1年以内にどの程度進行するかに基づいて、再診の予約を取ります。セクション2では、ある特徴量だけでは全体の一部しか説明できませんでした。
これで、load_diabetesの10個の測定値がすべて入力されます。クリニックはどのモデルを信頼すべきでしょうか?また、予測は何ポイントずれるでしょうか?
交差検証による公平な選択、未知の患者に対する誠実な誤差評価、そしてモデルが見落としたものを確認するための残差チェックが求められています。
チャレンジ
難しいプログラムはRidgeのalpha値をalphasに読み込み、スターターコードではタイトル付きのグラフを用意しています。
random_state=0を指定して、テスト用に4分の1を分割します。- 訓練データに対する5分割交差検証で、各alphaについて
LinearRegressionとRidgeのスコアを計算します。各モデルの平均R二乗値(小数第3位まで)を出力し、その後に勝者を出力します。 - 勝者のモデルを学習させ、テストデータのMAEとRMSE(小数第1位まで)、およびR二乗値(小数第3位まで)を出力します。
- テストデータの残差(実際の値から予測値を引いた値)を、予測値に対して散布図にします。ゼロの線を追加してから、グラフを表示します。
別のクリニックで、alpha値を0.5と2.0にした場合:
Linear: CV R squared 0.472
Ridge 0.5: CV R squared 0.481
Ridge 2.0: CV R squared 0.402
Winner: Ridge 0.5
Test errors: MAE 47.3, RMSE 58.9, R squared 0.414その後、Coddyが残差グラフについて説明します。
自分で試してみよう
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LinearRegression, Ridge
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
diabetes = load_diabetes(as_frame=True)
X = diabetes.data
y = diabetes.target
# 試す Ridge の alpha 値
n = int(input())
alphas = []
for i in range(n):
alphas.append(float(input()))
fig, ax = plt.subplots()
ax.set_title("Residuals on Test Patients")
ax.set_xlabel("Predicted progression")
ax.set_ylabel("Residual (true - predicted)")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ