Matlab邏輯斯回歸操作

原文網址:   https://www.letiantian.me/2014-09-18-logistic-regression/

weight = mnrfit(X, Y); 最主要是這個 weight ,這是權重也就是 算出每個對 input 要乘的數字

scores = mnrval(weight, [6,1]);

mnrval 這個功能是可以直接把他跟 weight 做運算 算出一個分數


這個分數的意義是代表屬於第一類的機率是0.0005 ,屬於第二類的機率是 0.995

如果因為原本的資料型態,不好丟 進去mnrval ,可以嘗試用公式手寫,



weight 算出多個值,第一個值是調整值,第二個開始就是對input的權重,計算方式就是第一個調整值,加上第二個權重乘上第一個 input,加上第三個權重乘上第二個input ,會得到一個答案ans,再用ans去運算,得出來的就是屬於第二類的機率,如果要求屬於第一類的機率,就用一減第二類的機率。

------------------------------------------------------------------------------
clear
clc
load('hwclass.mat')

input2=input';

for i = 1:length(target(1,:))
if target(1,i)==0
target2(i)=2;
else
target2(i)=1;
end
end

weight = mnrfit(input2, target2)

%測試第兩百筆
%[1.516090,15.01,0,2.510,73.05]

scores = mnrval(weight,[1.516090,15.01,0,2.510,73.05])

%scores =    1.0000    0.0000 

%代表發生第一類的機率是一,第二類的機率是零
%%=========
 input1=input';
 input2=input1(100:200,:);


for i = 1:length(target(1,:))
if target(1,i)==0
target1(i)=2;
else
target1(i)=1;
end
end

target2=target1(:,100:200);

weight = mnrfit(input2, target2)

%測試第兩百筆
%[1.516090,15.01,0,2.510,73.05]

scores = mnrval(weight,[1.516090,15.01,0,2.510,73.05])

%測試第一筆[1.52101,13.640,4.490,1.10,71.780]

scores = mnrval(weight,[1.52101,13.640,4.490,1.10,71.780])

%%======

%testinput

testinput2=testinput';

 w1=[-871.699578728220];
 w2=[413.625260808979];
 w3=[2.24314463346263];
 w4=[-0.676133616288284];
 w5=[7.07408354682231];
 w6=[2.80511634056903];


for i=1:10
 ans(i)=w1+w2*testinput2(i,1)+w3*testinput2(i,2)+w4*testinput2(i,3)+w5*testinput2(i,4)+w6*testinput2(i,5);

result(2,i)=1/(1+exp(ans(i)));
result(1,i)=1-result(2,i);

if result(i)>0.5 testoutput2(i)=2;
else
testoutput2(i)=1;
end

end

------------------------------------------------------------------------------------------------------------------------




留言