感知机简介及python代码简介

本文介绍了感知机模型作为二分类线性分类模型的基础原理。详细解释了感知机的学习目标是寻找能够正确划分训练数据的超平面,并给出了感知机的损失函数及参数优化过程。通过梯度下降法更新权重和偏置项,最终实现对样本数据的有效分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

感知机 (Perceptron) 是二分类的线性分类模型;感知机学习旨在求出将训练数据进行线性划分的分离超平面。

1、感知机模型:

f(x)=sign(θx+b) , 其中, sign(z)={+11z >= 0z<0

其中: θ b 是感知机参数模型,x 是输入 n 维特征向量,θ 称为 n 维权值或者 权值向量(weight  vector) b 称为偏置(bias)

2、损失函数

选择依据:误分类点到分类超平面 S 的总距离。

样本点(x0,  y0)到分类超平面的距离是: d=1||θ|||θx+b|

对于误分类的点 (xi,  yi) , 有当 θxi+b>0 时, yi<0 ; 当 θxi+b<0 时, yi>0 ,所以有:

yi(θxi+b)>0

误分类点到分离超平面的 S 的距离是: 1||θ||yi(θxi+b)

针对所有的样本,所有的误分类点到分类超平面的 S 的总距离是: 1||θ||xiNyi(θxi+b)

当不考虑 1||θ|| 时,可得感知机学习的损失函数是:

L(θ,b)=xiNyi(θxi+b)

3、参数优化

感知机学习算法是误分类驱动的,采用梯度下降法进行参数优化, α 为学习率。

L(θ,b)θ=xiNyixi

L(θ,b)b=xiNyi

随机选取一个误分类样本点 (xi  yi) ,对 θ  b 进行优化:

θ=θ+αyixi

b=b+αyi .

代码测试:数据集

# -*- coding:utf-8 -*-
from numpy import *
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt

if __name__=="__main__":
    print "hello world"
    data = pd.read_csv("testSet.txt",delimiter='\t',header=None)
    m,n = shape(data)            # m 样本数目
    x = mat(ones((m,n)))          
    for i in range(n-1):
        x[:,i+1] = mat(data[i]).T
    y = mat(data[[n-1]])
    theta = mat(zeros((1,n)))

    a = 0.001
    for k in range(m):
        if y[k] == 0:            # 将 0 标签改为 -1
            y[k] = -1
    for i in range(1000):
        for j in range(int(m)):
            if y[j]*(theta*x[j].T)<=0:
                theta = theta + a*y[j]*x[j]
    print"theta\n", theta

    x1_record = []; y1_record =[]
    x2_record = []; y2_record =[]
    for i in range(m):
        if y[i] == 1:
            x1_record.append(x[i,1])
            y1_record.append(x[i,2])
        else:
            x2_record.append(x[i,1])
            y2_record.append(x[i,2])
    xc = arange(-4,4,0.1)
    y_hat = (-theta[0,0]-theta[0,1]*xc)/theta[0,2]
    mpl.rcParams['font.sans-serif'] = [u'SimHei']     # 这两行保证在图中可以加入汉字
    mpl.rcParams['axes.unicode_minus'] = False
    plt.figure()
    plt.scatter(x1_record,y1_record,s=25,c='red')
    plt.scatter(x2_record,y2_record,s=30,c='blue')
    plt.plot(xc,y_hat)
    plt.xlabel('Feature 1')
    plt.ylabel('Feature 2')
    plt.title(u'感知机学习算法分类',fontsize =18)
    plt.show()

注:在代码中 θx+b=ωX , 其中 ω 是 n+1 维向量, X0=1

参考:
《统计学习方法》 李航

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值