感知机学习

基本概念:感知机是二类分类的线性分类模型,对应于特征空间中将实例划分为正负两类的分离超平面,属判别模型。感知机学习旨在求出将训练数据进行线性划分的分离超平面。

 

感知机的定义:

从输入空间Rn到输出空间{+1,-1}的函数映射:f(x)= sign(w*x+b)

模型参数:w----权值向量   b----偏置

wx+b = 0 -----分离超平面方程

 

数据集{(xi,yi)}with 1<=i<=N称为线性可分的,如果存在分离超平面S:wx+b=0 可以将数据集的正例、负例点正确划分到其两侧

 

定义经验风险函数(损失函数):所有误分类点到分离超平面距离之和(这里为了计算方便略去一个比例系数),因此有Loss(w,b)= -sigma{yi*(w*xi+b)}, (xi,yi)属于误分类集合。在训练集上最小化损失函数,求得感知机模型。

 

感知机学习算法原始形式(使用随机梯度下降方法)

1.    选初值w0,b0

2.    从训练集随机挑选数据(xi,yi),如果训练集所有数据均以正确分类,那么结束算法,输出结果

3.    如果yi*(w*xi+b)<= 0:

更新 w,b 

w = w + r*xi*yi

b = b + r*yi

4.    转2。

 

程序实现:
import os
import sys
import random
 
#This algorithm learns a perceptron model from trainingdataset
#note: the trainset is linearly seperable, and different choicesof initial parameters or false-classified points
#may lead to different perceptron model, which is reasonableunder this framework.
#DATE:2013-7-4, by zhl
if __name__ == "__main__":
       trainset =[(3,3,1),(4,3,1),(1,1,-1)]
       #initialize
       w1 = w2 = b = 0
       id = 0
       # we set learning rate = 1
      
       while True:
            id += 1
           flag = False
           for choice in range(3):
              iftrainset[choice][2] * (w1 * trainset[choice][0] + w2 * trainset[choice][1] + b)<= 0:
                        flag = True
                        break
           if flag == False:
                  break
            #randomlyselect a point from trainset
           choice = random.randint(0,2)
      
           #judge whether it's false-classified
           if trainset[choice][2] * (w1 *trainset[choice][0] + w2 * trainset[choice][1] + b) <= 0:
                 w1 = w1 + trainset[choice][2] *trainset[choice][0]
                 w2 = w2 + trainset[choice][2] *trainset[choice][1]
                 b = b + trainset[choice][2]
        
           #print out current values
           print 'Round ',id,':','Flase ClassifiedPoint:',choice + 1,',w1:',w1,',w2:',w2,',b:',b,'\n'
      
       print 'Theperceptron model learned is sign(%d x1 + %d x2 + %d)\n' % (w1,w2,b)


<实验>给定训练集,正例x1=(3,3)x2=(4,3) 负例x3=(1,1),学习感知机模型


程序运行过程:

Round  1 : FlaseClassified Point: 1 ,w1: 3 ,w2: 3 ,b: 1

Round  2 : FlaseClassified Point: 1 ,w1: 3 ,w2: 3 ,b: 1

Round  3 : FlaseClassified Point: 2 ,w1: 3 ,w2: 3 ,b: 1

Round  4 : FlaseClassified Point: 2 ,w1: 3 ,w2: 3 ,b: 1

Round  5 : FlaseClassified Point: 1 ,w1: 3 ,w2: 3 ,b: 1

Round  6 : FlaseClassified Point: 3 ,w1: 2 ,w2: 2 ,b: 0

Round  7 : FlaseClassified Point: 1 ,w1: 2 ,w2: 2 ,b: 0

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值