感知机

随机生成一些点和一条原始直线,然后用感知机算法来生成一条直线进行分类,比较差别

导入包并设定画图尺寸

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
plt.rcParams['figure.figsize'] = (8.0,6.0) # 生成图的大小

随机产生数据

fig = plt.figure() # 产生新画布
figa = plt.gca() # 获取当前画布 # 产生100个点
N = 100
xn = np.random.rand(N,2)
x = np.linspace(0,1) # linspace函数可以生成元素为50的等差数列 # 随机生成一条直线
a = np.random.rand()
b = np.random.rand()
f = lambda x:a*x+b # 线性分割前面产生的点
yn = np.zeros([N,1])
for i in range(N):
if(f(xn[i,0])>=xn[i,1]):
yn[i] = 1
plt.plot(xn[i,0],xn[i,1],'bo',markersize=12) # 'bo':用蓝色圆圈标记
if(f(xn[i,0])<xn[i,1]):
yn[i] = -1
plt.plot(xn[i,0],xn[i,1],'go',markersize=12) # 'go':用绿色圆圈标记

超平面的实现

def perceptron(xn,yn,MaxIter=1000,a=0.1,w=np.zeros(3)):
'''
实现一个二维感知机
对于给定的(x,y),感知机将通过迭代寻找最佳的超平面来进行分类
输入:
xn:数据点 N*2 向量
yn:分类结果 N*1 向量
MaxIter:最大迭代次数(可选参数)
a:学习率(可选参数)
w:初始值(可选参数)
输出:
w:超平面参数使得 y=ax+b 最好地分割平面
注意:
由于初始值为随机选取,因此迭代到收敛可能需要一点时间
该函数仅为感知机的简单实现,实际需要考虑更多的内容
'''
N = xn.shape[0]
# 生成超平面
f = lambda x:np.sign(w[0]*1+w[1]*x[0]+w[2]*x[1])
# 反向传播
for _ in range(MaxIter):
i = np.random.randint(N)
if(yn[i]!=f(xn[i,:])):
w[0] = w[0] + yn[i]*a*1
w[1] = w[1] + yn[i]*a*xn[i,0]
w[2] = w[2] + yn[i]*a*xn[i,1]
return w

实际应用

w = perceptron(xn,yn)

# 利用权重w,计算 y=ax+b 中的a,b
new_b = -w[0] / w[2]
new_a = -w[1] / w[2]
y = lambda x:new_a*x+new_b # 分割颜色
sep_color = (yn) / 2.0 plt.figure()
figa = plt.gca() plt.scatter(xn[:,0],xn[:,1],c=sep_color.flatten(),s=50) # s:表示点的大小
plt.plot(x,y(x),'b--',label='感知机分类结果')
plt.plot(x,f(x),'r',label='原始分类曲线')
plt.legend()
plt.title('原始曲线与感知机分类结果近似比较')
Text(0.5, 1.0, '原始曲线与感知机分类结果近似比较')

Python 实现简单的感知机算法的更多相关文章

  1. python 实现简单的感知机

    最近在自学机器学习,记录下一些学习记录 如何用python实现一个简单的感知机 需要安装numpy库,即下面用到的np 简单的说就是 通过计算权重向量w和输入向量x的线性组合,判断该线性组合是否大于某 ...

  2. python 实现简单的KNN算法

    from numpy import * import operator def createDataSet(): group = array([[3,104],[2,100],[1,81],[101, ...

  3. python实现简单关联规则Apriori算法

    from itertools import combinations from copy import deepcopy # 导入数据,并剔除支持度计数小于min_support的1项集 def lo ...

  4. python实现简单分类knn算法

    原理:计算当前点(无label,一般为测试集)和其他每个点(有label,一般为训练集)的距离并升序排序,选取k个最小距离的点,根据这k个点对应的类别进行投票,票数最多的类别的即为该点所对应的类别.代 ...

  5. 使用Python来编写一个简单的感知机

    来表示.第二个元素是表示期望输出的值. 这个数组定义例如以下: training_data = [  (array([0,0,1]), 0),  (array([0,1,1]), 1),  (arra ...

  6. 教你用Python实现简单监督学习算法

    教你用Python实现简单监督学习算法 监督学习作为运用最广泛的机器学习方法,一直以来都是从数据挖掘信息的重要手段.即便是在无监督学习兴起的近日,监督学习也依旧是入门机器学习的钥匙. 这篇监督学习教程 ...

  7. 机器学习---用python实现感知机算法和口袋算法(Machine Learning PLA Pocket Algorithm Application)

    之前在<机器学习---感知机(Machine Learning Perceptron)>一文中介绍了感知机算法的理论知识,现在让我们来实践一下. 有两个数据文件:data1和data2,分 ...

  8. Python之路,Day21 - 常用算法学习

    Python之路,Day21 - 常用算法学习   本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的 ...

  9. 机器学习算法--Perceptron(感知机)算法

    感知机: 假设输入空间是\(\chi\subseteq R^n\),输出空间是\(\gamma =\left( +1,-1\right)\).输入\(\chi\in X\)表示实例的特征向量,对应于输 ...

随机推荐

  1. 服务器部署之nginx的配置

    nginx可作为Web和 反向代理 服务器,在高连接并发的情况下,Nginx是Apache服务器不错的替代品.下面记录一下自己对nginx的配置和使用. nginx的安装 环境:oracle-linu ...

  2. py,pyc,pyw文件的区别和使用

    熟悉python编程的都知道,python三种最常见的py文件格式,.py,.pyc,.pyw,下面说一说它们各自的使用. py文件 python最常见的文件,是python项目的源码: 文件执行时l ...

  3. go时间和日期

    1. time包 2. time.Time类型,用来表示时间 3. 获取当前时间, now := time.Now() 4. time.Now().Day(),time.Now().Minute(), ...

  4. 2017 CERC

    2017 CERC Problem A:Assignment Algorithm 题目描述:按照规则安排在飞机上的座位. solution 模拟. 时间复杂度:\(O(nm)\) Problem B: ...

  5. u-boot界面添加命令[demo]

    目标板:2440 如何在u-boot界面中增加命令 在/common/目录下建立文件,调用执行函数do_bootm就行,然后在修改Makefile,就OK了. 比如在u-boot界面添加命令test ...

  6. python模块之itertools

    在循环对象和函数对象中,我们了解了循环器(iterator)的功能.循环器是对象的容器,包含有多个对象.通过调用循环器的next()方法 (__next__()方法,在Python 3.x中),循环器 ...

  7. 如何将qlv格式的腾讯视频转换为mp4格式

    一般来说,每个视频网站都会有自己的视频播放格式,如优酷的KUX.爱奇艺的QSV和腾讯的QLV等. 但是大家知道,优酷是有转码功能的,而就目前来说腾讯视频还没有转码功能,下面是将qlv格式的腾讯视频转换 ...

  8. 通过复制(拷贝)新建javaweb项目报错无法访问

    我们有时候为了方便,用eclipse在原来动态web项目上直接复制,粘贴项目,来形成以一个新的项目.可是运行的时候,它显示的url地址,还是原来的项目地址.初步判定,有可能是eclipse配置的问题. ...

  9. /proc文件夹介绍

    Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过 ...

  10. elk搭建实战

    1 安装elasticsearch 1.1安装elasticsearch 相关中文文档:https://es.xiaoleilu.com 下载:从https://www.elastic.co/down ...