您的位置:首页 > 编程语言 > MATLAB

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

2017-10-27 22:33 295 查看

感知机 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. 结果如下:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐