《统计学习方法》学习笔记(1)perceptron

《统计学习方法》学习笔记(1) perceptron


感知机,作为后面支持向量机等的学习基础,很有必要好好学学研究透。只能用来在特征空间中线性分类,属于判别模型,形式为: wx+b=0 , 这里 wx 表示两个向量的点乘,还可以表示为 wxT 其中 xT 表示 x 的转置。对于一个线性可分的数据集: T={(x1,y1),(x2,y2),...,(xN,yN)} 这里 xiχ=Rn 。李航的书为了简便并未用粗体来区分向量和标量,而国外的教程中一般通过粗体来表示出向量,正常字体表示标量。

感知机的学习策略就是通过从一个初始的超平面开始,通过错分类点,逐步逐步调整参数w和b来使错分类点到达超平面的正确的一边。这里要注意一下一些方面:

1. 随机梯度下降和梯度下降的区别

调整策略使用的是随机梯度下降法(stochastic gradient descent),它和梯度下降的区别如下:

Gradient Descent: You need to run over every training example before doing an update, which means that if you have a large dataset, you might spend much time on getting something that works.

Stochastic gradient descent:on the other hand, does updates every time it finds a training example, however, since it only uses one update, it may never converge, although you can still be pretty close to the minimum.

简言之就是梯度下降是把所有样本带入计算,而随机梯度下降每次只使用一个样本,当样本很大时迭代一次的速度远远大于梯度下降。

梯度下降

Repeatuntilconvergence{

θj:=θj+αi=1m(y(i)hθ(x(i)))x(i)j](foreveryj)
}

随机梯度下降
loop{
fori=1tom,{

θj:=θj+α(y(i)hθ(x(i)))x(i)j(foreveryj)

}
}

2. 问题的原始形式和对偶形式

每一个线性规划问题都伴随着另一个线性规划问题,我们称之为对偶问题,原问题就称为原始问题。对偶的基本想法是将原始问题中的参数表示为样本实例和标记的线性组合形式,通过求解系数来求解原参数,这里有句话叫做实例点更新次数越多,意味着它离超平面越近,即越难分类。
贴上书上例题对偶形式的算法:正样本点(3,3),(4,3),负样本点(1,1)

#include<iostream>
using namespace std;

int main()
{
    int x[3][2]={
        {3,3},
        {4,3},
        {1,1}
    };
    int y[3]={1,1,-1};
    int alp[3]={0};
    int g[3][3],k,m,b,flag;
    k=b=0;
    flag=1;
    for(int i=0;i<3;i++)
    for(int j=0;j<3;j++)
        g[i][j]=x[i][0]*x[j][0]+x[i][1]*x[j][1];
    while(flag)
    {
        flag=0; 
         for(int i=0;i<3;i++)
         {
            while(true)
            {
               m=0;
               for(int j=0;j<3;j++)
                  m+=alp[j]*y[j]*g[j][i]; 
                  m+=b;
                  m*=y[i];
               if(m<=0)
               {
                  flag=1;
                  alp[i]++;
                  b=b+y[i]; 
               }
               else
               break;
            }
         }
    }
    for(int i=0;i<3;i++)
    cout<<"alpa"<<i+1<<": "<<alp[i]<<endl;
    cout<<"b: "<<b<<endl;

} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值