PLA全称是Perceptron Linear Algorithm,简称PLA

原理

《统计学习基础》 李航

感知器是二分类的现行分类模型,其输入为实力的特征向量,输出为实例的类别,取+1和-1.属于判别模型.旨在求出将训练数据进行线性化分的分离超平面.

因此,主要思想是导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,最后求出感知器判别面.

感知器算法可以分为原始形式和对偶形式,是神经网络和支持向量机的基础.

感知器模型

这部分以后再补,(公式难敲)

推导

这部分以后再补,(公式难敲)

  • 几何理解

对偶问题

这部分以后再补,(公式难敲)

算法程序

先练练手,这一部分是对简单数据的分类

import numpy as np
import matplotlib.pyplot as pltdef PLA(train_x, train_y):m, n = train_x.shapetrain_x = np.column_stack((train_x, np.ones((m, 1))))  weights = np.ones(n+1)i = 0while i < m:x = np.array(train_x[i]).reshape((n+1, 1))      y = weights.dot(x)if y * train_y[i] <= 0:weights = weights + train_y[i] * x.reshape((1, n+1))i = 0continuei += 1return weights#产生数据
x0 = np.arange(1, 50, 1)
y0 = x0 * 2 + 3 + 2*np.random.randint(1, 10, x0.size)
train_x0 = np.c_[x0, y0]
train_x0 = np.c_[train_x0, np.ones((train_x0.shape[0], 1))]
x1 = np.arange(1, 50, 1)
y1 = x1 * 2 + 50 + 2*np.random.randint(1, 10, x1.size)
train_x1 = np.c_[x1, y1]
train_x1 = np.c_[train_x1, -1 * np.ones((train_x1.shape[0], 1))]
train = np.r_[train_x0, train_x1]
train_x = train[:, 0:2]
train_y = train[:,-1]weights = PLA(train_x, train_y)#可视化
weights = weights.squeeze()
plt.scatter(train_x[:, 0], train_x[:, 1])
xx = np.arange(1, 50, 0.5)
yy = (-xx * weights[0] - weights[-1]) / weights[1]
plt.plot(xx, yy)

作业

对wine数据集的前两类进行分类训练

import numpy as np
import matplotlib.pyplot as plt#加载数据
def loadData(filename):dataSet = []with open(filename) as f:for fr in f.readlines():indata = fr.strip().split(',')dataSet.append([float(x) for x in indata])dataSet = np.array(dataSet)train_x = dataSet[::, 1::]train_y = dataSet[::, 0]train_y = train_y.reshape(train_y.size)return train_x, train_y#归一化
def dataNormalized(dataSet):dataSetMin = dataSet.min(axis = 0)print(dataSetMin.shape)dataSetMax = dataSet.max(axis = 0)dataSet = (dataSet - dataSetMin) / (dataSetMax - dataSetMin)return dataSet# 训练模型
def PLA_train(train_x, train_y):m, n = train_x.shape#扩展一列train_x = np.column_stack((train_x, np.ones((m, 1))))  weights = np.ones(n+1)i = 0while i < m:x = np.array(train_x[i]).reshape((n+1, 1))      y = weights.dot(x)if y * train_y[i] <= 0.0000001:weights = weights + train_y[i] * x.reshape((1, n+1))i = 0continuei += 1return weightsdef sign(train_x):return np.array([1 if x > 0 else -1 for x in train_x])#预测
def PLA_pred(weight, test_x):m, n = test_x.shapetest_x = np.column_stack((test_x, np.ones((m, 1))))test_y = sign(weight.dot(np.transpose(test_x)).squeeze())return test_ytrainWine_x, trainWine_y = loadData('wine.data.txt')
#取出前两类的数据,转化为+1和-1
trainWine_x = dataNormalized(trainWine_x)
trainWine_x = trainWine_x[np.union1d(np.where(trainWine_y == 1), np.where(trainWine_y == 2))]
trainWine_y = trainWine_y[np.union1d(np.where(trainWine_y == 1), np.where(trainWine_y == 2))]
trainWine_y = np.array([-1 if x == 2 else 1 for x in trainWine_y]).squeeze()#留出验证集test
randomIndex = np.random.choice(np.arange(trainWine_x.shape[0]), size = 30, replace=False)
testWine_x = trainWine_x[randomIndex]
testWine_y = trainWine_y[randomIndex]
#训练集减去验证集
trainIndex = np.setdiff1d(np.arange(trainWine_x.shape[0]), randomIndex)
trainWine_x = trainWine_x[trainIndex]
trainWine_y = trainWine_y[trainIndex]weightsWine = PLA_train(trainWine_x, trainWine_y)
pred_y = PLA_pred(weightsWine, testWine_x)
#计算准确率
print((pred_y == testWine_y).sum() / pred_y.size)

输出的准确率

0.9666666666666667

感知器算法(PLA)相关推荐

  1. 【基础机器学习算法原理与实现】使用感知器算法LDA、最小二乘法LSM、Fisher线性判别分析与KNN算法实现鸢尾花数据集的二分类问题

    本文设计并实现了PerceptronLA.PseudoIA.LeastSM.LinearDA.KNN等五个算法类,以及DataProcessor的数据处理类.对感知器算法LDA.最小二乘法LSM的伪逆 ...

  2. 感知器算法原理详解及python实现

    感知器算法PLA 感知器算法是对一种分类学习机模型的称呼,属于有关机器学习的仿生学领域中的问题,由于无法实现非线性分类而下马.但"赏罚概念(reward-punishment concept ...

  3. 模式识别系列(一)感知器算法(PLA)

    目录 写在前头 1.感知器算法简介 2.Perceptron Learning Algorithm(PLA) 2.1权重向量和特征向量到分类面的距离 2.2PLA的原理和流程 2.3PLA的收敛性证明 ...

  4. 神经网络感知器算法调整原理是什么

    算法调整原理 如果点分类正确,则什么也不做. 如果点分类为正,但是标签为负,则分别减去 αp,αq, 和 α 至 w_1, w_2,w1​,w2​, 和 bb 如果点分类为负,但是标签为正,则分别将α ...

  5. Perceptron Algorithm 感知器算法及其实现

    Rosenblatt于1958年发布的感知器算法,算是机器学习鼻祖级别的算法.其算法着眼于最简单的情况,即使用单个神经元.单层网络进行监督学习(目标结果已知),并且输入数据线性可分.我们可以用该算法来 ...

  6. 局部加权回归、逻辑斯蒂回归、感知器算法—斯坦福ML公开课笔记3

    转载请注明:http://blog.csdn.net/xinzhangyanxiang/article/details/9113681 最近在看Ng的机器学习公开课,Ng的讲法循循善诱,感觉提高了不少 ...

  7. 机器学习——人工神经网络之发展历史(神经元数学模型、感知器算法)

    目录 一.神经元的数学模型 ​ 二.感知器算法(SVM算法前身) 1.目的 2.流程 >>>问题1:下图w和b的调整是什么意思? 3.算法的有效性验证 1)原算法 2)增广矩阵 3) ...

  8. c语言实现感知器算法,感知器算法(c语言版).doc

    感知器算法(c语言版).doc includestdio.hincludetime.hdefine C 1void mainint i,j,k,N1,N2,x202,s3,d20,array204,w ...

  9. 线性判别函数(Python实现批感知器算法、Ho Kashyap算法和MSE多类扩展方法)——模式识别编程作业

    文章目录 写在前面 批感知器算法 Ho Kashyap算法 MSE多类扩展方法 Ref. 写在前面 本博客为模式识别作业的记录,实现批感知器算法.Ho Kashyap算法和MSE多类扩展方法,可参考教 ...

最新文章

  1. 聊聊jump consistent hash
  2. 一步一步学Silverlight 2系列(5):实现简单的拖放功能
  3. 【Bootstrap4前端框架+MySQL数据库】前后端综合实训【10天课程 博客汇总表 详细笔记】【附:所有代码】
  4. 指令集物联网操作系统 iSysCore OS 2021年将推出 3.0 版本!
  5. 如何对第三方数据进行大数据分析
  6. 电商数据抓取是什么意思?有什么作用?
  7. python中len用法_python中字典len()的用法
  8. Python超级码力在线编程大赛初赛题解
  9. 水经注地图下载器为什么叫万能下载器
  10. Visual studio C++:LQR轨迹跟踪仿真
  11. 【学习笔记】单总线协议的典型代表:DS18B20
  12. 自制的Arduino多级菜单类
  13. GBASE应用 | “天擎”出鞘 GBase 8a助力气象行业进入大数据时代
  14. 这些各行各业优秀的ppt模板推荐给大家
  15. 在苹果Mac电脑中如何将键盘当作鼠标使用?
  16. MCE公司:M525-针对混合谱系白血病(MLL)的新型抑制剂
  17. 短信验证码有什么应用和作用
  18. flash_back介绍
  19. UltraScale Architecture Clocking Resources
  20. app自动化测试appium教程之番外1——进阶补充内容

热门文章

  1. java在天猫获取图片_怎么获取天猫商品主图图片?
  2. ico图标下载 ico大全_ICO扰乱了您创办和运营公司的方式
  3. 大时代势不可挡_使IT项目经理势不可挡的12种软技能
  4. windows 总是弹出 windows installer 安装,关不了的解决方法
  5. 常用的电路保护元件有哪些?
  6. 【Linux 内核】编译 Linux 内核 ⑦ ( 安装内核模块 | 安装内核 | 重启系统 | 查看当前内核版本 )
  7. Python查询12306车票和使用selenium进行买票
  8. C++Primer——第8章(IO库)
  9. 石头扫地机器人卡顿_80后手残党动手修理石头扫地机器人激光头卡死故障
  10. 雷军回顾20年前自己的“程序人生”,还用吴奇隆的歌词文艺了一把