感知器基础

假设集

感知器假设集

一般算法

感知器一般算法

口袋算法

感知器口袋算法

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;    % 更新w次数

% 计算感知器分类结果,并与训练数据进行比较
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;

留下评论

电子邮件地址不会被公开。 必填项已用*标注