之前的幾篇裡面講了機器學習分類問題的一些演算法,下面幾篇來講一下回歸問題。
回歸問題和分類問題有什麼區別呢?
分類問題**的結果是一些類別值,比如說,顏色類別,電腦品牌,有無信譽等。
回歸問題**的是連續型的數值,如房價,人數,降雨量等等
生活中我們做決定的過程通常是根據兩個或多個變數之間的關係,解決回歸問題就是通過建立方程來模擬兩個或多個變數間的關係,被**的變數叫做因變數,被用來**的變數叫做自變數。回歸問題在中學階段的數學課上已經有過簡單涉及,這裡也算是再次複習一下。
本篇所講的簡單線性回歸,就是只包含乙個自變數(x)和乙個因變數(y),兩個變數的關係用一條直線來模擬的回歸問題。至於包含兩個以上變數的多元線性回歸,以及非線性回歸在後面的篇幅中再說。
先來看理解線性回歸的幾個方程
簡單線性回歸模型:
y = β1x + β0 + e
這裡的β1和β0分別是直線方程裡的引數。e代表著隨機因素帶來的偏差,
是均值為0的正態分佈。
簡單線性回歸方程:
e(y) = β1x + β0
這裡e(y)代表y的期望,因為偏差e均值為0這裡去掉。
簡單線性回歸估計方程:
y估計 = b1x + b0
這裡的b1和b0是我們根據一組已知的x,y樣本計算出的值,是線性回歸方程的估計引數,也是我們想要利用簡單線性回歸要計算出的引數。
另外簡單線性回歸自變數與因變數之間的關係包括,正向線性關係,反向線性關係,無關係,分別對應方程直線斜率》0, <0, =0的情況。
線性回歸分析的流程:
那麼怎樣通過一組樣本列出簡單線性回歸的估計方程呢?下面用乙個例子來說明。
一家汽車廠商月廣告的數量x與月汽車銷售數量y的對應關係如上圖所示。
只有乙個自變數x和乙個因變數y,典型的簡單線性回歸問題。
我們要做的就是找到一條直線,使得上表中每乙個x對應的y值與方程中相應x的y值之差的平方的和最小。
也就是
滿足這種情況的直線也就是最能代表這組樣本趨勢的一條直線
y估計 = b1x + b0 ,要做的就是求這種情況下的b1,b0。
求解過程利用到乙個極值問題,上述公式差平方的和最小,這裡略去推導的過程直接給出最終的公式:
通過上述公式就能求解出b1和b0的值,這裡計算一下,將上圖中的資料代入公式中,解出b1 = 5, b0 = 10
也就是最終的線性回歸的估計方程為
y = 5x + 10
這樣假如再給出比如月廣告數量x為7,那麼就可以推算出月銷售數量y為45。
如圖:
下面是簡單的python的實現
import numpy as np
#因為要用到均值等計算所以呼叫numpy庫
#np.mean(x)返回列表x的均值
#函式fitslr輸入樣本,列表x,y 返回最終估計方程的b1, b0, 主要還是直接使用上述給出的代數公式
deffitslr
(x, y):
n = len(x)
denominator = 0
numerator = 0
for i in range(0, n):
numerator += (x[i] - np.mean(x)) * (y[i] - np.mean(y))
denominator += (x[i] - np.mean(x))**2
b1 = numerator / float(denominator)
b0 = np.mean(y) - b1*np.mean(x)
return b0, b1
#**的函式, 給出要**的x值,和估計方程的b0,b1,返回乙個y值
defpredict
(x, b0, b1):
return b0 + x*b1
#下面用兩組列表呼叫上定義的兩個函式呼叫一下
x = [1, 3, 2, 1, 3]
y = [14, 24, 18, 17, 27]
b0, b1 = fitslr(x, y)
"intercept:", b0, "slope:", b1
x_test = 7
y_test = predict(7, b0, b1)
"y_test:", y_test
#成功根據計算好的方程,**x=7時,y**結果為45
機器學習 線性回歸( 簡單線性回歸的實現)
案例 給定一組資料 1,1 2,3 3,2 4,3 5,5 試通過簡單線性回歸求出擬合的直線,並能根據擬合的直線計算給定資料集的 值。1 繪製出影象。2 根據公式計算a和b的值。3 將要 的資料代入到擬合直線的方程進行計算。紅色直線即我們通過簡單線性回歸得到的擬合函式。將簡單線性回歸編寫為乙個類,在...
機器學習線性回歸 機器學習中的簡單線性回歸步驟
簡單線性回歸,這是一種基於自變數值 x 來 因變數值 y 的方法。假設這兩個變數是線性相關的。因此,我們嘗試尋找一種根據特徵或自變數 x 的線性函式來精確 響應值 y 我們將按照之前的資料預處理資訊圖表那樣來執行相同的步驟 其中第三相關庫matplotlib是用來視覺化資料的。匯入資料集 檢查缺失資...
機器學習(1) 簡單線性回歸
coding utf8 import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt from matplotlib.font manager import rebuild rebuild mpl.rcpara...