李航统计学习之感知机及Python实现

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第 2章感知机 阅读详情

前言

最近开始学习李航的《统计学习方法》,作为模式识别学科的学生,感觉有必要把一些经典的machine learning method 用python实现一边,有利于加强对机器学习算法的理解。

感知机算法(Perceptron)

感知机算法是机器学习算法里面较为简单的线性二分类方法,此处的线性二分类指的是将输入的带有正负两类标签的数据用线性分离超平面进行划分。一般的线性分离超平面可以表示为:

w⋅x+b w·x+b w⋅x+b

感知机模型

假设输入空间(特征空间)是x∈Rn,输出空间是y={+1,-1}。输入是实例的特征向量,对应于输入空间的点;输出是实例的类别。输入空间到输出空间的如下函数:
f(x)=sign(w⋅x+b) f(x)=sign(w·x+b) f(x)=sign(w⋅x+b)
称为感知机。sign是符号函数,即
sign(x)={+1x≥0−1x&lt;0 \begin{array}{l}\mathrm{si}gn(x)=\left\{\begin{array}{l}\begin{array}{cc}+1&amp;x\geq0\end{array}\\\begin{array}{cc}-1&amp;x&lt;0\end{array}\end{array}\right.\\\end{array} sign(x)={+1​x≥0​−1​x<0​​​
针对给定的数据集,我们可以使损失函数极小化问题定义为:
minw,bL(w,b)=−∑xi∈Myi(w⋅xi+b) \underset{w,b}{min}L\left(w,b\right)=-\sum_{x_i\in M}y_i\left(w\cdot x_i+b\right) w,bmin​L(w,b)=−xi​∈M∑​yi​(w⋅xi​+b)
感知机算法是由误分类驱动的,任意选取一个超平面,在对超平面进行修正过程中,不是一次利用所有的误分类的点,而是一次随机将一个误分类点对超平面进行修正。
∇w&ThickSpace;L(w,b)=−∑xi∈Myixi \nabla w\;L\left(w,b\right)=-\sum_{x_i\in M}y_ix_i ∇wL(w,b)=−xi​∈M∑​yi​xi​
∇b&ThickSpace;L(w,b)=−∑xi∈Myi \nabla b\;L\left(w,b\right)=-\sum_{x_i\in M}y_i ∇bL(w,b)=−xi​∈M∑​yi​
通过上面公式,每次随机抽取一个误分类点对www,bbb修正:
w←w+ηyixi w\leftarrow w+\eta y_ix_i w←w+ηyi​xi​
b←b+ηyi \mathrm b\leftarrow\mathrm b+\eta y_i b←b+ηyi​

import numpy as np

import matplotlib.pyplot as plt

input_data = np.array([[3, 3], [4, 3], [1,1]])

input_label = np.array([1, 1, -1])

def activate_fucntion(x):

    if x > 0:

        return 1

    else:

        return -1

class Perceptron():

    def __init__(self):

        self.weight = [2, 2]

        self.baised = 2

        self.delta = 1

    def train_function(self):

        for i in range(100):

            count = -1

            for j in range(len(input_data)):

                if input_label[j] != activate_fucntion(np.dot(self.weight, input_data[j]) + self.baised) :

                    count = j

                    break

            if count == -1:

                break

            self.weight += self.delta * input_label[j] * input_data[j]

            self.baised += self.delta * input_label[j]

        return self.weight, self.baised

    def plt_graphy(self):

        plt.figure()

        plt.xlabel("x axis")

        plt.ylabel("y axis")

        x_line = [0, 10]

        y_line = [0, 0]

        for i in range(len(x_line)):

            y_line[i] = -(x_line[i] * self.weight[0] + self.baised) / self.weight[1]

        plt.plot(x_line, y_line)

        for index in range(len(input_data)):

            if input_label[index] == 1:

                plt.plot(input_data[index][0], input_data[index][1], 'bo')

            else:

                plt.plot(input_data[index][0], input_data[index][1], 'ro')

        print(self.weight[0])

        print(self.weight[1])

        plt.show()

if __name__ == '__main__':

    p = Perceptron()

    p.train_function()

    p.plt_graphy()
李航《统计学习方法》第二章-感知机的python实现 重点:感知机是一种二类分类的线性分类模型,属于判别模型。感知机对应于特征空间中的分离超平面 w*x+b=0损失函数:误分类点到分离超平面的总距离。学习算法:随机梯度下降法。有原始和对偶两种形式。当训练数据线性可分时,感知机学习算法存在无穷多解,其解由不同初值和迭代顺序而可能不同。实现代码:import numpy as np import matplotlib.pyplot as plt ... 阅读详情

相关推荐

感知机算法实现(使用MNIST数据集)_Python环境

在Python环境下实现感知机算法(使用MNIST数据集),代码有详细注释,使用的是感知机算法的原始形式

python计算学习,《统计学习方法》的Python实现:(1)感知机

0. 假装有一个前言前几天看到有人转李航老师的《统计学习方法》python 3.6实现,突然发现书我是看了一半了,代码却只写过第三章的近邻法。(不要问我为什么现在才看了一半,也不要问我为什么不一边看一边写)1. 感知机原理赶只鸡(划掉)感知机(Perceptron)是二分类的线性分类模型,只适用于线性可分的二分类问题。线性二分类问题输入输出模型类型参数意义特征向量类别()判别模型超平面参数感知机的...

weixin_35568959的博客 305

李航-统计学习方法PPT

李航-统计学习方法PPT,与统计学习方法一书配套结合。

李航机器学习方法3之感知机

浅谈感知机的公式推导。

joejoeqian的博客 437

MATLAB绘图中文乱码终极解决方案:从方框到清晰显示的全面指南

本文提供了MATLAB绘图中文乱码的全面解决方案。针对中文显示为方框的问题,从单次绘图的临时字体设置,到通过修改默认配置实现一劳永逸,再到系统级字体排查与Java环境配置,给出了详细的步骤指南。文章还涵盖了字体名称指定、图像导出防丢失以及跨平台协作等高级技巧,帮助用户彻底解决中文乱码困扰。

weixin_29093017的博客 618

CAN收发器选型避坑指南:TJA1051T与TJA1051T/3的硬件兼容性问题实录

本文详细解析了CAN收发器TJA1051T与TJA1051T/3的硬件兼容性问题,通过实测数据和故障案例揭示了VIO引脚的关键差异及其对系统的影响。提供从选型到验证的完整防坑方案,帮助开发者避免常见设计错误,确保CAN总线通信的稳定性。

weixin_42715608的博客 461

【李航统计学习方法】感知机模型

本章节根据统计学习方法,分为模型、策略、算法三个方面来介绍感知机模型。首先介绍感知机模型,接着介绍感知机的学习策略,也就是最小化损失函数,最后介绍感知机学习的算法,分为原始形式和对偶形式(当中也介绍了算法的收敛性)【PS:算法也就是随机梯度下降算法】 一、感知机模型 首先感知机(perceptron)模型是一个二类分类的线性分类模型,属于判别模型。其输入为实例的特征向量,输出 为实例的类别,取+1和–1二值。我是不喜欢看定义,倒不如用几何模型来的直观。 以上就是感知机模型的作用,旨在求出将训练数.

qq_40276310的博客 846

告别手动拖拽!PyQt5/PyQt6 QTableView列宽自适应窗口的三种实战方案(附性能对比)

本文详细介绍了PyQt5/PyQt6中QTableView列宽自适应窗口的三种实战方案,包括Stretch模式、resizeEvent手动计算和ResizeToContents模式,并附有性能对比。帮助开发者解决窗口大小变化时列宽不变的常见问题,提升用户体验和开发效率。

weixin_42538752的博客 235

李航统计学习方法 Chapter2 感知机

如果想了解更多的知识,可以去我的机器学习之路 The Road To Machine Learning通道1.感知机是根据输入实例的特征向量xxx对其进行二类分类的线性分类模型:f(x)=sign⁡(w⋅x+b) f(x)=\operatorname{sign}(w \cdot x+b) f(x)=sign(w⋅x+b)感知机模型对应于输入空间(特征空间)中的分离超平面w⋅x+b=0w \cdot x+b=0w⋅x+b=0。2.感知机学习的策略是极小化损失函数:min⁡w,bL(w,b)=−∑xi∈Myi(

风信子的猫Redamancy的快乐星球 8250

Halcon 3D点云匹配实战:从预处理到模板创建的完整流程(附代码)

本文详细介绍了Halcon在3D点云匹配中的实战应用,涵盖从预处理到模板创建的完整流程。通过代码示例和实用技巧,帮助开发者掌握点云采样、降噪、三角化等关键技术,并优化匹配参数以提高精度和效率。适用于工业检测、机器人引导等领域。

weixin_33670786的博客 433

Unity3D实现项目限制功能(使用次数限制和时间限制)

大家好,我是心疼你的一切,不定时更新Unity开发技巧,觉得有用记得一键三连哦。在软件开发的时候,可能会遇到程序的使用次数限制,以及时间的限制,下面就写一下这两种方法是新建注册表,增加键值对,修改键值,完成对程序的控制提示:以下是本篇文章正文内容,下面案例可供参考以上就是讲了两种限制方法不定时更新Unity开发技巧,觉得有用记得一键三连哦。

心疼你的一切博客 1812

李航《统计学习方法》笔记之感知机perceptron

1.一条直线不分错一个点,这就是好的直线。2.模型要尽可能找到好的直线。3.如果没有好的直线,在差的直线中找到较好的直线。4.判断直线多差的方式分错的点到直线的距离求和,距离越大则模型越差。(感知机)假设输入空间(特征空间)是$\mathcal{X}\subseteq\mathbf{R}^{n}$,输出空间是$\mathcal{Y}={+1,-1}$。输入$x\in\mathcal{X}$表示实例的特征向量,对应于输入空间(特征空间)的点;w∈Rnw。......

timerring的博客 1826

Android 13 灭屏音乐播放问题解决与优化建议

通过在中增加对音乐播放状态的检测,我们成功解决了客户应用在灭屏状态下音乐播放被中断的问题。

m0_60898338的博客 1157

Python实现感知机算法——李航《统计学习方法》

接下来一学期选了门《机器学习》的课程,所以打算把相关的作业也发上来! 一: 请说明感知机为何不能解决异或问题。 答:我们知道感知机属于线性模型,由于其无法找到一个线性模型对异或问题进行划分,所以其不能解决异或问题。具体解释如下: 首先我们知道感知机的数学表达式就是: f(x)=sign(wx+b) 其中sign是符号函数,w和b都是感知机参数,x表示实例的特征向量,而y=f(x)就是实例的类别。以...

qq_37335890的博客 1818

Unity 面试篇|(四)Unity性能优化篇 【全面总结 | 持续更新】

Unity中,CPU准备好需要绘制的元素,对底层图形程序接口进行调用的过程,每次引擎准备数据并通知GPU的过程称为一次Draw Call。DrawCall越高对显卡的消耗就越大。降低DrawCall的方法:动态合批静态合批降低shader的等级特性场景优化策略——遮挡技术。rectMask2D替代Mask。

游戏开发小Y的博客 13万+

matlab处理las点云(1)——las/laz格式解析【2024最新版】

matlab中的las/laz格式解析。博客长期更新,本文最近一次更新时间为:2024年11月9日。

点云侠的博客 8461

(2) 李航《统计学习方法》基于Python实现——感知机

概述 感知机(perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1两类。感知机对应于输入空间(特征空间)中将实例划分为正负两类的超平面,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。 感知机学习算法分为原始形式和对偶形式,由Rosenblatt...

yilulvxing的博客 5026

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

李航统计学习--感知机算法实现(python)

感知机 1.感知机是根据输入实例的特征向量xxx对其进行二类分类的线性分类模型: f(x)=sign⁡(w⋅x+b)f(x)=\operatorname{sign}(w \cdot x+b)f(x)=sign(w⋅x+b) 感知机模型对应于输入空间(特征空间)中的分离超平面w⋅x+b=0w \cdot x+b=0w⋅x+b=0。 2.感知机学习的策略是极小化损失函数: min⁡w,bL(w,b)=−∑xi∈Myi(w⋅xi+b)\min _{w, b} L(w, b)=-\sum_{x_{i} \in M}

codedz的博客 6416

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

李航统计学习方法-感知机python实现

1、理论中原始算法的实现 # 利用Python实现感知机算法的原始形式 # -*- encoding:utf-8 -*- import numpy as np import matplotlib.pyplot as plt def createData(): samples = np.array([[3, -3], [4, -3], [1, 1], [1, 2]]) l...

JohnBanana的专栏 792

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

(李航统计学习方法)感知机Python实现

机器学习的三要素:模型,策略,算法 模型:感知机是二分类线性分类模型,属于判别模型。 策略:基于误分类点到超平面的总距离。 学习算法:略 感知机存在的问题: 存在多解,解依赖于初始超平面的选择以及迭代过程中误分类点的选择。 训练集线性不可分,算法无法收敛,解决方法:使用核函数。 无法解决异或问题 Python代码实现: import numpy as np def train(X_train,...

Rudy95的博客 536

统计学习方法(李航) 感知机 附python及sklearn实现

第2章 感知机 有监督学习 分类问题 线性分类模型 感知机是什么? 你是否听说过复杂的神经网络呢? 感知机可以称为单层的神经网络,而多层的感知机则称为神经网络 感知机是二类分类的线性分类模型,其输入为实例的特征向量TTT,输出为实例的类别yyy 即: T={(x1,y1),(x2,y2),...,(xN,yN)} T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1​,y1​),(x2​,y2​),...,(xN​,yN​)} y={+1,−1} y=\{

m0_49337600的博客 627

感知机 代码实现

前言:本文是李航统计学习方法第二章《感知机》的python代码实现,与在下的统计学习系列博文搭配使用。 感知机的代码实现较为简单,感知机原理请移步感知机. 代码如下: import pandas as pd import numpy as np ##生成数据集 df=pd.DataFrame({'x1':[3,4,1], 'x2':[3,3,1], 'y':[1,1,-1]}) #定义感知机主题...

zxy479547584的博客 558

感知机学习算法代码简单实现

感知机算是一个比较简单的算法了,原理网上有很多,有原始形式和对偶形式两种,感觉自己比较菜,觉得慢慢从头把新版的李航统计学习方法自己实现一遍,明年就要实习了,慌得一批,这里仅把算法描述和原始形式的简单形式用python实现以下,供自己日后复习: # -*- coding:utf-8 -*- import numpy as np # 感知机学习算法demo data = np.array([[3,...

熊伟 910

李航《统计学习方法》第二章——感知机及python实现

感知机对偶形式 算法2.2 (1) 初始化参数 α=0\alpha = 0α=0,b=0b = 0b=0,η∈(0,1]\eta \in (0,1]η∈(0,1] (2) 对于特征数据进行循环: \quad \quad如果 yi(∑j=1Nαjyjxj∗xi+b)⩽0y_i(\sum_{j=1}^N \alpha_j y_j x_j * x_i + b) \leqslant 0yi​(∑j=1N​αj​yj​xj​∗xi​+b)⩽0 ,更新参数: \quad \quad \quad \quad \qua

m0_61165991的博客 495

感知机的对偶形式

李航的统计学习方法上写的不是很详细,这个博客写的还可以。 图片来源 自己尝试把感知机对偶形式的代码写了一下,假设学习率为1,我这个菜鸡,代码能力是真的差,明年就要实习了,得硬着头皮写了: # -*- coding:utf-8 -*- import numpy as np # 感知机对偶形式学习算法demo data = np.array([[3, 3, 1], [4, 3, 1], ...

熊伟 789

李航《统计学习方法》学习笔记及python实现:第二章 感知机

感知机(perceptron)是二类分类的线性分类模型,其输入为实例的特征向量,输出 为实例的类别,取+1和–1二值。感知机对应于输入空间(特征空间)中将实例划分为正 负两类的分离超平面,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的分 离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化, 求得感知机模型。 模型 假设输入空间(特征空间)是x⊆Rn,输出空间是 ...

XB_please的博客 686
上一篇: 使用tensorboard查看graph、loss、
下一篇: 异常检测小例子
SoyCoder
博客等级 码龄9年 12粉丝 16原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值