iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 27
0
Big Data

從學生到職場:菜鳥資料科學家的第一個月系列 第 27

機器學習演算法 - 線性回歸與邏輯回歸

線性回歸(Linear Regression)

線性回歸是源自於統計學的方法,不過在機器學習這門學科中同樣有使用。不過依照目標及背景不同,也產生了出不同觀點的發展。

線性回歸時根據資料找出一個線性方程式,用來預測新的資料應該在哪個位置。如果是二維的資料的話,那麼此時的回歸方程式就是一條線。基本的原則是這樣,將現有的點與方程式的距離稱為誤差函數。目標是最小化誤差函數,求出方程式的權重。誤差的計算一般是選擇 Least Square,也就是最小平方誤差。以二維來說,利用 Linear Regression 畫出的線,代表現有資料趨勢最接近的線。

問題定義

線性回歸定義是:

給出一個點集合 D = {x1, x2 ...},xi = (xi1, xi2 ... xin, yi),用一個線性函數 F = W1*X1 + W2X2 + ... WnXn 去擬合點集 D,使得點集與擬合函數間的誤差最小。如果這個函數曲線是一條直線,那就被稱為線性回歸。

此外,Locally Weighted Linear Regression 與 Ridge Regression 是線性回歸的一些變形,有興趣的朋友可以研究看看。

演算法

在解 Linear Regression 這個問題通常有兩個解法:

  • 已知:點集合 D 與 線性函數 F
  • 定義:
    • 誤差函數 = 每一個點帶進去 線性函數 F 的值(稱為誤差值)與 真實的值(實際值) 的誤差總和。
    • 誤差算法 = 最小二乘法。
  • 目標:求出最小化誤差函數時線性函數 F 的權重

補充一點,在這邊我們的已知線性函數的意思是,我們知道函數是線性的,但不知道實際上的權重。簡單來說,我們就是想要所有的線性函數中,挑選一組離真實點最近的那一個方程式。

線性方程式解(Normal Equation)

  • Step1:定義誤差函數的方程式。
  • Step2:對誤差函數微分求為零時的解。(因為我們知道方程式微分等於零時有最大最小值)
  • Step3:Done!

不過值得注意的是,很幸運的在線性回歸中可以找到一組解析解。由於許多的演算都是近似的,這很可能意味著找不到一個解析解。

梯度下降法(Gradient Descent)

  • Step1:隨機初始化權重
  • Step2:沿著梯度相反的方向下降
  • Step3:重複 Step2 直到誤差函數夠小
  • Step4:Done!

梯度相反方向代表著往最低點前進,概念可以想成是爬山,慢慢往下爬。這邊值得討論的是梯度相反的方向下降的幅度,稱為學習率,通常不會設太大。最終的解,有可能找不到一個最佳解,就可能會造成震盪。

實作

我們採用 sklearn 這套 python 的機器學習套件來實現線性回歸:

import numpy as np
from sklearn import linear_model

# 宣告資料
X = [[1],[2],[3],[4]]
y = [2, 4, 6, 8]

# 建立及訓練模型
regr = linear_model.LinearRegression()
regr.fit(X, y)

# 看看訓練出來的係數
print('Coefficients: \n', regr.coef_)
# >>> Coefficients: [ 2.]

# 用模型來預測一筆新的資料看看
regr.predict(5)
# >>> array([ 10.])

邏輯回歸(Logistic Regression)

邏輯回歸(Logistic Regression)是延伸自線性回歸(Linear Regression)的一種變形。「回歸」一般來說指的是輸出變量為連續值的方法,而「分類」的輸出變量是離散型(Discrete)的。所以實際上,邏輯回歸是用於分類的方法,而不是回歸。

問題定義

邏輯回歸的命名是來自於其採用的 Logistic Function,也可以稱為 Sigmoid Curve。


其中 x = (1, x1, x2, …, xN) 是 input feature set,θ = (0, 1, 2, …, N) 則是係數,h(x) 則為 output。

這個方程式在二維資料中,所呈現的圖形會長這樣:

簡單來說可以這樣想,在線性回歸中試圖找一條實數的線去描繪資料;在邏輯回歸中試圖找一條只有 0/1 兩種可能的線去描述資料。

演算法

在解 Linear Regression 這個問題通常有兩個解法:

  • 已知:點集合 D 與 邏輯函數 F
  • 定義:
    • 誤差函數 =
    • 誤差算法 =
  • 目標:求出最小化誤差函數時線性函數 F 的權重

梯度下降法(Gradient Descent)

因為 Cost Function 的特性,邏輯回歸是無法從線性方程式解(Normal Equation)中找到解析姐的,所以一般會採用 Gradient Descent。

  • Step1:隨機初始化權重
  • Step2:沿著梯度相反的方向下降
  • Step3:重複 Step2 直到誤差函數夠小
  • Step4:Done!

梯度相反方向代表著往最低點前進,概念可以想成是爬山,慢慢往下爬。這邊值得討論的是梯度相反的方向下降的幅度,稱為學習率,通常不會設太大。最終的解,有可能找不到一個最佳解,就可能會造成震盪。

最大似然機率(Maximum Likelihood)

換個角度,我們可以用機率參數最大化的角度來處理這個問題。從資料集 D 中學習 w 參數使得 y = p(y|x;w) 有最大的機率。邏輯回歸是利用最大可能機率來估算或尋找參數值。意思是說所找到的一組參數值,使得與原來的資料的可能性最大。

實作

我們採用 sklearn 這套 python 的機器學習套件來實現線性回歸:

import numpy as np
from sklearn import linear_model

# 宣告資料
X = [[1],[2],[3],[4]]
y = [1, 1, 0, 0]

# 建立及訓練模型
regr = linear_model.LogisticRegression()
regr.fit(X, y)

# 用模型來預測一筆新的資料看看
regr.predict(5)
# >>> array([ 0.])

後記

如果對於方程式求解有興趣的,可以參考 a504082002 大大的 [Day 02] 解構linear regression。對於程式實作有興趣的,可以參考 tonykuoyj 大大的 [R 語言使用者的 Python 學習筆記 - 第 21 天] 機器學習

Reference

  1. 从统计看机器学习(一) 一元线性回归
  2. 机器学习:线性回归(Linear Regression)
  3. 機器學習經典算法詳解及Python實現--線性回歸(Linear Regression)算法
  4. Linear Regression Example
  5. Pipelining: chaining a PCA and a logistic regression

上一篇
淺談機器學習
下一篇
機器學習演算法 - 支持向量機與類神經網路
系列文
從學生到職場:菜鳥資料科學家的第一個月30

尚未有邦友留言

立即登入留言