matlab用求逻辑回归图形,matlab-逻辑回归二分类(Logistic Regression)

逻辑回归二分类

今天尝试写了一下逻辑回归分类,把代码分享给大家,至于原理的的话请戳这里 https://blog.csdn.net/laobai1015/article/details/78113214   (在这片博客的基础上我加了一丢丢东西)。

用到的预测函数为

d49af11f49b2f239d628d42ba7362eb5.png

其中,h为预测函数(大于0.5为一类,小于等于0.5为另一类)。θ为各个特征的参数。θ=[θ1,θ2,θ3...]T

损失函数J(θ)为

804afb18ae10b5209a924239a3d1c341.png

利用梯度下降算法进行参数的更新公式如下:

3ed86f8e72d052b41b95923df200bd6f.png

其中,α是学习率参数,λ是正则项参数,需要自己输入。

用上述三个公式即可写出一般情况下的逻辑回归分类,经试验,其分类效果在我的测试数据下有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曲线为:

3b9c0fa8ca96727c7bed71d411b46ad3.png

分类图像为:

443dbfc8b5f69a5f2c025269fea70878.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值