機器學習一(梯度下降法)

2021-08-14 20:46:34 字數 3581 閱讀 1813

最近偶觸python,感ctrl c和ctrl v無比順暢,故越發膨脹。怒拾起python資料分析一pdf讀之,不到百頁,內心惶恐,嘆:臥槽,這都tm是啥,甚是迷茫。遂感基礎知識薄弱,隨意搜了機器學習教程,小看一翻。此文給出課件中幾個演算法,自己都不知道對不對,感覺還可以吧。

本文以線性回歸為例,在給出若干(x, y)下,找到方程y=b+ax中b和a,從而給出線性方程。具體理論實在理解尚淺,只給出求解公式。下面**放在乙個python檔案中即可。**部分用到矩陣和向量乘法,作為求和,有乙個numpy符號*、dot、multipy區別寫在末尾

具體公式如下(課件抄的),已知樣本符合如下線性方程: h(

x)=∑

i=0n

θixi

=θtx

,(x0

=1)

求解下面cost function最小值時,

θ 的值,i是樣本編號,m是樣本總數 j(

θ)=1

2∑i=

1m(h

θ(x(

i))−

y(i)

)2轉換為梯度下降法求解如下公式: θj

=θj−

α∂∂θ

jj(θ

) ∂∂

θjj(

θ)=(

hθ(x

)−y)

xj(1)批量梯度下降演算法(batch gradient descent)

偽**如下

repeat until convergence

import numpy as np

# y=theta*x

defh

(theta, example_x):

return theta * example_x.t

defbatch_gradient_descent

(x, y, theta0, alpha, iterator):

example_x = np.matrix(x)

label_y = np.matrix(y)

theta = np.matrix(theta0, dtype=float)

for i in range(iterator):

error = (label_y - h(theta, example_x))

sum_gradient = error * example_x

theta = theta + alpha * sum_gradient

return theta

(2)隨機梯度下降演算法(stochastic gradient descent)

偽**如下

loop

} **如下

def

stochastic_gradient_descent

(x, y, theta0, alpha, iterator):

example_x = np.matrix(x)

label_y = np.matrix(y)

theta = np.matrix(theta0, dtype=float)

m, n = np.shape(example_x)

for i in range(iterator):

for j in range(m):

gradient = (label_y[0, j] - h(theta, example_x[j])) * example_x[j]

theta = theta + alpha * gradient

return theta

(3)locally weighted linear regression algorithm

這個也不知道怎麼翻譯,就是帶權重的線性回歸,求解方法也就叫權重梯度下降法吧。這個自己不知道對不對,課件沒給出具體步驟,也沒搜到具體內容。感覺和上兩個演算法也不該放一起比較,場景不太一致。這就放一起吧。

求解公式,按照下面公式在(2)上加了個w,演算法步驟與(2)一樣 fi

tθto

mini

mize

∑iw(

i)(y

(i)−

θtx(

i))2

w(i)=ex

p(−(

x(i)

−x)2

2τ2)

上公式中x看做所有樣本x每列的平均值,暫時這樣處理吧。

**如下:

def

w(xi, ex, t):

return np.exp(-np.multiply((xi - ex), (xi - ex))/2*t*t)

# locally weighted linear regression algorithm

deflocally_gradient_descent

(x, y, theta0, alpha, iterator, t):

example_x = np.matrix(x)

label_y = np.matrix(y)

theta = np.matrix(theta0, dtype=float)

m, n = np.shape(example_x)

ex = np.mean(example_x, axis=0)

for i in range(iterator):

for j in range(m):

wj = w(example_x[j], ex, t)

gradient = np.multiply(wj, (label_y[0, j] - h(theta, example_x[j])) * example_x[j])

theta = theta + alpha * gradient

return theta

注意:numpy的matrix,負號*與dot是一樣的,都表示矩陣乘法,行列對應一致。multiply是矩陣各對應位置相乘。例:[1,2]*[[1],[2]]=numpy.dot([1,2],[[1],[2]])=[5],numpy.multiply([1,2], [[1],[2]])=[[1,2],[2,4]]

資料明顯給出y=1+2x

x = [[1, 1], [1, 2], [1, 3]]

y = [3, 5, 7]

theta0 = [2, 3]

print(batch_gradient_descent(x=x, y=y, theta0=theta0, alpha=0.1, iterator=50))

print(stochastic_gradient_descent(x=x, y=y, theta0=theta0, alpha=0.1, iterator=50))

print(locally_gradient_descent(x=x, y=y, theta0=theta0, alpha=0.1, iterator=50, t=2))

求解結果如下(θ0

和θ1 ),是不是很像1,2

[[ 1.0748101 1.96709091]]

[[ 1.04498802 1.98500399]]

[[ 0.99706172 2.0013277 ]]

最優化演算法(一) 梯度下降法

梯度下降法的目標是 此時輸入 目標函式f x 梯度函式g x 精度e 輸出 f x 的極小點 1 取初始值 2 計算 3 計算梯度值更新,k k 1。注意 一般當目標函式為凸函式時,梯度下降法為全域性最優解,對於複雜函式並不一定。對於梯度下降有兩種實現方法 批量梯度下降 每次遍歷所有的樣本取最小化所...

機器學習(三) 梯度下降法

本部落格大部分參考了這篇博文 在微積分裡面,對多元函式的引數求 偏導數,把求得的各個引數的偏導數以向量的形式寫出來,就是梯度。比如函式f x,y 分別對x,y求偏導數,求得的梯度向量就是 f x f y 簡稱gr adf x,y 或者 f x,y 如果是3個引數的向量梯度,就是 f x f y,f ...

機器學習(二) 梯度下降法

前言 在上篇博文機器學習 一 中,最後我們提到,通過計算代價函式j 是否收斂於最小值來確定假設函式的引數 進而訓練出機器學習中的線性回歸演算法,那麼如何來找到使得j 最小話的引數 呢,本篇博文將介紹一種常用的方法,梯度下降法來確定引數 值。一 對於單特徵線性回歸,梯度下降法的演算法如下 repeat...