線性回歸以及梯度下降的學習

2021-08-02 09:53:43 字數 3749 閱讀 8723

最近打算重新學習機器學習,為資料分析打好基礎,本章記錄線性回歸以及梯度下降的內容。

在機器學習中,線性回歸是乙個較簡單的模型,屬於監督學習。先給定乙個訓練集,根據這個訓練集學習出乙個線性函式,然後測試此函式是否足夠擬合訓練集資料,挑選出最好的函式(代價最小)即可。

一、概念:

1、線性回歸的假設模型:

為了評估假設模型,需要引入代價函式(cost function)的概念。

2、線性回歸的最小二乘的損失函式(cost function):

用梯度下降的方法來更新權值,使得代價函式最小。梯度下降分為:批量梯度下降、隨機梯度下降和小批量隨機梯度下降。

3、批量梯度下降:

它的具體思路是在更新每乙個引數時使用所有的樣本來進行更新,它得到的是乙個全域性最優解,但是每迭代一步,都要用到訓練集所有的資料,具體的偽**如下:

4、隨機梯度下降:

用樣本中的乙個例子來近似我所有的樣本,來調整

θ

,會帶來一定的問題,因為計算得到的並不是準確的乙個梯度,容易陷入到區域性最優解中,具體的偽**如下:

5、小批量隨機梯度:其實批量的梯度下降就是一種折中的方法,用一些小樣本來近似全部的,即隨機選擇一定數量的樣本來表示全部的。具體的偽**是:

二、**

1、批量梯度下降的demo:

import numpy as np

import matplotlib.pyplot as plt

import mathimport numpy as np

x_train = np.array([[1,2],[2,1],[2,3],[3,5],[1,3],[4,2],[7,3],[4,5],[11,3],[8,7]])

y_train = np.array([7, 8, 10, 14, 8, 13, 20, 16, 28, 26])

test_train=np.array([[1,3],[2,2],[3,2]])

k1=k2=k3=k4=k0=0

rating=0.0001

i=s1=0

s0=0

while i<100000:

sum_k1=sum_k2=sum_k3=s1=0

for x,y in zip(x_train,y_train):        

s1=s1+(k3+k1*x[0]+k2*x[1]-y)*(k3+k1*x[0]+k2*x[1]-y)/2

sum_k1=sum_k1+(k3+k1*x[0]+k2*x[1]-y)*x[0]

sum_k2=sum_k2+(k3+k1*x[0]+k2*x[1]-y)*x[1]

sum_k3=sum_k3+(k3+k1*x[0]+k2*x[1]-y)

k1=k1-rating*sum_k1

k2=k2-rating*sum_k2

k3=k3-rating*sum_k3

if math.fabs(s1-s0)<0.000001:

print(k3,k1,k2)

print(i)

break

else:

s0=s1

i=i+1       

2、隨機梯度下降:
import random

import math

#this is a sample to simulate a function y = theta1*x1 + theta2*x2

x_train = [[1,4], [2,5], [5,1], [4,2]]

y_train = [19,26,19,20]

theta = [1,1]

rating= 0.001

j=s0=0

while(j<100000):

s1=0

#每一次選取隨機的乙個點進行權重的更新

i = random.randint(0,3)

pred_y = theta[0]*x_train[i][0]+theta[1]*x_train[i][1]

theta[0] = theta[0] - rating * (pred_y - y_train[i]) * x_train[i][0]

theta[1] = theta[1] - rating * (pred_y - y_train[i]) * x_train[i][1]

for x,y in zip(x_train,y_train):

pred_y = theta[0]*x[0]+theta[1]*x[1]

s1=s1+(pred_y-y)*(pred_y-y)/2

if(math.fabs(s1-s0)<0.00001):

print(theta)

break

else:

s0=s1

j=j+1

3、小批量梯度下降          

import random

import math

#this is a sample to simulate a function y = theta1*x1 + theta2*x2

x_train = [[1,4], [2,5], [5,1], [4,2]]

y_train = [19,26,19,20]

theta = [1,1]

rating= 0.001

eps =0.0001

j=s0=0

while(j<100000):

s1=0

#選取隨機的2個點進行權重的更新

i = random.randint(0,2)

pred_y = theta[0]*x_train[i][0]+theta[1]*x_train[i][1]

theta[0] = theta[0] - rating * (pred_y - y_train[i]) * x_train[i][0]

theta[1] = theta[1] - rating * (pred_y - y_train[i]) * x_train[i][1]

i=i+1

pred_y = theta[0]*x_train[i][0]+theta[1]*x_train[i][1]

theta[0] = theta[0] - rating * (pred_y - y_train[i]) * x_train[i][0]

theta[1] = theta[1] - rating * (pred_y - y_train[i]) * x_train[i][1]

for x,y in zip(x_train,y_train):

pred_y = theta[0]*x[0]+theta[1]*x[1]

s1=s1+(pred_y-y)*(pred_y-y)/2

if(math.fabs(s1-s0)<0.00001):

print(theta)

print(j)

break

else:

s0=s1

j=j+1

線性回歸 梯度下降

線性回歸演算法屬於監督學習的一種,主要用於模型為連續函式的數值 過程總得來說就是初步建模後,通過訓練集合確定模型引數,得到最終 函式,此時輸入自變數即可得到 值。1 初步建模。確定假設函式 h x 最終 用 2 建立價值函式 j 也叫目標函式 損失函式等,求引數 用 3 求引數 對價值函式求偏導 即...

線性回歸梯度下降

梯度下降 一種最優化演算法,就是沿著函式的梯度方向尋找函式的最小值 線性回歸模型 最終的目標就是利用 梯度下降法 求出使 誤差函式 最小的線性函式的系數值 梯度下降演算法有兩種 1.批量梯度下降 batch gradient descent 2.隨機梯度下降 stochastic gradient ...

線性回歸 梯度下降

利用回歸方程對乙個或多個自變數和因變數之間進行建模的分析方式損失 計算損失用最小二乘法。優化。優化有兩種方式。一種是正規方程解法通常只適用於極少量資料,一般不會用 二是梯度下降的方式通常使用梯度下降 梯度下降的簡介。梯度就是倒導數 切線。沿著切線的方向下降的最快。梯度下降有兩個引數,起始點和學習率 ...