python過擬合 梯度下降 過擬合和歸一化

2021-10-19 22:06:20 字數 1548 閱讀 1993

梯度下降法

批量梯度下降

·初始化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)

希望與廣大網友互動??

防止過擬合以及解決過擬合

過擬合 為了得到一致假設而使假設變得過度複雜稱為過擬合。乙個過配的模型試圖連誤差 噪音 都去解釋 而實際上噪音又是不需要解釋的 導致泛化能力比較差,顯然就過猶不及了。這句話很好的詮釋了過擬合產生的原因,但我認為這只是一部分原因,另乙個原因是模型本身並不能很好地解釋 匹配 資料,也就是說觀測到的資料並...

過擬合以及如何防止過擬合

過擬合即模型在訓練過程中對模型引數進行擬合的過程中,由於訓練資料集存在抽樣誤差 雜訊 複雜的模型在訓練的過程中會將抽樣誤差也一同進行擬合。這就導致訓練好的模型在訓練集上的表現很好,在測試集上的表現很差的原因。導致過擬合的主要原因有兩個 資料量太少和模型過於複雜 因為機器學習演算法在擬合出正確的規則後...

過擬合欠擬合

一篇文章,帶你明白什麼是過擬合,欠擬合以及交叉驗證 在本文中也許你會掌握機器學習中最核心的概念 偏差 方差權衡.其主要想法是,你想建立盡可能 準確並且仍能適用於新資料的模型 這是泛化 危險的是,你可以輕鬆的在你制定的資料中建立過度擬合本地噪音的模型,這樣的模型是無用的,並且導致弱泛化能力,因為雜訊是...