一般算法
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;