最小二乗法で線形近似(python,numpy)

pythonのnumpyで最小二乗法で線形近似し傾き,切片,回帰式を取得したいと思います.

```python

# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt

def main():

X = [1,2,3,4,5]
Y = [1.1, 2.1, 2.8, 4.3, 5.1]

A = np.array([X,np.ones(len(X))])
A = A.T
#線形回帰(np.linalg.lstsq)を実行してa:傾き、b:切片を取得。
a,b = np.linalg.lstsq(A,Y)[0]
print("a(傾き):{}".format(a))
print("b(切片):{}".format(b))

#X,Y生データのプロット
plt.plot(X,Y,"ro")
#y=a*X;bの回帰式をプロット
plt.plot(X,(a*X+b),"g--")
plt.grid()
plt.show()


if __name__ == '__main__':
main()

```

 

出力結果

a(傾き):1.02

b(切片):0.02

f:id:kobakenkken:20181130091444p:plain