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?

【備忘録】線形回帰の基本について

Posted at

1. はじめに

 データ分析、機械学習の領域において、最も基本的でありながら強力な手法の一つが「線形回帰」です。ビジネスの現場から研究開発まで、幅広い分野で活用されていますよね。今回は線形回帰の基本的な概念から、その背後にある数学的原理、そして実際の実装方法までをまとめてみようと思います。

2. そもそも線形回帰とは何か?

 線形回帰とは、一つまたは複数の説明変数(特徴量)と、一つの目的変数(予測したい値)の間に存在する線形の関係性をモデル化する手法です。簡単に言えば、「入力(X)が変わると、出力(Y)が比例してどのように変化するか」を数式で表現しようとするものです。
例えば、
・家の広さ(説明変数)と 家の価格(目的変数)の関係
・広告の出稿量(説明変数)と 商品の売上(目的変数)の関係
・気温(説明変数)と アイスクリームの売上(目的変数)の関係
などを線形回帰で分析することができます。

3. 線形回帰のモデル

最もシンプルな単回帰モデルは、以下の式で表されます。

y=ax+b

ここで、
・y: 目的変数
・x: 説明変数
・a: 回帰係数(傾き):説明変数が1単位変化したときの目的変数の変化量
・b: 切片:説明変数が0のときの目的変数の値

複数の説明変数がある場合は、重回帰モデルとなり、以下のようになります。

y=a1​x1​+a2​x2​+⋯+an​xn​+b

ここで、x1​,x2​,…,xn​ は説明変数、a1​,a2​,…,an​ はそれぞれの回帰係数です。

4. 線形回帰のアルゴリズムの考え方

 線形回帰の目的は、与えられたデータ(説明変数と目的変数の組)に基づいて、最もデータに適合する線形モデル(上記の数式における a や b)を見つけることです。この「最も適合する」という基準を求めるにはいくつか方法がありますが、一般的に用いられているのが「最小二乗法」です。

・最小二乗法について

 最小二乗法は、実際の目的変数の値と、線形モデルによって予測された値との差(残差)の二乗和を最小にするように、回帰係数と切片を決定する方法です。残差を二乗することで、正の誤差と負の誤差を同等に扱うことができます。

数式で表すと、以下の残差二乗和 S を最小化する a と b を求めます。

S = \sum_{i=1}^{n} (y_i - (ax_i + b))^2

具体的にaとbは以下の式で求めます。

a =  \frac{σ_{xy}}{σ_{xx}^2}=\frac{\sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y})}{\sum_{i=1}^{n} (x_i - \bar{x})^2} 
b = \bar{y} - a\bar{x}

ここで$\mathrm{σ_{xy}}$はxとyの共分散、$\mathrm{σ_{xx}}$はxの分散です。

5. 単回帰分析のプログラム

実際にPythonを使用して、単回帰分析の処理を実装して動かしてみます。

import numpy as np
import matplotlib.pyplot as plt

# サンプルデータ
data_x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
data_y = np.array([2, 3.5, 5, 6, 5, 7, 6.5, 8, 7.5, 8])

# 単回帰分析処理
def linear_regression(x, y):
    x_mean = np.mean(x)
    y_mean = np.mean(y)

    numerator = np.sum((x - x_mean) * (y - y_mean))
    denominator = np.sum((x - x_mean) ** 2)

    a = numerator / denominator
    b = y_mean - a * x_mean

    return a, b

# 回帰係数と切片の計算
a, b = linear_regression(data_x, data_y)

# サンプルデータと回帰直線をグラフへ描写
x = np.arange(0, 11, 1)
y = a * x + b

print(f"a = {a},b={b}")
fig = plt.figure()
ax = fig.subplots()

ax.set_title('Linear Regression')
ax.set_xlabel('x')
ax.set_ylabel('y')

ax.scatter(data_x, data_y, label='Sample Data')
ax.plot(x, y, label='Regression line', color='red')
ax.legend()
plt.show()

以下のような出力結果となります。
青い点がサンプルデータ
赤い線はそのサンプルデータから導き出した回帰直線です。

image.png

6. まとめ

 線形回帰は、データ分析の基礎であり、多くの応用を持つ重要な手法です。今回は基本的な理論の説明と実際のアルゴリズムについてまとめました。scikit-learn などのライブラリを利用すれば、比較的容易に実装できるため、ぜひ試してみてください。最後までお読みいただきありがとうございました。

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?