UFLDL學習筆記系列 2
阿新 • • 發佈:2018-12-18
監督學習和優化——邏輯迴歸(Logistic Regression)
問題描述
之前我們學習的是通過一個線性方程預測一個連續的值(e.g. 房屋價格)。但有時我們想要預測一個離散的值,比如一張圖片是不是貓,這屬於分類問題。而邏輯迴歸是一種簡單的分類演算法。在這裡,我們只討論二元分類問題,即。
Logistic函式
給定是其標籤。若還是像線性迴歸中的描述方法:來描述標籤,則顯然是不合理的,因為只能是0或者1,因此修改其中 該函式被叫做logistic函式或者sigmoid函式。該函式如下圖所示可以看到,因此的取值也在該範圍內。其他取值在[0,1]之間的函式也可以替代這裡的sigmoid函式。
演算法描述
假設表示分類為正類(y為1)的概率,則有 上面兩式可簡寫為下面的式子:假設m個訓練樣本是獨立生成的,則可以寫出引數的似然函式為:使用對數似然更加容易計算: 現在的任務轉變為最大化對數似然估計,即我們的。最大化該函式可以使用上一章介紹的梯度下降進行計算。其中梯度為:虛擬碼如下所示: Repeat until convergence{ } 可以發現,這與線性規劃的迭代公式一樣,但它們不是同一個演算法,因為目標函式不同了。
Exercise 1B
在ex1/ex1b_logreg.m
檔案中的程式碼實現的是對28*28畫素大小的0或者1的數字圖片進行分類。這裡需要我們完成的部分就是在logistic_regression.m
檔案中計算目標函式以及梯度。
具體程式碼如下所示:
%compute the value of f
for i=1 : m
f = f - (y(i) * log(1 / (1 + exp(-theta' * X(:,i)))) + (1 - y(i)) * log(1 - 1 / (1 + exp(-theta' * X(:,i)))));
end
% compute the gradient
for i = 1 : size(X,1)
for j = 1 : m
g(i) = g(i) + X(i,j) * (1 / (1 + exp(-theta' * X(:,j))) - y(j));
end
end
最終訓練資料以及測試資料的正確率都能達到100%,這是由於此分類任務較簡單,且資料集充足。在一般分類問題中很難達到100%的正確率。 但此訓練執行耗時巨大,共計花費約100分鐘,主要在於每次迭代都需要遍歷所有的訓練資料,而我們的程式碼使用迴圈來完成,是完全序列的,使執行時間大大增長。下一節會描述如何將資料向量化,從而加快了執行速度。