感知机算法之Python代码实现
感知机算法之Python代码实现
1.算法简介
感知机学习算法原始形式:
输入:训练集T
输出:w,b
感知机模型:f(x)=sign(w·x+b)
算法步骤:
1.初始化参数w0,b0
2.在训练集中选取数据(xi,yi)
3.如果yi(w·xi+b)<=0:
w=w+l·yi·xi # l为学习率
b=b+l·yi
4.转至2,直至训练集中没有误分类点。
学习算法的直观解释:
当一个实例点被误分类,即位于分离超平面的错误一侧时,则调整w和b的值,使得分离超平面向该错误分类点
的一侧移动,以减少该错误分类点与超平面间的距离,直至超平面越过该误分类点使其被正确分类。
2.代码实现
import numpy as np# 训练集
train_set = np.array([[3, 3, 1],[4, 3, 1],[1, 1, -1]])
w = np.array([0, 0]) # 权重参数
b = 0 #偏置
l = 1 # 学习率# 更新该样本点参数
def update(item):global w, b # 全局变量(便于修改全局变量w和b)# 计算w和b ——w += l * yi * xi,b += l * yiw += l * item[-1] * item[:-1]b += l * item[-1]# 打印结果print("w={}, b={}".format(w, b))# 检查是否有错误分类点
def check():# 默认无错误分类点flag = False# 检查所有样本点# 记录检查结果res = 0for item in train_set:# 计算w*xi+bres = (w * item[:-1]).sum() + b# 计算yi(w*xi+b)res *= item[-1]# 判断是否错误分类if res <= 0:# 错误分类flag = True# 更新该样本点参数update(item)return flagif __name__ == "__main__":flag = Falsefor i in range(100):# 无错误分类点,结束迭代if not check(): # check返回False,表示无错误分类点flag = Truebreak# 有错误分类点,需继续迭代if flag:print("100次迭代,可以完成正确分类!")else:print("100次迭代,不可完成正确分类!")
3.代码结果
w=[3 3], b=1
w=[2 2], b=0
w=[1 1], b=-1
w=[0 0], b=-2
w=[3 3], b=-1
w=[2 2], b=-2
w=[1 1], b=-3
100次迭代,可以完成正确分类!
4.参考
李航——统计学习方法
林轩石——机器学习基石
知乎——《浅析感知机二》
谢谢观看, 欢迎交流、支持点赞和收藏哦 ~
感知机算法之Python代码实现相关推荐
- 决策树模型 - (ID3算法、C4.5算法) - Python代码实现
目录 算法简介 信息熵(Entropy) 信息增益(Information gain) - ID3算法 信息增益率(gain ratio) - C4.5算法 源数据 代码实现 - ID3算法 代码实现 ...
- 维吉尼亚密码的破解算法及python代码实现
目录 1. 密文描述 1.1 密文1 1.2 密文2 2. 破解原理 2.1 重合指数法确定密钥长度 2.2 互重合指数确定子串间相对偏移 2.3 密钥字的确定 2.4 密文破解 3. 破解代码 参考 ...
- 算法笔记(11)逻辑回归算法及Python代码实现
逻辑回归算法是一种被广泛使用的分类算法,通过训练数据中的正负样本,学习样本特征到样本标签之间的假设函数.逻辑回归假设因变量 y 服从伯努利分布,而线性回归假设因变量 y 服从高斯分布. 因此与线性回归 ...
- 数据清洗:真值发现TruthFinder算法(附Python代码)
本篇博客主要介绍数据清洗中的真值发现问题及其经典求解算法TruthFinder的原理及Python实现. 1 真值发现 Web已经成为大多数人信息获取的重要来源,但由于信息时效性.传播性.信息 ...
- 《统计学习方法》第10章 隐马尔科夫模型 HMM算法 纯Python代码实现 + 前后向算法矩阵形式 + 课后习题答案
理论知识:<统计学习方法>第10章 隐马尔科夫模型 一.HMM算法矩阵写法 前向算法 P(O∣λ)=πTBo1ABo2ABo3⋯ABoT(1,1,1)TP(O| \lambda) = \p ...
- Berlekamp-Massey算法及python代码实现
1. Berlekamp-Massey算法原理介绍 1.1 基本概念简介 设 a‾=(a0,,a1,⋯,aN−1)\underline{a}=\left( a_{0,},a_1,\cdots ,a ...
- 求大素数原根算法(python代码)
定义: 代码可直接看下面求素数p原根的最终方法 对于素数 p,如果存在一个正整数 1<a<p, 使得 a1,a2,-,ap−1a1,a2,-,ap−1 模 p 的值 取遍 1,2,-,p− ...
- 【机器学习】一文读懂异常检测 LOF 算法(Python代码)
本篇介绍一个经典的异常检测算法:局部离群因子(Local Outlier Factor),简称LOF算法. 背景 Local Outlier Factor(LOF)是基于密度的经典算法(Breunin ...
- python实现支持向量机实例_一个简单的案例带你了解支持向量机算法(Python代码)...
介绍 掌握机器学习算法并不是一个不可能完成的事情.大多数的初学者都是从学习回归开始的.是因为回归易于学习和使用,但这能够解决我们全部的问题吗?当然不行!因为,你要学习的机器学习算法不仅仅只有回归! 把 ...
最新文章
- 使用Visual Studio 2010开发和调试Html5项目
- 附近的人 php,php 附近的人
- Sublime package control错误:There are no packages available for installation
- 指针类型和指针类型转换的理解
- vue传中文标点_vue项目引入第三方高德地图实现标点定位
- UNIX网络编程——select函数的并发限制和 poll 函数应用举例
- 分布式系统开发注意点_分布式系统注意事项
- NVIDIA Tesla K40C 和 AMD Firepro W8100 的对比
- 基于JAVA+Servlet+JSP+MYSQL的银行账户管理系统
- haproxy Starting proxy XXX: cannot bind socket
- laravel常用拓展库
- iOS:Tagged Pointer
- 小楼一夜听春雨···
- 一些简单的css,html,js笔记分享给大家,希望能够帮助到大家
- docker-compose 部署shipyard
- 同一个电脑安装多个jdk版本
- linux - 安装Ubuntu20.04.5版本
- lua pairs与ipairs区别
- linux 9 aml 设置wifi,aml常用命令.pdf
- leetcode 883. 三维形体投影面积(python)