感知机
感知机(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,调用上述代码即可求出分类。