本文へスキップ
BecomeCoder

Python AIコース · 第2章 回帰 ― 数値を予測する · レッスン7

複数の特徴量で予測する ― 重回帰

ブラウザで完結

導入

現実の予測は、手がかりが1つとは限りません。「広さ」だけでなく「駅からの距離」も使って家賃を予測する――複数の特徴量を使う回帰を重回帰と呼びます。

説明

X の列を増やすだけで、線形回帰はそのまま複数の特徴量を扱えます。

import numpy as np
from sklearn.linear_model import LinearRegression

# 各行: [広さ(㎡), 駅からの距離(分)] → 家賃(万円)
X = np.array([
    [20,  5],
    [25, 10],
    [30,  3],
    [35, 15],
    [40,  8],
])
y = np.array([7.0, 7.5, 9.5, 9.0, 11.0])

model = LinearRegression()
model.fit(X, y)

print("係数:", np.round(model.coef_, 3))   # [広さの係数, 距離の係数]
print("切片:", round(model.intercept_, 2))

# 広さ32㎡・駅から7分の家賃を予測
pred = model.predict([[32, 7]])
print("予測家賃:", round(pred[0], 2), "万円")

係数が特徴量ごとに1つずつ出ます。広さの係数はプラス(広いほど高い)、距離の係数はマイナス(遠いほど安い)になるはずです。符号を見るだけで、各要素が家賃をどちらに動かすか読み取れます。

やってみよう

予測したい物件の条件 [[32, 7]] を、[[40, 3]](広くて駅近)や [[20, 20]](狭くて駅遠)に変えて、家賃の予測がどう動くか試しましょう。

演習

上のモデルで、広さ28㎡・駅から10分の物件の家賃を予測して print で表示してください。

ヒント1を見る

model.predict([[28, 10]])

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、scikit-learn で本物の機械学習モデルをその場で訓練できます。scikit-learn を使う回は初回の読み込みに時間がかかります(数十秒かかることがあります)。本文の例をそのまま試したり、数値を書き換えたりして、結果の変化を確かめましょう(グラフ内の文字は英字で書きます)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。