更新时间:2020/5/20
一、分类器
1.基于赏-罚概念的感知器算法
算法原理简介:
MATLAB代码实现:
clc;
clear all;
%%初始化
%w1=[1 0 1;0 1 1]';w2=[1 1 0;0 1 0]';%ppt上例子
w1=[0 0;0 1]; w2=[1 0;1 1];
%构建增广矩阵
w1(:,end+1)=1;w2(:,end+1)=1;
w2=-w2;%%w2×-1
[n1,m]=size(w1);%m为维数,n为个数
[n2,m]=size(w2);%以防w1和w2中样本个数不一致
c=1;%取c和w(1)
wx=[zeros(1,m)]';%初始权向量为0
flag2=1;
time=1;%迭代次数
while(flag2==1)%循环直到没有错误为止
flag2=0;
disp(sprintf('第%d轮',time));%输出这是第几轮迭代
for i=1:n1
flag=wx'*w1(i,:)';
if flag<=0%判断与0的大小
wx=wx+c*w1(i,:)'; wx'%权向量惩罚,像正确方向移动
flag2=1; %有错误就置1
else
wx=wx; wx'%权向量奖励,不变
end
end
for i=1:n2 %w2道理同上
flag=wx'*w2(i,:)';
if flag<=0
flag2=1;
wx=wx+c*w2(i,:)';wx'
else
wx=wx;wx'
end
end
time=time+1;
end
disp('overdata')
wx'
Fplot(w1,w2,wx);
%plot data 只适用于2维2分类
function Fplot(w1,w2,wx)
%此函数用于绘制分类器图片
%w1 属于第一类的样本n*m
%w2 属于第二类的样本n*m
%wx 最后得到的权向量n*<