機器學習(二)梯度下降 歸一化 交叉驗證 模型評判

2021-09-22 20:14:56 字數 2805 閱讀 6116

鞍點

梯度下降

交叉驗證歸一化回歸模型評價指標

定義:

乙個不是區域性最小值的駐點(一階導數為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 ...