"행렬 표시를 통한 단일 회귀 분석 방법"및 "python의 scikit-learn 회귀"에 대해
4885 단어 파이썬scikit-learn기계 학습
4점(4,-17), (15,-4), (30,-7), (100,50)에 직선 y=ax+b를 맞추는(단회귀를 한다)라는 문제를 생각해보고 싶다고 생각합니다.
회귀의 방침으로서, 각 점과 직선과의 거리(오차)가 최소가 되는 기울기 a와 절편 b를 구할 필요가 있습니다. 아래에 분석적으로 해결하는 방법을 설명했습니다.
~ 해석적으로 해결하는 방법 ~
오차 함수를 J로 하면,
$J =\frac 12 ((-17-(4a+b))^2+(-4-(15a+b))^2+(-7-(30a+b))^2+(50-( 100a+b))^2)$
J를 최소화하는 a, b를 구한다.
최소화하기위한 요구 사항은 오차 함수 J에 대해 a 및 b로 편미분 된 결과가 0이되는 (극값을 갖는) 것이다.
$\frac{\partial J}{\partial a} = (-17-(4a+b))(-4)+(-4-(15a+b))(-15)+(-7-(30a +b))(-30)+(50-(100a+b))(-100))=0 ー①$
$\frac{\partial J}{\partial b} = (-17-(4a+b))(-1)+(-4-(15a+b))(-1)+(-7-(30a +b))(-1)+(50-(100a+b))(-1))=0 ー②$
각각에서 다음 정규 방정식을 얻습니다.
$4^2a+4b+4*17+15^2a+15b+15*4+30^2a+30b+30*7+100^2a+100b-100*50=0-①'$
$4a+b+17+15a+b+4+30a+b+7+100a+b-50=0-②'$
이들을 행렬 표시로 변환하면
\begin{pmatrix}
4^2+15^2+30^2+100^2 & 4+15+30+100 \\
415+30+100 & 1+1+1+1
\end{pmatrix}
\begin{pmatrix}
a \\
b
\end{pmatrix}
=
\begin{pmatrix}
4*(-17)+15*(-4)+30*(-7)+100*50 \\
(-17)+(-4)+(-7)+50
\end{pmatrix}
정리하면 다음과 같다.
\begin{pmatrix}
11141 & 149 \\
149 & 4
\end{pmatrix}
\begin{pmatrix}
a \\
b
\end{pmatrix}
=
\begin{pmatrix}
4662 \\
22
\end{pmatrix}
양변에 왼쪽에서 역행렬을 가함으로써 a=0.687, b=-20.1이 구해진다.
이상으로부터, 구하는 직선은
$y=0.687x-20.1$
된다.
이 문제에 대해 파이썬의 scimitar-learn을 사용하여 해결하고 싶습니다.
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
import numpy as np
X = np.array([[4],[15],[30],[100]])
y = np.array([-17,-4,-7,50])
model = LinearRegression()
model.fit(X, y)
print('切片:', model.intercept_)
print('傾き:', model.coef_)
range = [[0], [100]]
predicted = model.predict(range)
plt.xlim(0, 100)
plt.scatter(X, y)
plt.plot(range, predicted, color = 'red')
절편과 기울기가 각각 구해져, 해석적으로 풀린 결과와 같은 값이 된 것을 확인할 수 있었습니다.
→
절편: -20.101775253767382
기울기: 0.68729598
reference:「이것이라면 아는 응용 수학 교실」
Reference
이 문제에 관하여("행렬 표시를 통한 단일 회귀 분석 방법"및 "python의 scikit-learn 회귀"에 대해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/your_dammy_21/items/4f12dca407d2b05d5113텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)