Menu
CoddyTech

直線で予測する

CoddyのMachine Learningジャーニー「機械学習のための統計」セクションの一部。レッスン 38/64。

当てはめた直線は、小さな予測マシンです。新しい x を入力すると、y が返ってきます。子犬の体重を生後8週から20週まで測りました:

weeks = np.array([8, 10, 12, 14, 16, 18, 20])
kg = np.array([3.1, 4.0, 5.2, 6.1, 7.0, 8.2, 9.1])
slope, intercept = np.polyfit(weeks, kg, 1)
new_weeks = np.array([15, 52])
print(np.round(slope * new_weeks + intercept, 1))

これは [ 6.6 25.2] を出力します。第15週はデータの範囲内です。第52週は範囲外で、犬の成長が止まった後も線は上昇し続けます。

当てはめた直線上に示された、第8週から第20週までの7回の体重測定。直線は「データの範囲外」と記された網掛け領域へ破線で伸び、第52週で25.2 kgに達する一方、実際の犬の点線曲線は約13 kgで横ばいになる

データの範囲外を予測することは外挿であり、リスクがあります。モデルが信頼できるのは、学習に使ったものと同様の入力に対してのみです。まず確認しましょう:

week = 52
print(week >= weeks.min() and week <= weeks.max())

これはFalseを出力します。

challenge icon

チャレンジ

中級

ろうそくが燃えるにつれて、0時間目から6時間目まで毎時間測定しました。hoursとheightはcm単位です。プログラムはnew_hoursを読み取ります。

  1. hoursからheightを予測する直線を当てはめます。
  2. new_hoursに対する予測値を、小数点以下2桁に丸めて出力します。
  3. new_hoursがデータの時間範囲内にあるかどうかを、両端を含めて出力します。

入力が4.5の場合:

Predicted height: 13.07 cm
Inside the data: yes

自分で試してみよう

import numpy as np

hours = np.array([0, 1, 2, 3, 4, 5, 6])
height = np.array([20.0, 18.4, 17.1, 15.3, 13.9, 12.2, 10.8])
new_hours = float(input())

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

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

機械学習のための統計のすべてのレッスン

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