데이터 수가 입력 비트보다 적을 때의 회귀 분석

입문


이 기사고천 연구실 Workout_calendar 4일째 보도.
이 보도는 고천 연구실 학생들이 학습의 일환으로 쓴 것이다.
본 보도는 회귀 분석을 서술한다.
재회귀 분석을 처리했을 때 프로그램이 바뀌어서 예측치가 엉망진창이었어요!이런 일은 자주 일어나죠.그 중 하나는 학습 데이터의 유형(대소)일 수 있다.재회귀에서 데이터 수가 입력한 비트보다 적으면 출력 값에 큰 차이가 발생할 수 있습니다.
이 글은 재회귀 분석의 알고리즘을 상세하게 서술한 후에 입력이 높고 데이터 수가 적은 상황에서 무슨 일이 일어났는지, 그리고 그 해결 방법을 서술했다.

무엇이 회귀 분석입니까


문제 설정


관측 데이터 $\mathbfx\in\mathbb R^D$로 D 비트 벡터를 입력하고 $y\in\mathbb R$대 $\left\{(\mathbf{x}_n,y_n)\right\}_{n=1}^N$에서 $y=f(\bf{x})$의 함수 $f$를 추정합니다

해중 회귀 분석

\begin{eqnarray}
    f(\mathbf{x})=w^{(1)}x^{(1)}+w^{(2)}x^{(2)}+...+w^{(D)}x^{(D)} 
\end{eqnarray}
버려진 함수에 대한 지원이 부족합니다.
\begin{eqnarray}
    f(\mathbf{x})=\sum_{d=1}^{D}{w^{(d)}}{x^{(d)}} 
\end{eqnarray}
$\mathbf{w}=({w^{(1)}},{w^{(2)}},...,{w^{(D)}})^T,\mathbf{x}=(x^{(1)},x^{(2)},...x^{(D)})^T$
\begin{equation}
    f(\mathbf{x})=\mathbf{w}^T\mathbf{x} 
\end{equation}
관측 데이터 출력과 모델 출력의 제곱 오차 총계 $J_\mathrm{LS} (\mathbf{w}) $\mathbf{w}$, $\mathbf{w}$를 구하십시오.
\begin{align}
J_\mathrm{LS}(\mathbf{w})&=\sum_{n=1}^{N}(y_n-f(\mathbf{w}))^2\\
&=\sum_{n=1}^{N}(y_n-\mathbf{w}^T\mathbf{x}_n)^2\\
&=\sum_{n=1}^{N}(y_n-\mathbf{x}_n^T\mathbf{w})^2
\end{align}
\mathbf{y}=(y_1,y_2,...,y_N)^T,\mathbf{X}=\begin{pmatrix}x_1^{(1)} & x_1^{(2)} & \cdots & x_1^{(D)} \\
x_2^{(1)} & x_2^{(2)} & \cdots & x_2^{(D)} \\
\vdots & \vdots & \ddots & \vdots \\
x_N^{(1)} & x_N^{(2)} & \cdots & x_N^{(D)}&\end{pmatrix}
어쨌든
\begin{eqnarray}
    J_\mathrm{LS}(\mathbf{w})&=&(\mathbf{y}-\mathbf{X}\mathbf{w})^T(\mathbf{y}-\mathbf{X}\mathbf{w})\\
    &=&(\mathbf{y}^T-\mathbf{w}^T\mathbf{X}^T)(\mathbf{y}-\mathbf{X}\mathbf{w})\\
    &=&\mathbf{y}^T\mathbf{y}-\mathbf{y}^T\mathbf{X}\mathbf{w}-\mathbf{w}^T\mathbf{X}^T\mathbf{y}+\mathbf{w}^T\mathbf{X}^T\mathbf{X}\mathbf{w}\\
    &=&\mathbf{y}^T\mathbf{y}-2\mathbf{w}^T\mathbf{X}^T\mathbf{y}+\mathbf{w}^T\mathbf{X}^T\mathbf{X}\mathbf{w}\\
\end{eqnarray}
위쪽 형식을 $\mathbf{w}$로 설정하면 0이 됩니다.
\begin{eqnarray}
    \frac{\partial}{\partial \mathbf{w}}J_\mathrm{LS}&=&\frac{\partial}{\partial \mathbf{w}}(\mathbf{y}^T\mathbf{y}-2\mathbf{w}^T\mathbf{X}^T\mathbf{y}+\mathbf{w}^T\mathbf{X}^T\mathbf{X}\mathbf{w})\\
    0&=&0-2\mathbf{X}^T\mathbf{y}+\{\mathbf{X}^T\mathbf{X}+(\mathbf{X}^T\mathbf{X})^T\}\mathbf{w}\\
    2\mathbf{X}^T\mathbf{X}\mathbf{w}&=&2\mathbf{X}^T\mathbf{y}\\
\mathbf{X}^T\mathbf{X}\mathbf{w}&=&\mathbf{X}^T\mathbf{y}\\
\mathbf{w}&=&(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y}
\end{eqnarray}
매개 변수 $\mathbf{w}$를 구할 수 있습니다!

구체적인 예를 응용해 보다


그날의 기온과 습도에 따라 아이스크림 가게의 하루 매출액의 복귀를 예측하는 문제를 고려해 보자.
# 必要なライブラリのimport
import numpy as np
import random
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# 入力データセット
N = 20
a1 = 1
a2 = 15
temp = np.random.uniform(22,35,N)
humi = np.random.uniform(0.0,0.9,N)
sales = a1*temp + a2*humi + np.random.rand(N)*2 - 1

# キャンバス作成
fig = plt.figure(figsize=(9, 9))
ax = fig.add_subplot(1, 1, 1, projection='3d')
ax.set_title("example data: sales of ice")
ax.set_xlabel("humidity")
ax.set_ylabel("temperature")
ax.set_zlabel("sales of ice")
ax.scatter(temp, humi, sales,s=30, c='red')
# データセットを行列に
x_1 =temp [:,None]
x_2 =humi [:,None]
y = sales
X = np.concatenate([x_1,x_2],axis=1)

# 重回帰の解
w = np.linalg.inv(X.T@X)@X.T@y
new_samples_num = 30
new_temp,new_humi=np.meshgrid(np.linspace(22,35,new_samples_num),np.linspace(0.0,0.9))
new_temp=new_temp[:,:,None]
new_humi=new_humi[:,:,None]
new_X=np.concatenate([new_temp, new_humi], axis=2)
new_y=new_X[:,:,0]*w[0]+new_X[:,:,1]*w[1]

fig=plt.figure(1)
ax=Axes3D(fig)
ax.set_xlabel('temperature')
ax.set_ylabel('humidity')
ax.set_zlabel('sales')
ax.set_title('regression by linear model')
ax.scatter(X[:,0],X[:,1],y,c='red',label='trainig data $(x_{n1},x_{n2},y_n)$')
ax.plot_wireframe(new_X[:,:,0], new_X[:,:,1], new_y, color='b',label='estimated function $f_w(x)$')
plt.legend(fontsize=12)
plt.show()


기온과 습도로 당일 아이스크림 매출을 예측할 수 있습니다!

입력한 비트가 데이터 수보다 많을 때


다음 회귀 모형의 해를 보면 회귀 중 $\mathbf{X}^T\mathbf{X}$에 역행렬이 있는 것이 정규라고 가정합니다.
\begin{eqnarray}
\mathbf{w}&=&(\mathbf{X}^T\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y}
\end{eqnarray}
입력한 비트 $D$가 데이터 $N$보다 큰 경우를 고려해 보십시오. $(D>N)$
$\mathbf{X}$에 대해 기이한 값을 분해합니다.
\begin{eqnarray}
\mathbf{X}=U\Sigma V^T
\end{eqnarray}
단, $\Sigma$는 $N\times D$의 행렬에서 다음과 같은 특성을 가진다.($U, V$는 직교 행렬)
\begin{eqnarray}
\Sigma &=& [\Delta,\mathbf{0}] \\
\Delta &=& {\rm diag}(\sigma_1, \dots, \sigma_N)
\end{eqnarray}
지금
\begin{eqnarray}
\mathbf{X}^T\mathbf{X}&=&(U\Sigma V^T)^TU\Sigma V^T\\
&=&V \Sigma^T U^T U \Sigma V^T\\
&=&V \Sigma^T \Sigma V^T\\
&=&V\begin{pmatrix} \Delta ^2 & \mathbf{0} \\
\mathbf{0} & \mathbf{0}
\end{pmatrix}V^T
\end{eqnarray}
$\mathbf{X}^T\mathbf{X}$는 비정규입니다.수학적으로'역행렬을 구하지 않는다'로 끝났지만, 수치 계산상 $\Sigma^T\Sigma$의 원소는 상식처럼 완전히 $0$가 아니라 $0$에 가까운 아주 작은 값을 넣었다.이에 비해 역 행렬을 억지로 계산해야 하기 때문에 $\mathbf {w}$의 요소는 매우 큰 값을 가지고 이 모델에서 내보낸 출력 사이에 큰 차이가 있습니다.

해결 방법


$\mathbf{X}^T\mathbf{X}$가 비정규일 때 척추 회귀 방법을 사용할 수 있습니다.(다른 것은 과도한 학습을 방지하는 데도 쓰인다)
척추 회귀는 권중방향량 $\mathbf {w}$의 크기에 대해 벌을 줍니다.($\alpha>0$)
\begin{eqnarray}
    J_\mathrm{LS}(\mathbf{w})&=&\|\mathbf{y}-\mathbf{Xw}\|^2+\alpha\|\mathbf{w}\|^2
\end{eqnarray}
$\mathbf{w}$로 미분하면
\begin{eqnarray}
    \mathbf{w}=(\mathbf{X}^T\mathbf{X}+\alpha I)^{-1}\mathbf{X}^T\mathbf{y}
\end{eqnarray}
그래.
$\mathbf{X}$의 기이한 값 분해를 고려
\begin{eqnarray}
    \mathbf{X}&=&U\Sigma V^T\\
    \mathbf{X}^T\mathbf{X}+\alpha I &=& (U\Sigma V^T)^T U\Sigma V^T+\alpha I\\
    &=&V\Sigma^2V^T+\alpha VIV^T\\
    &=&V(\Sigma^2+\alpha I)V^T
\end{eqnarray}
하계.
$\mathbf{X}^T\mathbf{X}+\alpha I$의 고유 값은 $\mathbf{X}$의 특이 값의 제곱에 플러스입니다. 따라서 모두 플러스입니다.
따라서 피쳐 값이 0이 되지 않습니다.
\begin{eqnarray}
    \rm{det}(\mathbf{X}^T\mathbf{X}+\alpha I)>0
\end{eqnarray}
$\mathbf{X}^T\mathbf{X}+\alpha I$가 정규이고 역 행렬이 있습니다!

총결산


재회귀 분석에서 입력된 비트 데이터 수가 부족한 상황에서 해결 방법과 이를 해결하는 이유를 설명했다.
여러분도 문제가 발생할 때 자신이 처리하는 수법이 무엇인지를 전제로 고려할 수 있습니다.
참고 문헌: 패턴 식별과 기계 학습(상, 하)

좋은 웹페이지 즐겨찾기