機器學習課後作業筆記(二)

轉載請註明來源:http://blog.csdn.net/greenlight_74110/article/details/78590813

機器學習課後作業筆記(二)

介紹

本次練習將實現邏輯迴歸並應用到兩個不同的數據集上。

建議先看視頻。

邏輯迴歸

本次練習,你將構建一個邏輯迴歸模型來預測一個學生是否被大學錄取。

你的任務是,基於兩次考試,構造一個聚類模型來估計一位申請者的錄取可能性。

可視化數據

我們先觀察及格的和不及格的人兩次成績的散點圖。

在plotdata中實現如下代碼;

% Find Indices of Positive and Negative Examples
pos = find(y == 1); neg = find(y == 0);
% Plot Examples
plot(X(pos, 1), X(pos, 2), 'k+','LineWidth', 2, 'MarkerSize', 7);
plot(X(neg, 1), X(neg, 2), 'ko', 'MarkerFaceColor', 'y','MarkerSize', 7);

實現

熱身練習:sigmoid函數

邏輯迴歸的假設定義爲:

h[θ](x) = g(θ^T * x)

其中,

g(z) = 1 / 1 + e^-z

其函數特徵爲,對很大的正數x,sigmoid接近1;對很小的負數x,sigmoid接近0;而當x爲0時,sigmoid等於0.5。

在sigmoid中實現如下代碼:

g = 1 ./ ( 1 + exp(-z) ) ;

代價函數和梯度

邏輯迴歸的代價函數:

J(θ) = sum{-yi*log(h[θ](xi))-(1-yi)*log(1-h[θ](xi))}/m

對θ的偏導:

dJ(θ)/d(θj) = sum{(h[θ](xi)-yi)*x[j]i}

雖然形式看似相同,但它與線性迴歸實際上卻有着本質上的區別,因爲二者的hθ不一樣。

在costFuction中實現如下代碼:

J= -1 * sum( y .* log( sigmoid(X*theta) ) + (1 - y ) .* log( (1 - sigmoid(X*theta)) ) ) / m ;

grad = ( X' * (sigmoid(X*theta) - y ) )/ m ;

使用fminunc學習參數

本次練習中,不再使用梯度下降方法,而是直接使用一個內嵌函數fminunc。

fminunc是一個用來找出一個無約束函數的最小值的最優化解決方法。

對線性迴歸來說,就是最優化參數爲θ的代價函數J(θ)。

實現的代碼爲:

%  Set options for fminunc
options = optimset('GradObj', 'on', 'MaxIter', 400);

%  Run fminunc to obtain the optimal theta
%  This function will return theta and the cost 
[theta, cost] = ...
    fminunc(@(t)(costFunction(t, X, y)), initial_theta, options);

藉助得到的θ,我們可以畫出決策邊界:

% Plot Boundary
plotDecisionBoundary(theta, X, y);

評估邏輯迴歸

一種方法是用θ來計算錄取概率。

prob = sigmoid([1 45 85] * theta);

另一種方法是,看看學習出來的模型對我們的訓練集的預測能力如何,即拿預測結果與實際結果作對比,算出準確率。

p = predict(theta, X);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章