Learning Course: One variable logistic regression optimization
單變量(只有一個特征)的用于分類的邏輯回歸的cost function的最小值求解, here:
x=[x1;x2]; y={0,1};
theta=[theta(1);theta(2)]
由于分類中的y值需為0-1之間的數值,因此這里的cost function不同于線性回歸的cost function。
hθ(x)=g(θTx), where g(x)= 1/(1-exp(-x)); thus hθ(x) = 1/(1-exp(-θTX));
Thus Cost(hθ(x),y)=?ylog(hθ(x))?(1?y)log(1?hθ(x)),?
因為當實際y =1時,上述方程 cost =??ylog(hθ(x)), 因此在預測y值接近1時,方程值趨近于0,即使cost value趨近于零,反之,預測值接近于0時,cost value趨近于無窮大;對于y=0的推理也是同理。
然后 repeat θj :=θj - alpha*?(J(θ))/?(θj);
因此此處的優化即使找到一個theta使得cost function,即我們的目標方程的最小值。
?
以下用一個簡化的例子來計算目標方程的最小值
例如 cost function 為 J(theta) = (theta(1)-5)^2+(theta(2)-5)^2
先構建出我們的目標函數
function [jVal,gradiant] = costfunction(theta) jVal = (theta(1)-5)^2+(theta(2))-5)^2; gradiant = zeros(2,1); gradiant(1) = 2*(theta(1)-5); gradiant(2) = 2*(theta(2)-5); end
然后我們使用optimization的函數
options = optimset('GradObj','on','MaxIter',100); initialTheta = zeros(2,1);
% MaxIter定義最大迭代步數,100即定義為100步
% GradObj指定義的梯度 [optTheta,fval,exitFlag] = fminunc(@costfunction,initialTheta,options); % optTheta export our optimal Theta value % fval export our final objective function value % exitFlag 返回算法的終止標志;
% 大于零時為計算收斂,等于零時表示超過最大迭代次數(所以該增加maxiters),小于零時代表不收斂
% options是一個結構,里面有控制優化過程的各種參數
這里對 'on'的理解我不是特別明白,根據解釋
Hessian | If 'on', function uses user-defined Hessian, or Hessian information (when using HessMult), for the objective function. If 'off', function approximates the Hessian using finite differences. | L | fmincon, fminunc |
?
?
這里的fminunc函數是matlab或者octave里已定義的函數,其功能是無約束(x的值域無約束)最優化問題求解,fminisearch和fminuc都可用于最小值求解,以下為簡單總結:
1.以上兩個函數都用于非線性多元函數最小值求解(因此注意求解的x的維度)
2. fminisearch適合階次低,但是斷點多的函數
3. fminunc適合高階連續函數,因此當階數大于等于2時,使用fminunc效果更好,但注意函數需連續。
以下為fminunc函數的一般調用格式:
x = fminunc(fun,x0);
x為返回的使函數值最小的x值,x0為優化的初始值,fun為我們定義的目標函數,也可以用@fun來調用定義函數,如下
x = fminunc(@fun,x0);
本篇博客的目的是為了總結吳恩達老師的機器學習課程,以便幫助自己更好的學習,如有錯誤之處,還請指出討論以便改正。
?