机器学习基石PLA相关

1.PPT中定理的证明

P:证明,当 w0=0 w 0 = 0 时,经过 T T 次迭代,有以下关系式:


wfTwfwTwTTconstant

  • 下图中通过 wf w f wt w t 这两个向量之间求内积说明 wt w t wf w f 之间是越来越接近的。见图1:
    PLA
  • 但是内积变大有可能是向量的坐标值的变化,要证明两个向量变的更加接近,还需解决向量长度的问题。见图2:
    PLA

    要证明 wTfwfwTwTTconstant w f T ‖ w f ‖ w T ‖ w T ‖ ≥ T ⋅ c o n s t a n t 并求出 constant c o n s t a n t ,首先,
    根据图2, wt+12wt2+maxnynxn2 ‖ w t + 1 ‖ 2 ≤ ‖ w t ‖ 2 + m a x n ⁡ ‖ y n x n ‖ 2 ,那么 wt+T2wt2+Tmaxnynxn2 ‖ w t + T ‖ 2 ≤ ‖ w t ‖ 2 + T ⋅ m a x n ⁡ ‖ y n x n ‖ 2 ,
    t=0 t = 0 ,并且令 w0=0 w 0 = 0 时,上式变为, wT20+Tmaxnynxn2 ‖ w T ‖ 2 ≤ 0 + T ⋅ m a x n ⁡ ‖ y n x n ‖ 2
    1wT1Tmaxnynxn 1 ‖ w T ‖ ≥ 1 T ⋅ m a x n ⁡ ‖ y n x n ‖

    根据图1, wTfwt+1wTfwt+minn ynwTfxn w f T w t + 1 ≥ w f T w t + m i n n ⁡   y n w f T x n ,那么 wTfwt+TwTfwt+Tminn ynwTfxn w f T w t + T ≥ w f T w t + T ⋅ m i n n ⁡   y n w f T x n ,当 t=0 t = 0 并且 w0=0 w 0 = 0 时,则得到, wTfwTTminn ynwTfxn w f T w T ≥ T ⋅ m i n n ⁡   y n w f T x n
    wTfwTwfTminn ynwTfxnwf w f T w T ‖ w f ‖ ≥ T ⋅ m i n n ⁡   y n w f T x n ‖ w f ‖

    将上述两式相乘,
    wTfwTwfwTTminn ynwTfxnwfmaxn ynxn w f T w T ‖ w f ‖ ‖ w T ‖ ≥ T m i n n ⁡   y n w f T x n ‖ w f ‖ m a x n ⁡   ‖ y n x n ‖

    由此也可以求出 constant c o n s t a n t 的表达式。

2.PLA代码实现

  • 数据下载,放到与代码同级目录下,linux下打开终端运行:
wget https://raw.githubusercontent.com/lxrobot/lxrobot-s-code/master/train_data.txt
  • 代码:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
"""
Created on Sat Jul 14 17:59:47 2018

@author: lx
"""
from __future__ import division
import pandas as pd
import numpy as np
import random

def getDate(filename):
    df=pd.read_csv(filename,delim_whitespace=True,names=['x0','x1','x2','x3','y'])
    x=np.asarray(df)
    random.shuffle(x)
    x_train=x[0:300,:-1]
    x_test=x[300:400,:-1]    
    y_train=x[:300,-1]
    y_test=x[300:400,-1]
    return x_train,y_train,x_test,y_test
def sign(x):
    return -1 if x<0 else 1;
def naive_PLA(X,Y,w,b,alpha,max_steps):
    num=len(X)
    flag=1
    step=0
    for i in xrange(max_steps):
        flag=1
        for j in xrange(num):
            y_=w.dot(X[j])+b
            if sign(y_)!=Y[j]:
                print "The loss of %d step is %5.5f."%(i,y_*Y[j])
                flag=0
                w+=alpha*Y[j]*X[j]
                b+=alpha*Y[j]
                break
            else:
                continue
        if flag==1:
            step=i
            break
    return w,b,step
def getAccuracy(X,Y,w,b):
    y_=[]
    for i in range(len(Y)):
        y0=sign(X[i].dot(w)+b)
        y_.append(y0)
    y_=np.array(y_,dtype=float)
    correct=np.flatnonzero(y_-Y)
    num=len(Y)
    return y_,len(correct)/num

if __name__=='__main__':
    filename='train_data.txt'
    x_train,y_train,x_test,y_test=getDate(filename)
#   w=np.random.random((4))
#   b=random.random()
    w=np.zeros((4,))
    b=0
    alpha=0.00001
    max_step=100000
    w,b,step=naive_PLA(x_train,y_train,w,b,alpha,max_step)
    print "The actual training step is {}".format(step)
    y_,acc=getAccuracy(x_test,y_test,w,b)
    print y_[:15]
    print y_test[:15]
    print "The accuracy of PLA is %2.4f%%."%((1.0-acc)*100)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值