简单易学的机器学习算法——Rosenblatt感知机

一、感知机的概念

    感知机是一种二类分类的线性模型,输入实例的特征向量,输出为实例的类别,即+1或者-1。感知机模型是神经网络和支持向量机的基础。
    假设特征为,类标签为,由特征到类标签的映射可以表示为
这样的函数称为感知机。其中为感知机的参数,为权重,为偏置。为向量与向量之间的内积。为符号函数:

为分隔超平面。

二、感知机模型的训练

    1、目标函数

        为了能够正确的对实例分类,我们的目标是能够求出分隔超平面,即求出参数。在这里,分隔超平面存在的前提是数据集是线性可分的
        在训练参数时,我们可以采用损失函数,并且使得损失函数最小化。感知机的训练中损失函数可以采用误分类点到分隔超平面的距离的总和。一个点被正确分类是指当时,而原始标签;类似的,当时,而原始标签。一个点到平面之间的距离公式为

对于误分类点,有,因此误分类点到分隔超平面之间的距离为
可以不考虑,则对于误分类点集合,感知机的损失函数为

我们的目标使得损失函数最小化,即。我们可以使用梯度下降法求解这样的最小化问题。(梯度下降法),在这里我们采用梯度下降法的改进算法:随机梯度下降法。

    2、感知机的训练过程

  • 随机选取权重和偏置的初值
  • 随机选取初始实例
  • 如果
  • 转至2,直到训练集中没有误分类点。

三、实例

    选自《统计学习方法》,训练集为:正实例点是,负实例点是

原始点集
MATLAB代码
%读入数据
x=[3,3;4,3;1,1];
y=[1;1;-1];

%--初始化w和b
w = [0,0];
b = 0;
a = 1;%步长

%--选择未能初始化的点
flag = 0;

i = 1;
while flag~=1
    while i <= 3
        t = y(i)*(w*x(i,:)'+b);
        if t <= 0
            w = w + a*y(i,:)*x(i,:);
            b = b + a*y(i,:);
            i = 1;%重置i
            break;
        else
            i = i+1;
        end
        if i == 4
            flag = 1;
        end
    end
end
%画出分隔线
hold on
axis([0 5 0 5]);%axis一般用来设置axes的样式,包括坐标轴范围,可读比例等
for j = 1:3
    plot(x(j,1),x(j,2),'.');
    m(1,j) = (-b-w(1)*j)./(w(2));
end
j = 1:3;
plot(j,m);
分类结果
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值