感知器基础

假设集

一般算法

口袋算法

MATLAB程序

function [w, update_times] = my_perceptron(x, y, eta)
% 基本的感知器算法,在没有错分样本时停止
% x             输入  x向量
% y             输入  y向量
% eta           输入  w <- w + eta*yt*xt
% w             输出  权重
% update_times  输出  w更新次数
% 初始化参数和变量

[dataSetSize, xSize] = size(x);
w = zeros(xSize, 1);
result = zeros(dataSetSize, 1);
gen = 0;    
% 计算感知器分类结果,并与训练数据进行比较
for index = 1:dataSetSize    
    result(index) = mysign(w' * x(index, :)');
end
test = result - y;

% 如果有错分样本,则尝试纠正错误,直至没有错分样本

while ~isempty(find(test, 1))
   % 随机选择一个错分样本
   index_list = find(test);
   index = index_list(randi(length(index_list)));
   % 更新w
   xt = x(index, :);
   yt = y(index);
   w = w + eta * (yt * xt)';
   gen = gen + 1;   % 重新计算感知器分类结果并与训练数据进行比较
   for index = 1:dataSetSize        
        result(index) = mysign(w' * x(index, :)');
   end
   test = result - y;
end

update_times = gen;

原文发布于微信公众号 - mwangblog(mwangblog)

原文发表时间:2019-02-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券