はじめに
回帰分析をpython で手軽にそれっぽく行う方法を調べた結果を紹介します。
回帰分析
目的変数 $y$ を説明変数$x$ で $y=ax+b$ と説明してやろう、ということで頑張ります。^^)
scikit-learn を使う
この業界のマナーなのかもしれませんが、学習データについて入力 x と出力 y の組み合わせがあったとして、
- 学習: x, y に合うようモデルパラメータを推定するには、model.fit(x,y)
- 予測: x に対応する y の予測するには model.predict(x)
とすれば良いです。何と分かり易い設計なのだろう。素晴らしい。
simple01.py
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
rng = np.random.RandomState(0)
X, y = make_regression(n_samples=20, n_features=1, random_state=0,
noise=4.0, bias=100.0)
print(f'x: {type(X)} shape: {X.shape}')
print(f'y: {type(y)} shape: {y.shape}')
model = LinearRegression(fit_intercept=True,
copy_X=True,
n_jobs=1,
positive=False)
model.fit(X, y)
y_train_pred = model.predict(X)
これでモデルに係数と切片が保存されています。それぞれ model.coef_, model.intercept_ で参照できます。詳しくは仕様で attributes を確認しよう。
おまけ?として、決定係数は model.score(X,y)
でえられるようです。
下記でプロットしたらこうなりました。
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,5))
ax.plot(X, model.coef_ * X + model.intercept_, label=f'model (R2={model.score(X,y)})')
ax.plot(X, y, 'k.', label='data')
ax.plot(X, y_train_pred, 'ro', label='prediction')
ax.grid(True)
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend()
plt.show()
plt.savefig('simple01.png')
とりあえず下記に保存しました。
https://github.com/torupati/study_regression
まとめ
とりあえず回帰分析ならこれでできそうな気がした。仕事、うまくいくかなぁ。疲れた。。。
(2023/05/29)
- 下記を参考にさせていただきました。多謝。