筆記 - 機器學習 邏輯回歸

[筆記] 機器學習 邏輯回歸

用於分類 ( Classification )

邏輯回歸算法 ( Logistic Regression )

hθ(x) = g(θᵀx) : 邏輯回歸算式

邏輯函數 ( Logistic Function )

  • 又稱 S 函數( Sigmoid Function )

  • 此函數圖如下 :

  • 此函數可以將任何實數映射到 (0, 1) 區間內
  • 假如 hΘ(x) = 0.7,那預測為 1 的機率是 70%,為 0 的機率是 30%

    • hθ(x) = P(y=1 | x;θ) = 1 − P(y=0 | x;θ)
    • P(y=0 | x;θ) + P(y=1 | x;θ) = 1
1
2
3
4
5
6
function g = sigmoid(z)

g = zeros(size(z));
g = 1 ./ (1 + e .^ -z);

end
  • 在 Octave 上的邏輯函數函式

決策邊界 ( Decision Boundary )

  • 為了得到 0 與 1,按此轉換 :

    hθ(x) ≥ 0.5 → y = 1
    hθ(x) < 0.5 → y = 0

  • 套入邏輯函數 g 中 :

    g(z) ≥ 0.5 when z ≥ 0

  • 再套入邏輯回歸算式 :

    hθ(x) = g(θᵀx) ≥ 0.5 when z = θᵀx ≥0

  • 結論 :

    θᵀx ≥ 0 → y = 1
    θᵀx < 0 → y = 0

  • 此時 θᵀx = 0 為決策邊界

    假設 θ = [5 -1 0]
    5 + (-1)x₁ + 0x₂ ≥ 0 → y = 1
    x₁ ≤ 5 → y = 1
    x₁ = 5 為決策邊界

代價函數 ( Cost Function )

不能使用與線性回歸相同的代價函數,因為邏輯函數會導致代價函數,產生多個局部最小值,使它不會是個凸函數 ( convex function )

Cost(hθ(x), y) = -ylog(hθ(x)) - (1 - y)log(1 - hθ(x))

Cost(hθ(x), y) = 0 if hθ(x) = y
Cost(hθ(x), y) → ∞ if y = 0 and hθ(x) → 1
Cost(hθ(x), y) → ∞ if y = 1 and hθ(x) → 0

  • 假如我們的假設函數 hθ(x) 與正確答案 y 相同,則代價函數為 0 ,相反則會趨於無限大

梯度下降 ( Gradient Descent )

  • 與線性回歸的算法相同,一樣需要同步更新 θ 的所有值
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function [J, grad] = costFunction(theta, X, y)

m = length(y);
J = 0;
grad = zeros(size(theta));

h = sigmoid(X * theta);

predictions = - y' * log(h);
con_predictions = (1 - y)' * log(1 - h);

J = (1 / m) * (predictions - con_predictions);

grad = (1 / m) * X' * (h - y);

end
  • 在 Octave 上的代價函數 + 梯度下降 ( 應用於邏輯函數 ) 函式

預測

通常訓練出 θ 後,帶入要預測的數值,輸出大於等於 0.5,預測為 1,反之為 0

  • 與線性回歸的算法相同,一樣需要同步更新 θ 的所有值
1
2
3
4
5
6
7
8
function p = predict(theta, X)

m = size(X, 1);
p = zeros(m, 1);

p = sigmoid(X * theta) >= 0.5;

end
  • 在 Octave 上的預測函式

高級優化算法

  • Conjugate gradient
  • BFGS
  • L-BFGS
  • 以上三個的優缺點 :

    • 優點 :

      • 不需要 learning rate α
      • 比梯度下降還快
    • 缺點 :

      • 較為複雜
1
2
3
4
function [jVal, gradient] = costFunction(theta)
jVal = [...code to compute J(theta)...];
gradient = [...code to compute derivative of J(theta)...];
end
  • 代價函數的函式程式碼
1
2
3
options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);
  • 使用 optimset()fminunc() 來使用優化算法

    • 使用 optimset() 設定 GradObjon,將設置梯度打開,設定 MaxIter100,設定100次迭代
    • 給予 fminunc() 代價函數、θ 的初始向量、剛剛設定的 options

多類別分類 : One-vs-all

y ∈ {0,1...n} : 有 n + 1 種類別

hθ⁽¹⁾(x) = P(y = 0 | x;θ)
hθ⁽²⁾(x) = P(y = 0 | x;θ)
. . .
hθ⁽ⁿ⁾(x) = P(y = 0 | x;θ)

  • 需要使用到 n + 1 個邏輯回歸分類器 ( Logistic Regression Classifier )
  • 每個分類器為分類其中一個類別其他類別,例如 : 0 類別與不是 0 的類別、1 類別與不是 1 的類別…等等

  • 預測新數值時,將新數值帶入每個分類器,取輸出值最大的分類器,也就是最大機率是此分類
tags: 筆記 機器學習 邏輯回歸
Author: Kenny Li
Link: https://kennyliblog.nctu.me/2019/07/19/Machine-learning-logistic-regression/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.