【邏輯迴歸】使用邏輯迴歸進行實際操練

數據源採集吳恩達教授第6課的練習數據(ex6data3.mat):
1、在Ocatve中導入數據;
L1=load(‘ex6data3.mat’);
2、構建相關的記錄集,並使用Plot觀察數據:

x=ones(size(L1.X)(1),3);
x(:[2,3])=L1.X;
y=L1.y
y0=find(y0);
y1=find(y
1);
plot(x1(y1,2),x1(y1,3),’+’);
hold on
plot(x1(y0,2),x1(y0,3),‘o’,‘MarkerFaceColor’,‘r’);
在這裏插入圖片描述

根據以上模型分析還是比較線性的,暫定使用模型:
y=theta0+theta1X1+theta2X2
3、使用邏輯迴歸進行訓練(邏輯迴歸的代碼參見:《【邏輯迴歸】邏輯迴歸函數在Octave中的實現》)
這一步比較意外:
[T1,bRst,Thsl1]=LogisticRegression(0.15,0.01,20,x,y,theta)
使用以上參數進行訓練,但是沒有想到第一步就訓練出結果了,簡直不可意義,一度以爲是代碼有問題,反覆把吳恩達的課件拿出來看了幾次,在確認實現代碼沒有問題的情況下,對數據進行分析:
3.1、設置的誤差太大,因爲我們的X參數都是0後面五六位的;
3.2、將誤差設置小,重現進行訓練:
[T1,bRst,Thsl1]=LogisticRegression(0.15,0.001,2000,x,y,theta)
在61次迴歸的時候得出結論:

T1 =
0.27017
0.48933
1.53755

OK,將y=theta0+theta1X1+theta2X2的曲線畫出來,看看是否能夠滿足我們題目中的要求:
在這裏插入圖片描述
回憶一下課程中判斷最終有多少機率是0還是1,應該是這樣一條曲線。橫軸是:theta’X’(使用f(x)來表達),也就是theta0+theta1X1+theta2X2。縱軸是機率,也就是G(f(x))=1/(1+e^(-f(x))。也就是說如果f(x)>0,則最終的結果y=1;
所以我們畫出的線也應該是theta0+theta1
X1+theta2*X2=0,在這條線之上的,我認爲預測結果應該是爲1的,而在這個線之下的,我們認爲預測結果應該是爲0的。

畫線:我們在上面的(X1,X2)點線圖上取兩點
XPlot=[1,-0.8;1,0.5]
然後需要計算這兩點的X1座標對應於X2的座標,代入上面點線即可:
theta0+theta1X1+theta2X2=0
X2=-(theta0/theta2+theta1X1/theta2)
這裏將-theta0/theta2,-theta1/theta2看成兩個參數,也就是P0,P1。我們可以把X2表達式重寫:X2=P0+P1
X1

TPlot(1,1)=-T1(1,1)/T1(3,1);
TPlot(2,1)=-T1(2,1)/T1(3,1);

所以代碼如下:

plot(XPlot(:,2),TPlot’*XPlot’);

結果如下:
在這裏插入圖片描述
可見上圖也不是一個合適的結果集,繼續縮小誤差試試從0.001調到到0.0001
在這裏插入圖片描述
這就看上去比較接近我們的結果集了,當然我們也可以進一步降低誤差,看看是否有更好的表現。
這個是誤差調整到0.00001後結結果

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