统计学习方法笔记(四) 感知机原理及matlab代码

感知机

感知机(perceptron)是二类分类的线性分类模型,其输入是实例的特征向量,输出为实例的类别,取+1和-1两个值。

感知机对应于输入空间中将实例分为正负两类的分离超平面,属于判别模型。

感知机学习算法分为原始形式和对偶形式

原始形式

 算法步骤

matlab代码实现 

function [ w,b ] = original_style( training_set,study_rate )  
%training_set是一个m*n维矩阵,其中,最后一列是y_i,其余是x_i  
%选取初始值w_0,b_0
[m,n]=size(training_set);
w=zeros(1,n-1);  
b=0;  
count=0;            %每一次正确分类点个数  
iteration_count=0;  %迭代次数  
fprintf('迭代次数\t误分类点\t\t权值w\t\t偏置b\t\n');%输出结果标题  
while count ~= size(training_set,1)    %training_set行数,即样本数;
    %当没有误分类点时,不执行if语句,count每次都加1,不满足while条件,跳出while循环,结束
    count=0;    
    %在训练集中选取数据(x_i,y_i)  
    for i=1:size(training_set,1)  
      count = count+1;  
      %如果某个样本y_i(w*x_i+b)<=0,则被误分类,对w和b进行相应的更新  
      if training_set(i,3).*(w*training_set(i,1:size(training_set,2)-1)'+b)<=0  
            w = w + study_rate*training_set(i,3).*training_set(i,1:size(training_set,2)-1);  
            b = b + study_rate*training_set(i,3);  
            iteration_count=iteration_count+1;  %迭代次数+1
            count=count-1;%不是正确分类点,减一  
            fprintf('\t%u\t',iteration_count);%输出迭代次数  
            fprintf('\t\t%u\t',i);%输出误分类点  
            fprintf('\t(%2.1g,%2.1g)''\t',w);%输出w  
            fprintf('\t%4.1g\n',b);%输出b          
      end
    end
end  

给出输入training_set和学习率study_rate,调用上述代码即可求出分类。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值