이중 강하의 예
2514 단어 파이썬
1. 이중 강하의 예
논문 Two models of double descent for weak features ( htps : // 아 rぃ v. rg/아bs/1903.07571 )의 예
htps : // 기주 b. 이 m/와 h마에/어떻게 bぇ-에서 s선 t-사 mpぇ/bぉb/마이/사 mpぇ. 이 pyn b
$\beta = (\beta_{1},\beta_{2},....,\beta_{D})\in\mathbb{R}^D : 고정 $
$ x = (x_{1},x_{2},....,x_{D}) : 정규분포$
$\sigma\epsilon : 노이즈 $
$y = x^*\beta +\sigma\epsilon =\sum_{j=1}^{D} x_{j}\beta_{j} +\sigma\epsilon$
초기 설정
D=200
train_num=80 #学習データの数
test_num=20 #テストデータの数
sigma = 1/5 #ノイズの標準偏差
b = 2 * np.random.rand(D) -1
b = b / np.linalg.norm(b) # β |β|=1
학습 데이터, 테스트 데이터(x)
train_X = np.random.randn(train_num, D)
test_X = np.random.randn(test_num,D)
학습 데이터, 테스트 데이터(y)
train_y = np.matmul(train_X, b.T) + np.random.normal(0, sigma, train_num)
test_y = np.matmul(test_X, b.T) + np.random.normal(0, sigma, test_num)
파라미터 수를 제한했을 때의 β의 예측값
def calc_reg(param_num):
b_pred = np.linalg.lstsq(train_X[:,:param_num], train_y, rcond=None)[0]
return b_pred
예측 매개 변수 중 손실
def calc_loss(X, y, param_num, b_pred):
y_pred = np.matmul(X[:,:param_num], b_pred.T)
loss = np.sum(np.abs((y - y_pred)*2))/ len(y)
return loss
파라미터 수를 변경했을 때의 학습 데이터 및 테스트 데이터의 loss
param_nums = []
train_losses = []
test_losses = []
for param_num in range(1,D+1):
b_pred = calc_reg(param_num)
train_loss = calc_loss(train_X, train_y, param_num, b_pred)
test_loss = calc_loss(test_X, test_y, param_num, b_pred)
param_nums.append(param_num)
train_losses.append(train_loss)
test_losses.append(test_loss)
시각화
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,8))
ax.plot(param_nums, train_losses, label="train")
ax.plot(param_nums, test_losses, label="test")
ax.legend(loc=0)
plt.ylim(-1,5)
fig.tight_layout()
plt.show()
loss 그래프
Reference
이 문제에 관하여(이중 강하의 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/voyager/items/339cce0a3e59798b7bd0
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
D=200
train_num=80 #学習データの数
test_num=20 #テストデータの数
sigma = 1/5 #ノイズの標準偏差
b = 2 * np.random.rand(D) -1
b = b / np.linalg.norm(b) # β |β|=1
train_X = np.random.randn(train_num, D)
test_X = np.random.randn(test_num,D)
train_y = np.matmul(train_X, b.T) + np.random.normal(0, sigma, train_num)
test_y = np.matmul(test_X, b.T) + np.random.normal(0, sigma, test_num)
def calc_reg(param_num):
b_pred = np.linalg.lstsq(train_X[:,:param_num], train_y, rcond=None)[0]
return b_pred
def calc_loss(X, y, param_num, b_pred):
y_pred = np.matmul(X[:,:param_num], b_pred.T)
loss = np.sum(np.abs((y - y_pred)*2))/ len(y)
return loss
param_nums = []
train_losses = []
test_losses = []
for param_num in range(1,D+1):
b_pred = calc_reg(param_num)
train_loss = calc_loss(train_X, train_y, param_num, b_pred)
test_loss = calc_loss(test_X, test_y, param_num, b_pred)
param_nums.append(param_num)
train_losses.append(train_loss)
test_losses.append(test_loss)
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(8,8))
ax.plot(param_nums, train_losses, label="train")
ax.plot(param_nums, test_losses, label="test")
ax.legend(loc=0)
plt.ylim(-1,5)
fig.tight_layout()
plt.show()
Reference
이 문제에 관하여(이중 강하의 예), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/voyager/items/339cce0a3e59798b7bd0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)