機器學習 一元線性回歸演算法

2021-10-02 09:14:48 字數 3340 閱讀 2434

線性回歸

線性回歸擬合原理(fit方法)

ridge回歸 :損失函式+l2

lasso回歸 : 損失函式+l1 。懲罰項係數alpha高,菱形面積小,alpha低,菱形面積大

elastic net :損失函式+ l1+l2

舉例:lasso回歸是隨機梯度下降+l1,此處選擇懲罰項係數為0.15 與 之對比的sgd隨機梯度下降懲罰項選擇l1 ,兩個的效果是一樣的

ridge回歸 :損失函式+l2 此處選擇懲罰項係數為1 與 之對比的sgd隨機梯度下降懲罰項選擇l2 ,兩個的效果是一樣的

elastic net :損失函式+ l1+l2

sgd的penalty選擇elasticnet。

alpha表示懲罰項要有多嚴厲,l1_ratio表示偏重(l1/l2)的程度,l1_ratio=0.15,由下圖elastic net 的損失函式可知,正則偏重l2.

**步驟如下:

**一組資料中當輸入為12 對應輸出的值。**如下:

import numpy as np

x=np.array([1,2,3,4,5,6,7,8,9,10,11]).reshape(-1,1)#x從一維轉為二維

y=np.array([3,4,5,7,9,11,13,15,17,19,21])#y:一維

#例項化物件

lin_reg= linearregression()

#呼叫fit方法 訓練模型找規律

lin_reg.fit(x,y)

#找到規律 截距與斜率

print(lin_reg.intercept_,lin_reg.coef_)

#**x=12對應的y

x_new=np.array([[12]]) #建立陣列

print(lin_reg.predict(x_new))

執行結果:

0.03636363636363171 [1.87272727]

[22.50909091]

使得損失函式最小的方法:梯度下降法

思想:1:隨機初始化引數確定模型,得到乙個損失函式值

2:使用特殊的更新方法更新引數,使得每一次所對應的損失函式的值越來越小。

3:直到更新引數損失函式的值變化波動不大,表示斜率到達最平穩處引數不變化進而損失函式不變化,找到損失函式最小值,此時對應的引數為最優解。

即:

損失函式是乙個凸函式,斜率變化是逐漸平緩的

如果α太小的話,梯度下降會很慢

如果α太大的話,梯度下降越過最小值,不僅不會收斂,而且有可能發散

即使學習率α是固定不變的,梯度下降也會熟練到乙個最低點

因為隨著梯度下降迭代次數的遞增,斜率會趨於平緩,也就是說,導數部分?/(??_1 ) ?(?_0,?_1 )會慢慢變小

做法: 根據上圖公式

1> 求出損失函式對引數的偏導數

2> 損失函式對引數的偏導數乘學習率(梯度下降的幅度),得到梯度下降的距離。

3> 用梯度下降的距離更新引數

批梯度下降:指的是每下降一步,使用所有的訓練集來計算梯度值

在梯度下降中,在計算微分求導項時,我們需要進行求和運算,所以,在每乙個單獨的梯度下降中,我們最終都要計算這樣乙個東西,這個項需要對所有個訓練樣本求和。因此,批量梯度下降法這個名字說明了我們需要考慮所有這一"批"訓練樣本。

線性回歸實現一元批梯度下降

import numpy as np

x = 2*np.random.rand(100,1) #生成100行1列的向量範圍為0-2

y=4+3*x+np.random.randn(100,1) #截距為4,斜率為3

#c_把兩個維度相同的矩陣結合成以個矩陣 3x1 3x2 ->3x3

x_b=np.c_[np.ones((100,1)),x] #將 100行1列全為1的向量與x向量結合。實現矩陣的相乘截距處乘1,因此將x結合100行1列全為1的向量。為樣本

learning_rate=0.1 #實現梯度下降函式的步長為0.1(1、0.1、0.2.。)

n_iterations=1000 #梯度函式執行1000次,自行判斷是否收斂

m=100#樣本數為100

theta=np.random.randn(2,1) #初始化,theta為一次函式的斜率和截距 2行1列

count=0

for iteration in range(n_iterations):

count+=1

#按照梯度函式公式求梯度

gradients=1.0/m*x_b.t.dot(x_b.dot(theta)-y) #矩陣相乘實現了加法。x_b中全為1的一列實現截距,另一列實現x的係數

theta=theta-learning_rate*gradients #更新theta值,根據梯度下降公式theta值不變表示找到損失函式最小值。

print(count) #判斷theta更新1000次的時候是否逼近真實值

print(theta)

執行結果:

1000

[[4.28222204]

[2.90247165]]

隨機梯度下降:指的是每下降一步,使用一條訓練集來計算梯度值

假設有100個樣本,批梯度下降一次使用100個樣本更新theta 一次就是epoch

隨機梯度下降一次使用1個樣本 樣本數為m個,m次為乙個epoch,如果設定n_epochs=n,theta更新了mn次

「mini-batch」梯度下降:指的是每下降一步,使用一部分的訓練集來計算梯度值

機器學習(一) 一元線性回歸演算法

一 機器學習一般步驟 二 公式中符號解釋 m 訓練樣本的數量 x 輸入變數 y 輸出變數 x,y 乙個訓練樣本資料 x i y i 第i行訓練樣本資料 例如 房價與房子大小以及臥室個數 樓層個數 房齡之間關係的訓練樣本,如下表 size bed room num floors num age of ...

Python 機器學習 一元線性回歸

一元線性回歸模型很簡單 y1 ax b y1為實際值,為正態的誤差。y2 ax b,y2為 值。y1 y2。def model a,b,x return a x b 這裡將整組資料的 結果方差作為損失函式。j a,b sum y1 y2 2 n def cost a,b,x,y x is argu,...

機器學習(四)一元線性回歸

h x 0 1 xh theta x theta 0 theta 1x h x 0 1 x這個方程對於的影象是一條直線,稱為回歸線。其中 1 theta 1 1 為回歸線的斜率,0 theta 0 0 為回歸線的截距 j 0,1 1 2m i 1m yi h xi 2j theta 0,theta ...