Menu
CoddyTech

数値を予測する

CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 11/58。

この章のモデルは数値を予測します。章の終わりには、モデルの予測誤差を示すグラフから、モデルが見落としていたものが明らかになります。

気温に対するモデルの予測誤差のグラフ:点は -280 から +140 まで弧を描いて上昇し、再び下降しています。0 の位置にある破線の周りに「モデルは曲線を見落としていた」と表示されています

既知の直線から始めましょう。LinearRegression は、表 X からその直線を学習します。各サンプルが1行、各特徴量が1列です:

from sklearn.linear_model import LinearRegression

area = np.array([60, 75, 90, 110, 130, 150])  # 住宅の面積(m²)
price = np.array([215, 248, 290, 335, 385, 428])  # 千ドル単位
X = area.reshape(-1, 1)  # 6行、1列
model = LinearRegression()
model.fit(X, price)
print(np.round(model.coef_, 2), np.round(model.intercept_, 2))
print(np.round(np.polyfit(area, price, 1), 2))

これは同じ行を2回出力します:

[2.39] 71.59
[ 2.39 71.59]

面積に対する価格を示す6軒の家の点。太いオレンジ色のLinearRegressionの直線と、黒い破線のnp.polyfitの直線は完全に重なっている:価格 = 2.39 * 面積 + 71.59

coef_には特徴量ごとの傾きが格納されます。面積が1 m²増えるごとに、2.39千ドル加算されます。intercept_は、0 m²における直線の始点です。すると、model.predict([[100]])は100 m²の価格を約310.85千ドルと予測します。

challenge icon

チャレンジ

中級

ある印刷店は料金を公表していませんが、過去の印刷実績が10件あります。ドル単位のpagesとpriceです。プログラムは新しい印刷のページ数を読み取ります。

  1. ページ数を1列の表として、LinearRegressionを適合させます。
  2. 1ページあたりの料金(小数点以下3桁)と、切片である基本料金(小数点以下2桁)を出力します。
  3. 新しい印刷の予測料金(小数点以下2桁)を出力します。

別の印刷店の場合と120の場合:

Per page: 0.095 dollars
Setup fee: 4.1 dollars
120 pages: 15.5 dollars

自分で試してみよう

import numpy as np
from sklearn.linear_model import LinearRegression

# 過去の印刷ジョブ10件:印刷したページ数と支払った料金(ドル)
pages = np.array([40, 75, 120, 160, 210, 260, 300, 380, 450, 520])
price = np.array([7.38, 12.6, 17.65, 20.69, 26.63, 32.18, 37.76, 46.4, 55.17, 60.89])
new_pages = int(input())

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

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

教師あり学習のすべてのレッスン

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