数値を予測する
CoddyのMachine Learningジャーニー「教師あり学習」セクションの一部。レッスン 11/58。
この章のモデルは数値を予測します。章の終わりには、モデルの予測誤差を示すグラフから、モデルが見落としていたものが明らかになります。
既知の直線から始めましょう。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]coef_には特徴量ごとの傾きが格納されます。面積が1 m²増えるごとに、2.39千ドル加算されます。intercept_は、0 m²における直線の始点です。すると、model.predict([[100]])は100 m²の価格を約310.85千ドルと予測します。
チャレンジ
中級ある印刷店は料金を公表していませんが、過去の印刷実績が10件あります。ドル単位のpagesとpriceです。プログラムは新しい印刷のページ数を読み取ります。
- ページ数を1列の表として、
LinearRegressionを適合させます。 - 1ページあたりの料金(小数点以下3桁)と、切片である基本料金(小数点以下2桁)を出力します。
- 新しい印刷の予測料金(小数点以下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())
# 以下にコードを書いてください
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
教師あり学習のすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ