matlab-邏輯回歸二分類(Logistic Regression)


邏輯回歸二分類

今天嘗試寫了一下邏輯回歸分類,把代碼分享給大家,至於原理的的話請戳這里 https://blog.csdn.net/laobai1015/article/details/78113214   (在這片博客的基礎上我加了一丟丟東西)。

用到的預測函數

其中,h為預測函數(大於0.5為一類,小於等於0.5為另一類)。θ為各個特征的參數。θ=[θ1,θ2,θ3...]T

損失函數J(θ)

 

利用梯度下降算法進行參數的更新公式如下:

其中,α是學習率參數,λ是正則項參數,需要自己輸入。

用上述三個公式即可寫出一般情況下的邏輯回歸分類,經試驗,其分類效果在我的測試數據下有90%以上准確度。

以下代碼為了演示方面,只提供了兩個特征值,然后加了一個常數項(經過實驗,常數項是不可缺少的)。大家在使用自己的數據集的話只需要進行一點小改動即可。

matlab代碼如下:

clear
clc

%% 數據准備
%X = xlsread('C:\Users\user01\Desktop\test.xlsx');
%二分類 隨機生成數據。  200個數據  每個數據2個特征
data=1*rand(300,2);
label=zeros(300,1);
%label(sqrt(data(:,1).^2+data(:,2).^2)<8)=1;
label((data(:,2)+data(:,1)>1))=1;
%在data上加常數特征項;
data=[data,ones(size(data,1),1)];

%打亂循序
randIndex = randperm(size(data,1));
data_new=data(randIndex,:);
label_new=label(randIndex,:);

%80%訓練  20%測試
k=0.8*size(data,1);
X1=data_new(1:k,:);
Y1=label_new(1:k,:);
X2=data_new(k+1:end,:);
Y2=label_new(k+1:end,:);

[m1,n1] = size(X1);
[m2,n2] = size(X2);
Features=size(data,2); %特征個數
 %% 開始訓練
%設定學習率為0.01
delta=1;  
lamda=0.2; %正則項系數

theta1=rand(1,Features); 
%theta1=[.5,.5];
%%訓練模型

%梯度下降算法求解theta(每次都是對全部的數據進行訓練)
num = 300; %最大迭代次數
L=[];
while(num)
    dt=zeros(1,Features);
    loss=0;
    for i=1:m1
        xx=X1(i,1:Features);
        yy=Y1(i,1);
        h=1/(1+exp(-(theta1 * xx')));
        dt=dt+(h-yy) * xx;
        loss=loss+ yy*log(h)+(1-yy)*log(1-h);
    end
    loss=-loss/m1;
    L=[L,loss];
    
    theta2=theta1 - delta*dt/m1 - lamda*theta1/m1;
    theta1=theta2;
    num = num - 1;
    
    if loss<0.01
        break;
    end
end
figure
subplot(1,2,1)
plot(L)
title('loss')

subplot(1,2,2)
x=0:0.1:10;
y=(-theta1(1)*x-theta1(3))/theta1(2);
plot(x,y,'linewidth',2)
hold on
plot(data(label==1,1),data(label==1,2),'ro')
hold on
plot(data(label==0,1),data(label==0,2),'go')
axis([0 1 0 1])


%測試數據
acc=0;
for i=1:m2
    xx=X2(i,1:Features)';
    yy=Y2(i);
    finil=1/(1+exp(-theta2 * xx));
    if finil>0.5 && yy==1
        acc=acc+1;
    end
    if finil<=0.5 && yy==0
        acc=acc+1;
    end
end
acc/m2

%測試結果: 測試准確率為95%。

  

 得到的loss曲線為:

 

分類圖像為:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM