0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【機械学習モデリング記録】001単回帰

Last updated at Posted at 2025-10-27

はじめに

はじめまして,yukineと申します.
機械学習のモデリングを勉強するため,1つ1つ実装していこうと思います.
間違い等ありましたら指摘していただけると幸いです.

更新は不定期です.

数式の理解

今回は単回帰を扱います.

回帰直線は,回帰係数$a$と切片$b$を用いて,

y = ax + b

と表されます.

実際のデータが$(x_1,y_1),(x_2,y_2), ... ,(x_n,y_n)$で与えられているとき,

L(残差平方和) = \sum_{i=1}^{n}(y_i - (ax_i + b))^2

$L$を最小化するように$a,b$を求めます.

まず,$b$に関しての偏微分

\displaylines{
\frac{\partial L}{\partial b} 
= -2 \sum_{i=1}^n (y_i - ax_i - b) = 0 \\
\sum_{i=1}^n y_i - a\sum_{i=1}^n x_i - nb = 0 \\
b = \bar{y} - a \bar{x}
}

次に,$a$に関しての偏微分

\displaylines{
\frac{\partial L}{\partial a} 
= -2 \sum_{i=1}^n x_i(y_i - ax_i - b) = 0 \\
\sum_{i=1}^n x_i y_i - a\sum_{i=1}^n x_i^2 - b \sum_{i=1}^n x_i = 0
}

ここに $b = \bar{y} - a\bar{x}$ を代入すると,

\displaylines{
a = \frac{\sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^n (x_i - \bar{x})^2} = \frac{S_{xy}}{Sx} = r_{xy}\frac{S_x}{S_y} 
}

コーディング

まずNumpyで実装してみます.

numpy
import numpy as np

  x_mean = np.mean(x)
  y_mean + np.mean(y)

  # 回帰係数 a
  a = np.sum((x - x_mean) * (y - y_mean)) / np.sum((x - x_mean)**2)

  # 切片 b
  b = y_mean - a * x_mean

Scikit-learnのLinearRegressionで同じことができます.

sklearn
from sklearn.linear_model import LinearRegression

model = LinearRegression()

# 学習
model.fit(X, y)

# 予測
_y = model.predict(_X)

実践:kaggleの住宅価格予測

実際にkaggleの「House Prices - Advanced Regression Techniques」で試してみます。

データの確認

データの読み込み
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

train_df = pd.read_csv("/content/drive/MyDrive/機械学習モデリング記録/DataSet/house-prices-advanced-regression-techniques/train.csv")

# 1階面積との相関
train_df.plot.scatter(x='1stFlrSF', y='SalePrice')

download.png

1階面積との相関が強そうなので利用してみます.

学習

学習
from sklearn.linear_model import LinearRegression

model = LinearRegression()

X = train_df[['1stFlrSF']]
y = train_df['SalePrice']

# 学習
model.fit(X, y)

次にテストデータで予測してみます。

予測
test_df = pd.read_csv("/content/drive/MyDrive/機械学習モデリング記録/DataSet/house-prices-advanced-regression-techniques/test.csv")

X_test = test_df[['1stFlrSF']]
y_pred = model.predict(X_test)

submission = pd.DataFrame({"Id": test_df["Id"], "SalePrice": y_pred})
submission.to_csv("submission.csv", index=False)

結果

こうして出力したcsvファイルを提出してみます。

1000020513.jpg

RMSLEで0.33という結果になりました。単回帰なのでこんなものなのではないでしょうか。

次回↓
https://qiita.com/yukine_kamihata/items/6fb2b249507860ce94b7

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?