線性回歸,就是能夠用乙個直線較為精確地描述資料之間的關係。這樣當出現新的資料的時候,就能夠**出乙個簡單的值。線性回歸中最常見的就是房價的問題。一直存在很多房屋面積和房價的資料,如下圖所示:
在這種情況下,就可以利用線性回歸構造出一條直線來近似地描述放假與房屋面積之間的關係,從而就可以根據房屋面積推測出房價:
線形回歸的基本框架:
通過線性回歸構造出來的函式一般稱之為了線性回歸模型。線性回歸模型的函式一般寫作為:
fθ(x) = θ0 + θ1x1
線性回歸實際上要做的事情就是: 選擇合適的引數(θ0, θ1),使得hθ(x)方程,很好的擬合訓練集。
線性回歸模型的特點:
python中的sklearn庫中有乙個linearregression類就是線性回歸,下面就利用該類寫乙個簡單的單變數線性回歸的**,**如下:
import numpy as np
from sklearn.linear_model import linearregression
x =2
* np.random.rand(
100,1)
# 生成乙個100行1列的0到1的隨機數列
y =4+3
* x + np.random.randn(
100,1)
#生成的是np陣列
# 生成乙個100行1列的隨機數列並且符合正太分布
lin_reg = linearregression(
)# fit方法就是訓練模型的方法
lin_reg.fit(x,y)
# intercept 是截距,coef是引數/斜率
print
(lin_reg.intercept_,lin_reg.coef_)
# **
x_new = np.array([[
0],[
2]])
# np.array方法就是說把後面的二維陣列轉化為numpy陣列
print
(lin_reg.predict(x_new)
)
[4.10700283] [[2.97661158]]線性回歸的代價函式通過線性回歸演算法,我們可能會得到很多的線性回歸模型,但是不同的模型對於資料的擬合或者是描述能力是不一樣的。我們的目的最終是需要找到乙個能夠最精確地描述資料之間關係的線性回歸模型。這是就需要用到代價函式。代價函式就是用來描述線性回歸模型與正式資料之前的差異。如果完全沒有差異,則說明此線性回歸模型完全描述資料之前的關係。如果需要找到最佳擬合的線性回歸模型,就需要使得對應的代價函式最小,相關的公式描述如下:[[ 4.10700283]
[10.06022598]]
可以看出我們的目標是使損失函式最小化,就引入了梯度下降演算法。
梯度下降是一種非常通用的優化演算法,能夠為大範圍的問題找到最優解。梯度下降的中心思想就是迭代的調整引數從而使損失函式最小化。
假設你迷失在山上的濃霧之中,你能感覺到的只有你腳下路面的坡度。快速到達山腳的乙個策略就是沿著最陡的方向下坡。這就是梯度下降的做法:通過測量引數向量θ相關的誤差函式的區域性梯度,並不斷沿著降低梯度的方向調整,直到梯度降為0,到達最小值。
具體來說,首先使用乙個隨機的θ值(這被稱為隨機初始化),然後逐步改良,每次踏出一步,每一步都嘗試降低一點損失函式(如mse),直到演算法收斂到乙個最小值。如下圖所示:
2.梯度下降的步長會逐漸變小
並不是所有的損失函式看起來都像是乙個漂亮的碗,有的可能像山洞、山脈、高原或者各種不規則的地形,導致很難收斂到最小值。
比如下面這個圖,如果隨機初始值從左側起步,那麼會收斂到乙個區域性最小值,而不是全域性最小值;如果演算法從右側起步,那麼需要經過很長時間才能越過正整片高原。如果你停下得太早,將永遠達不到全域性最小值。
那麼如何應對?
對於mse(均方誤差)來說,因為損失函式是個凸函式,所以不存在區域性最小值,只有乙個全域性最小值
通過隨機初始化θ,可以避開區域性最小值
對於多變數,高維度的值,就算在某個維度上陷入和區域性最小值,但是還能從別的維度跳出
下面我們就簡單編寫乙個利用梯度下降演算法使損失函式達到最小化的**,具體**如下:
import numpy as np
x1 =
2* np.random.rand(
100,1)
x2 =
4* np.random.rand(
100,1)
x3 =
6* np.random.rand(
100,1)
y =4+3
* x1 +
4* x2 +
5*x3 + np.random.randn(
100,1)
x_b = np.c_[np.ones(
(100,1
)),x1,x2,x3]
print
('****************************'
)print
(x_b)
learning_rate =
0.1n_iterations =
1000
m =100
theta = np.random.randn(4,
1)count =
0for iteration in
range
(n_iterations)
: count +=
1 gradients =
1.0/m * x_b.t.dot(x_b.dot(theta)
-y) theta = theta - learning_rate * gradients
print
(count)
print
(theta)
1000[[3.99409235]
[3.08939348]
[3.98649698]
[5.015161 ]]
機器學習 線性回歸
可以說基本上是機器學習中最簡單的模型了,但是實際上其地位很重要 計算簡單 效果不錯,在很多其他演算法中也可以看到用lr作為一部分 先來看乙個小例子,給乙個 線性回歸是什麼 的概念。圖來自 2 假設有乙個房屋銷售的資料如下 面積 m 2 銷售價錢 萬元 123 250 150 320 87 160 1...
機器學習(線性回歸)
在機器學習中,回歸 分類和標註共同構成了監督學習技術。監督學習 supervised learning 是機器學習在工業界應用最廣的乙個領域分支。在學術界中也是研究最多的領域之一。大家都知道的資料探勘十大經典演算法中,監督學習技術佔據6席。方法 自變數 特徵 因變數 結果 關係 回歸演算法是試圖採用...
機器學習 線性回歸
line fitter linearregression 建立模型 line fitter.fit temperature,sales 傳入引數 sales predict line fitter.predict temperature 模型 直線 直線上會有loss 計算loss時 要使用平方距離...