線形回帰の仕組み

statsmodels を使った中級 Regression

Maarten Van den Broeck

Content Developer at DataCamp

標準的な単回帰プロット

線形回帰のトレンド線を含む散布図

statsmodels を使った中級 Regression

残差を可視化する

線形回帰のトレンド線と、各点からトレンド線までの線分(残差を表す)を示した散布図

statsmodels を使った中級 Regression

最適な当てはまりを測る指標

最も単純な発想(うまくいかない)

  • すべての残差の合計を取ります。
  • 一部の残差は負の値になります。

次に単純な発想(うまくいく)

  • 各残差を2乗し、その合計を取ります。
  • これを残差平方和と呼びます。
statsmodels を使った中級 Regression

数値最適化への寄り道

2次関数の折れ線グラフ

x = np.arange(-4, 5, 0.1)
y = x ** 2 - x + 10

xy_data = pd.DataFrame({"x": x,
                        "y": y})

sns.lineplot(x="x",
             y="y",
             data=xy_data)

2次関数 y = x ** 2 - x + 10

statsmodels を使った中級 Regression

微積分を使って方程式を解く

$y = x ^ 2 - x + 10$

$\frac{\partial y}{\partial x} = 2 x - 1$

$0 = 2 x - 1$

$x = 0.5$

$y = 0.5 ^ 2 - 0.5 + 10 = 9.75$

  • すべての方程式がこの方法で解けるわけではありません。
  • Pythonに解かせることもできます。

理解できなくても心配いりません。演習では必要ありません。

先ほどの2次関数を解いて最小値を求めたもの

statsmodels を使った中級 Regression

minimize()

from scipy.optimize import minimize
def calc_quadratic(x):
  y = x ** 2 - x + 10
  return y
minimize(fun=calc_quadratic,
         x0=3)
      fun: 9.75
 hess_inv: array([[0.5]])
      jac: array([0.])
  message: 'Optimization terminated successfully.'
     nfev: 6
      nit: 2
     njev: 3
   status: 0
  success: True
        x: array([0.49999998])
statsmodels を使った中級 Regression

線形回帰アルゴリズム

残差平方和を計算する関数を定義します。

 

minimize() を呼び出して、この関数を最小化する係数を求めます。

def calc_sum_of_squares(coeffs):
  intercept, slope = coeffs
  # More calculation!
minimize(
  fun=calc_sum_of_squares,
  x0=0
)
statsmodels を使った中級 Regression

練習しましょう!

statsmodels を使った中級 Regression

Preparing Video For Download...