鞍點
梯度下降
交叉驗證歸一化回歸模型評價指標
定義:
乙個不是區域性最小值的駐點(一階導數為0的點)稱為鞍點。數學含義是: 目標函式在此點上的梯度(一階導數)值為 0, 但從改點出發的乙個方向是函式的極大值點,而在另乙個方向是函式的極小值點。
解決鞍點
根據樣本大小選擇哪個梯度下降(批量梯度下降,mini-batch)
如果樣本量比較小,採用批量梯度下降演算法。如果樣本太大,使用隨機梯度下降演算法。在一般情況下,採用小批量梯度下降演算法。
sgd和mini-batch的**
class gd():
def __init__(self,epochs=20000,lr=0.01,b=0,w=0):
""":param epochs: 迭代次數
:param lr: 學習率
:param b: 初始偏置
:param w: 初始權重
"""self.epochs = epochs
self.lr = lr
self.b = b
self.w =w
def gradient_descent(self,x_data,y_data):
"""梯度下降,計算w權值和b偏置
:return:
"""# 計算總資料量
m = float(len(x_data))
for i in range(self.epochs):
b_grad = 0
k_grad = 0
# 計算梯度的總和再求平均
for j in range(len(x_data)):
b_grad += -(1 / m * (y_data[j] - self.b - self.w *x_data[j]))
k_grad += -(1 / m * (y_data[j] - self.b - self.w *x_data[j])) * x_data[j]
# 更新 b 和 k
self.b = self.b - (self.lr * b_grad)
self.w= self.w- (self.lr * k_grad)
return self.b,self.w
def stochastic_gradient_descent(self,x_data,y_data):
"""隨機梯度下降,每次都要更新權值,計算w權值和b偏置
:return:
"""for i in range(self.epochs):
for j in range(len(x_data)):
b_grad = -(y_data[j] - self.b - self.w * x_data[j])
k_grad = -(y_data[j] - self.b - self.w * x_data[j]) * x_data[j]
# 更新 b 和 k
self.b = self.b - (self.lr * b_grad)
self.w = self.w - (self.lr * k_grad)
return self.b,self.w
def mini_batch_(self,x_data,y_data,mini_batch=10):
"""把樣本分成幾份,每乙個訓練乙份
:return:
"""m = float(len(x_data))/mini_batch
for i in range(self.epochs):
for index in range(mini_batch):
b_grad = 0
k_grad = 0
# 計算梯度的總和再求平均
x_data = x_data[index*m:m*(index+1)]
y_data = y_data[index*m:m*(index+1)]
for j in range(len(x_data)):
b_grad += -(1 / m * (y_data[j] - self.b - self.w * x_data[j]))
k_grad += -(1 / m * (y_data[j] - self.b - self.w * x_data[j])) *\
x_data[j]
# 更新 b 和 k
self.b = self.b - (self.lr * b_grad)
self.w = self.w - (self.lr * k_grad)
return self.b,self.w
注意:
在機器學習中資料分為訓練集(train set),,驗證資料(validation set,測試集(test set),訓練集合驗證集有標籤,測試集是真的使用沒有標籤。
交叉驗證就是整合學習使用的方法。
歸一化是一種簡化計算的方式,即將有量綱的表示式,經過變換,化為無量綱的表示式,成為標量。 在多種計算中都經常用到這種方法。
注意:在測試資料時使用了歸一化,在驗證資料必須使用一樣的方法即max和min相同。
f if_
fi**值,yiy_
yi真實值,y
ˉ\bar
yˉ真實值的平均
機器學習(二) 梯度下降法
前言 在上篇博文機器學習 一 中,最後我們提到,通過計算代價函式j 是否收斂於最小值來確定假設函式的引數 進而訓練出機器學習中的線性回歸演算法,那麼如何來找到使得j 最小話的引數 呢,本篇博文將介紹一種常用的方法,梯度下降法來確定引數 值。一 對於單特徵線性回歸,梯度下降法的演算法如下 repeat...
機器學習一(梯度下降法)
最近偶觸python,感ctrl c和ctrl v無比順暢,故越發膨脹。怒拾起python資料分析一pdf讀之,不到百頁,內心惶恐,嘆 臥槽,這都tm是啥,甚是迷茫。遂感基礎知識薄弱,隨意搜了機器學習教程,小看一翻。此文給出課件中幾個演算法,自己都不知道對不對,感覺還可以吧。本文以線性回歸為例,在給...
機器學習(三) 梯度下降法
本部落格大部分參考了這篇博文 在微積分裡面,對多元函式的引數求 偏導數,把求得的各個引數的偏導數以向量的形式寫出來,就是梯度。比如函式f x,y 分別對x,y求偏導數,求得的梯度向量就是 f x f y 簡稱gr adf x,y 或者 f x,y 如果是3個引數的向量梯度,就是 f x f y,f ...