파이톤으로 능선으로 돌아오기

9020 단어 산등성이.Python

이마


최소 2 곱하기 해설
https://qiita.com/NNNiNiNNN/items/4fd5367f9ead6e5905a9
상술한 보도를 보았다는 전제로 설명하다.

이른바 회귀산마루


최소 2승법에서 최소화하는 목적 함수는 다음과 같다.
E(\mathbf{w}) = ||\mathbf{y} - \mathbf{\tilde{X}\mathbf{w}}||^2
척추 회귀에서 최소화하고자 하는 목표 함수는 다음과 같다.
E(\mathbf{w}) = ||\mathbf{y} - \mathbf{\tilde{X}\mathbf{w}}||^2 + \lambda ||\mathbf{w} || ^2
여기에 추가된 $\lambda|\mathbf{w}|^2달러의 항목을 정규화항목이라고 합니다.
이른바 정규화항이란 대체로 함수 복잡도에 대한 처벌이다.오차를 최대한 줄이지만 함수도 너무 복잡하지 마세요.
이번에 산등성이로 돌아오면 $\lambda||||\mathbf{w}|^2달러를 정규화 항목으로 계산합니다.
λ하이퍼매개변수라고 하며 미리 결정된 상수입니다.이것을 좋은 느낌으로 조정할 수 있다면 이상적인 목적의 함수를 얻을 수 있을 것이다.
그러면 최소 2승법과 같이 $\mathbf{w}달러로 미분한다
\Delta E(\mathbf{w})= -2 \mathbf{\tilde{X}}^T \mathbf{y} + 2 \mathbf{\tilde{X}}^T \mathbf{\tilde{X}}\mathbf{w} +2\lambda \mathbf{w}\\
=2[(\mathbf{\tilde{X}}^T \mathbf{\tilde{X}} + \lambda \mathbf{I})\mathbf{w} - \mathbf{\tilde{X}}^T \mathbf{y}]
이것=0은 최소치이기 때문에 정리 w
\mathbf{w} = (\mathbf{\tilde{X}}^T \mathbf{\tilde{X}} + \lambda \mathbf{I})^{-1}\mathbf{\tilde{X}}^T \mathbf{y}
표준화하자.
(\mathbf{\tilde{X}}^T \mathbf{\tilde{X}} + \lambda \mathbf{I})\mathbf{w} = \mathbf{\tilde{X}}^T \mathbf{y} \tag{1}
이렇게 해서 Ax=b의 형식으로 풀었다.

이루어 보세요.


기본적으로동일한 코드를 사용합니다.
우선 훈련용 데이터
import numpy as np

# y = w[0] + w[1]x[1] + w[2]x[2]型。
# w = [1, 2, 3]とする。
X = np.random.random((100, 2)) * 10 # 0から1*10の範囲をとる100*2の行列
y = 1 + 2 * X[:, 0] + 3 * X[:, 1] + np.random.randn(100)
#x0とx1の座標からyを作成。randnで本来の値にノイズを加えている。
여기에 다음과 같은 내용을 더하다
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
from scipy import linalg # linalg.solve(A, b)

lambda_ = 1 # ハイパーパラメータを1とする。

Xtil = np.c_[np.ones(X.shape[0]), X]
c = np.eye(Xtil.shape[1]) # 単位行列を作る
A = np.dot(Xtil.T, Xtil) + lambda_ * c # (1)式を確認しよう
b = np.dot(Xtil.T, y)
w = linalg.solve(A, b) # (1)式をwについて解く。

xmesh, ymesh = np.meshgrid(np.linspace(0, 10, 20),
                            np.linspace(0, 10, 20))
zmesh = (w[0] + w[1] * xmesh.ravel() +
        w[2] * ymesh.ravel()).reshape(xmesh.shape)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(X[:, 0], X[:, 1], y, color='k')
ax.plot_wireframe(xmesh, ymesh, zmesh, color='r')
plt.show()
그래서 출력은 이런 느낌입니다.
저번
출력이 완료되었습니다.

총결산


회귀산마루는 회귀분석에 정규화항 $\lambda|\mathbf{w}|^2달러를 첨가했다.
'함수의 복잡도를 줄이다'는 것은 무슨 뜻입니까? 다음에 범화와 과도한 학습을 봅시다.
《기계 학습의 정수》라는 책을 참고하였다.나는 이 책을 총결산해 보겠다.
마지막

다음
https://qiita.com/NNNiNiNNN/items/4fd5367f9ead6e5905a9

좋은 웹페이지 즐겨찾기