近似の精度は?
CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 39/64。
どんな点の集まりにも直線を当てはめられるので、当てはまりの良さを評価する必要があります。ある船乗りが風速と船の速度を記録しました。直線の二乗誤差の合計を、最も単純な予測である平均値の二乗誤差の合計と比べてみましょう。
決定係数は、そのばらつきのうち直線で説明できる割合です。
wind = np.array([6, 8, 10, 12, 15, 18])
boat = np.array([3.1, 4.4, 4.9, 6.2, 6.8, 8.1])
slope, intercept = np.polyfit(wind, boat, 1)
predicted = slope * wind + intercept
ss_res = ((boat - predicted) ** 2).sum() # 当てはめ: 0.35
ss_tot = ((boat - boat.mean()) ** 2).sum() # 平均: 16.23
print(np.round(1 - ss_res / ss_tot, 3))これは0.979を出力します。この直線は速度のばらつきの98%を説明しています。1は完全な直線、0は平均値より良くないことを示します。
数値を予測するモデルの標準的な評価指標です。近似直線では、r squared に等しくなります。
チャレンジ
中級キノコ農場では、mushrooms.csvに16個の栽培ベッドを記録しました。プログラムは列名を読み込み、スターターコードはその列からharvest_kgを予測する直線を当てはめます。レポートに必要なr_squaredは、まだ空です。
r_squared(y, predicted)を完成させて、決定係数を返すようにします。- 最後にチェック結果を出力します。
xとyの相関係数を二乗し、100を掛け、小数第1位に丸めます。
別の農場で、入力がhumidityの場合:
humidity explains 27.0% of the harvest variation
Check with r squared: 27.0%自分で試してみよう
import numpy as np
import pandas as pd
# y に対する予測値の決定係数(R の 2 乗)を返す
def r_squared(y, predicted):
# ここにコードを書いてください
return 0
beds = pd.read_csv("mushrooms.csv")
column = input()
# 以下の行は変更しないでください
x = beds[column]
y = beds["harvest_kg"]
slope, intercept = np.polyfit(x, y, 1)
predicted = slope * x + intercept
r2 = r_squared(y, predicted)
print(f"{column} explains {np.round(r2 * 100, 1)}% of the harvest variation")
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
機械学習のための統計のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ