感知机 MATLAB实现(数据+代码)

感知机 MATLAB实现(数据+代码)

1.数据如图片所示:(命名为data.xlsx)



2.代码如下:

clear;clc;
%% 载入数据
data = xlsread('data.xlsx');
%% 绘制数据点
sample = data(:,1:2); % 每一行代表一个数据点
label = data(:,end);
draw(sample, label)
hold on
%% 初始化w,b,alpha
w = [-1,-2];
b = 2;
alpha = 1;  % learning rate
%%  更新 w,b
while 1
    [idx_misclass, counter] = class(sample, label, w, b);    
    if (counter~=0)
        R = unidrnd(counter);
        w = w + alpha * sample(idx_misclass(R),:) * label(idx_misclass(R));
        b = b + alpha * label(idx_misclass(R));   
    else
        break
    end
end
%% 绘制线性分类器
x1 = 1:0.01:10;
x2 = (-b-w(1).*x1)./w(2);
plot(x1, x2)

function [idx_misclass, counter] = class(sample, label, w, b)
    counter = 0;
    idx_misclass = [];
    for i=1:length(label)
        if (label(i)*(w*sample(i,:)'+b)<=0)
            idx_misclass = [idx_misclass i];
            counter = counter + 1;        
        end   
    end
end
function draw(sample, label)
    idx_pos = find(label==1);
    idx_neg = find(label~=1);
    plot(sample(idx_pos, 1), sample(idx_pos, 2),'ro')
    hold on
    plot(sample(idx_neg, 1), sample(idx_neg, 2),'b*')
    axis([0 10 0 10])
    grid on
end



3. 结果如下:






  • 4
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值