deep learning 練習 牛頓法完成邏輯回歸


 

 

                                             Logistic Regression and Newton's Method

作業鏈接:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex4/ex4.html

數據是40個考上大學的小朋友和40個沒有考上大學的小朋友在兩次測驗中的成績,和他們是否通過的標簽。

根據數據建立這兩次測驗與是否進入大學的二分類模型。

在二分類任務中,我們需要找到一個函數,來擬合特征輸入X和預測輸出Y,理想的函數是階躍函數,但是由於階躍函數不具備良好的數學性質(如可導性),我們可以選擇sigmoid函數。

牛頓法基本公式介紹

 使用S函數

          

帶入特征X之后,h(x)便可以看作是Y發生的概率,只是可以看作而已 。

損失函數J()定義為:
          

這個損失函數的定義是用的極大似然法,我們對對率回歸模型最大化“對數似然”就可以得到,

極大似然本質就是讓每個樣本屬於其真實標記的概率越大越好。

我們需要用牛頓法迭代參數來使損失函數達到最小值。

牛頓迭代公式如下

對應的梯度公式如下:

海森矩陣如下:

    

其中X(i)是n+1維的向量,X(i)*X(i)'是(n+1)*(n+1)的矩陣,而h(x(i))和y(i)是歸一化以后的數據。

這個公式在代碼實現的時候,有一點點需要注意的,正確實現如下:

H=1./m.*(x'*diag(h)*diag(1-h)'*x);

其中diag(h)*diag(1-h)'表示生成一個(n+1)*(n+1)矩陣,矩陣每一個對角元素是h*(1-h)。(我當時第一次敲公式的時候就直接敲成了h*(1-h)',結果死活迭代不對)

牛頓法對於迭代次數的要求不高,大約需要5-15次。但是牛頓法每次迭代的復雜度是O(n*3),

與梯度下降法相比,梯度法對迭代次數要求很高,但是每次迭代的復雜度是O(n)。

所以在選擇數值優化算法進行凸優化的時候,當n<1000時,我們優先選用牛頓法,當n>1000時,我們選擇梯度下降。

代碼實現:

 

clc 
clear all;
close all;
x = load('ex4x.dat');%加載數據
y = load('ex4y.dat');
%%%%--------------------數據預處理----------------------%%%%%%
m = length(y); 
x = [ones(m, 1), x];
% sigma = std(x);%取方差
% mu = mean(x);%取均值
% x(:,2) = (x(:,2) - mu(2))./ sigma(2);%歸一化
% x(:,3) = (x(:,3) - mu(3))./ sigma(3);%歸一化
g = inline('1.0 ./ (1.0 + exp(-z))'); 
theta = zeros(size(x(1,:)))'; % initialize fitting parameters

J = zeros(8, 1); %初始化損失函數
for num_iterations = 1:8
    h=g(x*theta);%計算S函數
    
    deltaJ=1/m.*x'*(h-y);%梯度
    
    H = (1/m).*x' * diag(h) * diag(1-h) * x;
    
    J(num_iterations) = 1/m*sum(-y'*log(h)-(1-y)'*log(1-h));%牛頓法損失函數計算
    
    theta = theta-H^(-1)*deltaJ;%% 參數更新
end 
  x1=[1,20,80];
  h=g(x1*theta)%預測

   最后預測出來的概率是這個小朋友通過測試的概率,為0.332;

另外,牛頓法並不要求數據歸一化,當然,你也可以這樣做。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM