Logistic迴歸與牛頓法(附Matlab實現)
迴歸,是一種連續模型,受噪聲的影響較大,一般都是用來做預測的,但也有除外,比如本文要講的Logistic迴歸就是用來做分類的。
Logistic Regress
Logistic一般用於二分類問題,不同於之前講的線性迴歸,它是用一條直線來分割兩種不同類別的樣本。其函式形式為
若令,則可以等價為
這個函式也叫sigmoid函式。其函式影象如下
得到了Logistic迴歸模型後,接著就要找到合適的θ去擬合它了。
首先假設
可得概率公式
再假設訓練集獨立同分布,類似於線性迴歸,這裡也用最大似然估計得
將其對數化
接著求導
其中上式第一行到第二行之間其實有一個很有意思的東西,g(θ)的一個性質
之後也和雷同的和上文一樣,這裡可以直接用梯度下降法來求解
幾乎一模一樣,只是其中的h(x)變了,其實Logistic迴歸和線性迴歸都是屬於同一個模型-----廣義線性模型(Generalized Linear Models,GLM),這個具體下一次再寫。
Newton's Method
除了用梯度下降,我們還可有用一個新的方法來解決這個問題,一個更快的方法----牛頓法(Newton’s method)
先介紹下這種方法,牛頓法主要是找到一個函式等於0的值,即當f(θ)=0時,θ的取值。它的更新公式為
至於它的具體操作用文字很難說清楚(文筆太爛了),這接用例子說明吧
從最左圖看起,其中直線y=0和函式
說完方法,就得開始用該方法解決問題了,這裡用牛頓法來求最大似然函式l(θ)的極大值,即l’(θ)=0。公式變為
又由於θ是一個向量值,最後的更新表示式為
其中H為hessian矩陣,其形式為
PS:與梯度下降法相比,牛頓法的迭代次數更少,收斂的更快,但其每一次的花費卻比梯度下降發更大,因為其中要處理hessian矩陣。
In Matlab
下面是用Matlab實現牛頓法的具體程式碼,資料集是亂找的,在程式碼中就不顯示出來了。
% Logstic Regress with Newton's Method
clear all; close all; clc
% data
% x(20*2)為資料的特徵矩陣
x = [0.230000 0.394000;
.......
0.780000 0.282000];
% y(20*1)為資料的標記矩陣
y = [0;
......
1];
[m, n] = size(x);
% x0 = 1
x = [ones(m, 1), x];
% plot the datas
figure
pos = find(y); neg = find(y == 0);%find是找到的一個向量,其結果是find函式括號值為真時的值的編號
plot(x(pos, 2), x(pos,3), '+')
hold on
plot(x(neg, 2), x(neg, 3), 'o')
hold on
xlabel('axis X')
ylabel('axis Y')
% Initialize fitting parameters
theta_new = zeros(n+1, 1);
theta_old = ones(n+1, 1);
e = 0.00000000001;
% Define the sigmoid function
g = inline('1.0 ./ (1.0 + exp(-z))');
% Newton's method
while ((theta_new - theta_old)*(theta_new - theta_old)' > e)
theta_old = theta_new;
% Calculate the hypothesis function
z = x * theta_new;
h = g(z);
% Calculate gradient and hessian.
grad = x' * (h-y);
H = x' * diag(h) * diag(1-h) * x;
theta_new = theta_new - H\grad;
end
theta_new
plot_x = [x(:,2)];
plot_y = (-1./theta_new(3)).*(theta_new(2).*plot_x +theta_new(1));
plot(plot_x, plot_y)
legend('Label 1', 'Label 2', 'Decision Boundary')
hold off
下圖是未經處理的資料集plot出來的圖。
下圖是處理後的圖
思考
儘管Logistic迴歸和線性迴歸的目的並不相同,一個是分類,一個是預測,但從本質上講Logistic迴歸仍然是一種線性迴歸,只是在迴歸的結果上又加上了一層對映,將其對映到可分類的情況(其中帶入到sigmoid函式的是,而z線上性迴歸中是等於h(x)的)。g(z)可以將連續值對映到0和1上。
疑問
Hessian矩陣的向量表示式是怎麼來的?