線性回歸演算法據說是機器學習中的hello world,相對簡單,機器學習的具體演算法主要有三步:
1)為假設函式設定引數,通過假設函式畫出一條直線,然後根據輸入的點得到**值。
2)將測試值帶入損失函式,計算出乙個損失值。(關於損失函式的定義,以後再討論)
3)通過得到的損失值,利用梯度下降等優化方法,不斷調整假設函式的引數,使得損失值最小。這個不斷調整引數使得損失值最小化的過程就是線性回歸的學習過程,通常稱為訓練模型。
我們使用python現有的演算法庫,體驗一下線性回歸是怎麼回事。
首先,需要能夠手工生成訓練資料:
linspace函式會生成乙個從-3到3區間的分布均勻的30個元素的陣列:
>>> print(x)
[-3. -2.79310345 -2.5862069 -2.37931034 -2.17241379 -1.96551724
-1.75862069 -1.55172414 -1.34482759 -1.13793103 -0.93103448 -0.72413793
-0.51724138 -0.31034483 -0.10344828 0.10344828 0.31034483 0.51724138
0.72413793 0.93103448 1.13793103 1.34482759 1.55172414 1.75862069
1.96551724 2.17241379 2.37931034 2.5862069 2.79310345 3. ]
但是這個資料還不能直接作為python線性回歸演算法庫的輸入,輸入需要是乙個矩陣,就是二維陣列。利用python語言的特性,轉換成乙個二維陣列:
>>> x = [[i] for i in x]
>>> y = [[i] for i in y]
>>> print(x)
[[-3.0], [-2.793103448275862], [-2.586206896551724], [-2.3793103448275863], [-2.1724137931034484], [-1.9655172413793103], [-1.7586206896551724], [-1.5517241379310345], [-1.3448275862068966], [-1.1379310344827587], [-0.9310344827586206], [-0.7241379310344827], [-0.5172413793103448], [-0.31034482758620685], [-0.10344827586206895], [0.10344827586206895], [0.31034482758620685], [0.5172413793103448], [0.7241379310344827], [0.9310344827586206], [1.137931034482759], [1.3448275862068968], [1.5517241379310347], [1.7586206896551726], [1.9655172413793105], [2.1724137931034484], [2.3793103448275863], [2.586206896551724], [2.793103448275862], [3.0]]
這樣就可以進行訓練了:
>>> from sklearn import linear_model
>>> model = linear_model.linearregression()
>>> model.fit(x,y)
linearregression(copy_x=true, fit_intercept=true, n_jobs=none, normalize=false)
訓練完成後,需要對結果進行**:
>>> x_=[[1],[2]]
>>> model.predict(x_)
array([[3.],
[5.]])
確實得到了與傳入y=2*x+1函式進行計算的正確結果。可以直接檢視這條直線的斜率和截距:
>>> print(model.coef_)
[[2.]]
>>> print(model.intercept_)
[1.]
剛才使用的資料過於理想,實際資料不可能是這樣精確的一條直線,沒有任何偏差,為了模擬這個過程,引入隨機擾動:
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> x = np.linspace(-3,3, 30)
>>> y = 2*x +1
>>> x = x+np.random.rand(30)
>>> plt.scatter(x, y)
>>> plt.show()
random.rand會隨機產生30個0到1之間的擾動。
採用前面的步驟,可以看到訓練後的**效果,就不是很準確了(斜率還可以,截距不准了):
>>> x = [[i] for i in x]
>>> y = [[i] for i in y]
>>> from sklearn import linear_model
>>> model = linear_model.linearregression()
>>> model.fit(x,y)
linearregression(copy_x=true, fit_intercept=true, n_jobs=none, normalize=false)
>>> x_=[[1],[2]]
>>> model.predict(x_)
array([[2.04145197],
[4.00713494]])
>>> print(model.coef_)
[[1.96568298]]
>>> print(model.intercept_)
[0.07576899]
機器學習之學習筆記 線性回歸
一 線性回歸 線性回歸通常用於根據連續變數估計實際數值 房價 呼叫次數 總銷售額等 我們通過擬合最佳直線來建立自變數和因變數的關係。這條最佳直線叫做回歸線,並且用 y a x b 這條線性等式來表示。在這個等式中 係數 a 和 b 可以通過最小二乘法獲得。線性回歸的兩種主要型別是一元線性回歸和多元線...
機器學習之 線性回歸學習筆記
線性回歸是利用數理統計中回歸分析,來確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法,運用十分廣泛。其表達形式為y ax b,a為誤差服從均值為0的正態分佈。一元線性回歸分析 只包括乙個自變數和乙個因變數,且二者的關係可用一條直線近似表示。多元線性回歸分析 如果回歸分析中包括兩個或兩個以...
機器學習筆記1 線性回歸
資料探勘 人工智慧等領域中存在兩個 分類和回歸 先說回歸 一些簡單的數學題,求解問題往往通過求解未知數,也就是 通過給定的自變數和函式,通過函式求解得到未知數。而機器學習是,通過給定的自變數和函式的解,去求解函式。即求解function x y。通過樣本中大量的特徵 x 和目標變數 y 求得這個函式...