梯度下降法
批量梯度下降
·初始化w,即隨機w,給初值
· 沿著負梯度方向迭代,更新後的w使得損失函式j(w)更小
· 如果w維度是幾百維度,直接算svd也是可以的,幾百維度以上一般是梯度下降演算法
# 批量梯度下降
import numpy as np
# 自己建立建資料,哈哈
x = 2 * np.random.rand(100, 1)
y = 4 + 3 * x + np.random.randn(100, 1)
x_b = np.c_[np.ones((100, 1)), x]
learning_rate = 0.1 # 學習率,步長=學習率x梯度
n_iterations = 1000 # 迭代次數,一般不設定閾值,只設定超引數,迭代次數
m = 100 # m個樣本
theta = np.random.randn(2, 1) # 初始化引數theta,w0,...,wn
count = 0 # 計數
for iteration in range(n_iterations):
count += 1
# 求梯度
gradients = 1/m * x_b.t.dot(x_b.dot(theta)-y)
# 迭代更新theta值
theta = theta - learning_rate * gradients
# print(count, theta)
print(count, theta)
隨機梯度下降
· 優先選擇隨機梯度下降
· 有些時候隨機梯度下降可以跳出區域性最小值
import numpy as np
x = 2 * np.random.rand(100, 1)
y = 4 + 3 * x + np.random.randn(100, 1)
x_b = np.c_[np.ones((100, 1)), x]
n_epochs = 500
t0, t1 = 5, 50
m = 100
def learning_schedule(t):
return t0/(t + t1)
# 隨機初始化引數值
theta = np.random.randn(2, 1)
for epoch in range(n_epochs):
for i in range(m):
random_index = np.random.randint(m)
xi = x_b[random_index:random_index+1]
yi = y[random_index:random_index+1]
gradients = 2*xi.t.dot(xi.dot(theta)-yi)
learning_rate = learning_schedule(epoch*m + i)
theta = theta - learning_rate * gradients
print(theta)
希望與廣大網友互動??
防止過擬合以及解決過擬合
過擬合 為了得到一致假設而使假設變得過度複雜稱為過擬合。乙個過配的模型試圖連誤差 噪音 都去解釋 而實際上噪音又是不需要解釋的 導致泛化能力比較差,顯然就過猶不及了。這句話很好的詮釋了過擬合產生的原因,但我認為這只是一部分原因,另乙個原因是模型本身並不能很好地解釋 匹配 資料,也就是說觀測到的資料並...
過擬合以及如何防止過擬合
過擬合即模型在訓練過程中對模型引數進行擬合的過程中,由於訓練資料集存在抽樣誤差 雜訊 複雜的模型在訓練的過程中會將抽樣誤差也一同進行擬合。這就導致訓練好的模型在訓練集上的表現很好,在測試集上的表現很差的原因。導致過擬合的主要原因有兩個 資料量太少和模型過於複雜 因為機器學習演算法在擬合出正確的規則後...
過擬合欠擬合
一篇文章,帶你明白什麼是過擬合,欠擬合以及交叉驗證 在本文中也許你會掌握機器學習中最核心的概念 偏差 方差權衡.其主要想法是,你想建立盡可能 準確並且仍能適用於新資料的模型 這是泛化 危險的是,你可以輕鬆的在你制定的資料中建立過度擬合本地噪音的模型,這樣的模型是無用的,並且導致弱泛化能力,因為雜訊是...