1.PLA算法的原理

感知机模型是机器学习二分类问题中的一种非常简单的模型,基本原理就是逐点修正,首先在超平面上随意取一条分类面,统计分类错误的点;然后随机对某个错误点进行修正,即变换直线的位置,使该错误点得以修正;接着再随机选择一个错误点进行纠正,分类面不断变化,直到所有的点完全分类正确,就得到了最佳的分类面。

2.感知机模型的基本结构


3.PLA算法的流程及代码

导入数据——数据分类和可视化——特征归一化——直线初始化——计算scores,更新权重——迭代更新训练(直到所有的样本都分类正确,前提是样本完全线性可分)

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inlinedata = pd.read_csv('./data1.csv', header=None)
# 样本输入,维度(100,2)
X = data.iloc[:,:2].values
# 样本输出,维度(100,)
y = data.iloc[:,2].valuesplt.scatter(X[:50, 0], X[:50, 1], color='blue', marker='o', label='Positive')
plt.scatter(X[50:, 0], X[50:, 1], color='red', marker='x', label='Negative')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend(loc = 'upper left')
plt.title('Original Data')
plt.show()

# 均值
u = np.mean(X, axis=0)
# 方差
v = np.std(X, axis=0)
X = (X - u) / v
# 作图
plt.scatter(X[:50, 0], X[:50, 1], color='blue', marker='o', label='Positive')
plt.scatter(X[50:, 0], X[50:, 1], color='red', marker='x', label='Negative')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend(loc = 'upper left')
plt.title('Normalization data')
plt.show()

# X加上偏置项
X = np.hstack((np.ones((X.shape[0],1)), X))
# 权重初始化
w = np.random.randn(3,1)# 直线第一个坐标(x1,y1)
x1 = -2
y1 = -1 / w[2] * (w[0] * 1 + w[1] * x1)
# 直线第二个坐标(x2,y2)
x2 = 2
y2 = -1 / w[2] * (w[0] * 1 + w[1] * x2)
# 作图
plt.scatter(X[:50, 1], X[:50, 2], color='blue', marker='o', label='Positive')
plt.scatter(X[50:, 1], X[50:, 2], color='red', marker='x', label='Negative')
plt.plot([x1,x2], [y1,y2],'r')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend(loc = 'upper left')
plt.show()

s = np.dot(X, w)
y_pred = np.ones_like(y)    # 预测输出初始化
loc_n = np.where(s < 0)[0]    # 大于零索引下标
y_pred[loc_n] = -1# 第一个分类错误的点
t = np.where(y != y_pred)[0][0]
# 更新权重w
w += y[t] * X[t, :].reshape((3,1))for i in range(100):s = np.dot(X, w)y_pred = np.ones_like(y)loc_n = np.where(s < 0)[0]y_pred[loc_n] = -1num_fault = len(np.where(y != y_pred)[0])print('第%2d次更新,分类错误的点个数:%2d' % (i, num_fault))if num_fault == 0:breakelse:t = np.where(y != y_pred)[0][0]w += y[t] * X[t, :].reshape((3,1))
# 直线第一个坐标(x1,y1)
x1 = -2
y1 = -1 / w[2] * (w[0] * 1 + w[1] * x1)
# 直线第二个坐标(x2,y2)
x2 = 2
y2 = -1 / w[2] * (w[0] * 1 + w[1] * x2)
# 作图
plt.scatter(X[:50, 1], X[:50, 2], color='blue', marker='o', label='Positive')
plt.scatter(X[50:, 1], X[50:, 2], color='red', marker='x', label='Negative')
plt.plot([x1,x2], [y1,y2],'r')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend(loc = 'upper left')
plt.show()

4.Pocket PLA与Naive PLA的区别

下面给出两种简单的实现方法,一种是Naive PLA,另一种为Pocket PLA。Naive PLA主要是针对数据是完全线性可分的,没有任何噪音干扰,它只要找到一个符合条件的解就会结束循环。

正负样本线性不可分,无法使用PLA算法进行分类,这时候需要对PLA进行优化。优化后的PCA的基本做法很简单,就是如果迭代更新后分类错误样本比前一次少,则更新权重系数 w ;没有减少则保持当前权重系数 w 不变。也就是说,可以把条件放松,即不苛求每个点都分类正确,而是容忍有错误点,取错误点的个数最少时的权重系数 w 。通常在有限的迭代次数里,都能保证得到最佳的分类线。

这种算法也被称为「口袋PLA」Pocket PLA。怎么理解呢?就好像我们在搜寻最佳分类直线的时候,随机选择错误点修正,修正后的直线放在口袋里,暂时作为最佳分类线。然后如果还有错误点,继续随机选择某个错误点修正,修正后的直线与口袋里的分类线比较,把分类错误点较少的分类线放入口袋。一直到迭代次数结束,这时候放在口袋里的一定是最佳分类线,虽然可能还有错误点存在,但已经是最少的了。

Navie PLA缺点:
1.很明显Navie PLA要求训练集必须是完全线性可分的,否则,它将无限循环下去。
2.我们并不知道它什么时候能够找到一个合适的解,对于大规模数据来说,开销将会很大。
另一种Pocket PLA是对于数据基本线性可分,不过数据中存在着少许噪声干扰,它是基于贪心策略的,目标是找到一个解使得分类错误的点尽可能少。
Pocket PLA缺点:
1.如果数据一开始就是完全线性可分的,那么用这个算法所找出的解未必是最好的,并且时间花费也可能比较大。
2.由于data是随机选取的,迭代的次数也是人定的,很可能迭代完后所找到的解并不是最好的。

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

  1. PLA算法实现与展示

    1.PLA算法 作为机器学习的入门基础算法,主要是要理解其产生由来.感知机模型为了应对线性可分二分类问题而设计的算法,求得一个超平面S使得所有数据能正确分类. 即使得每个数据都 f ( x ) = s ...

  2. PLA算法(机器学习基石)

    PLA算法的机制 故事起源于一个二元分类问题(比如说银行要不要给客户发信用卡的问题) 我们的先决条件 1.我们有资料在手上(用户信息) 2.我们的资料有标签(有没有发信用卡) 3.假设我们的资料是线性 ...

  3. pla算法 matlab,PAL算法原理及代码实现

    博主发现之前写的博客都是偏程序方面,而较少涉及数学或算法方面的东西,其实无论什么软件工具,最终都是为了更好地给理论铺路搭桥,所以我觉得不应该就某个程序贴个博客,而是在实际算法研究中,将理论描述清晰,再 ...

  4. [机器学习][1]--PLA算法

    [机器学习][1]--PLA算法     PLA全称为,Perception Learning Algorithm,中文叫感知学习算法.今天我会简单介绍一下这个算法,并用mathematica来实现一 ...

  5. 机器学习算法——感知机支持向量机

    1前言 本篇博客主要详细介绍两种具有一定相似性的机器学习算法--感知机Perceptron和支持向量机SVM,该两种算法都是在特征空间中寻找划分平面从而对数据集进行划分的思想,但寻找划分平面的算法不同 ...

  6. 经典分类算法——感知机算法

    文章目录 经典分类算法--感知机算法 1 感知机算法思想:错误修正 2 感知机算法(原始形式):形式化表示 3 感知机算法(对偶形式):形式化表示 4 感知机算法:随机梯度下降(SGD) 5 感知机算 ...

  7. 感知机PLA算法实现[转载]

    转自:https://blog.csdn.net/u010626937/article/details/72896144#commentBox 1.实现原始形式 import numpy as np ...

  8. 调用sklearn包中的PLA算法[转载]

    转自:https://blog.csdn.net/u010626937/article/details/72896144#commentBox 1.Python的机器学习包sklearn中也包含了感知 ...

  9. 通俗解释优化的线性感知机算法:Pocket PLA

    个人网站:红色石头的机器学习之路 CSDN博客:红色石头的专栏 知乎:红色石头 微博:RedstoneWill的微博 GitHub:RedstoneWill的GitHub 微信公众号:AI有道(ID: ...

  10. 一看就懂的感知机算法PLA

    个人网站:红色石头的机器学习之路 CSDN博客:红色石头的专栏 知乎:红色石头 微博:RedstoneWill的微博 GitHub:RedstoneWill的GitHub 微信公众号:AI有道(ID: ...

最新文章

  1. python代码怎么写出色_如何写出更具有Python风格的代码,五分钟教会你!
  2. POJ 1486 Sorting Slides
  3. SpringBoot 使用WebMvcConfigurer处理请求
  4. 为什么学Python
  5. docker ps命令详解 列出运行中的容器
  6. db2存储结构换Oracle,DB2中实现Oracle的功能
  7. 新知|你知道生气有多可怕吗?“气死人”是有科学依据的
  8. scrapy框架的日志等级和请求传参
  9. 员工激励手段1+1组合出击
  10. 计算文档中不同单词出现的次数
  11. 代码管理学:对于重写,四种人的不同态度
  12. 源码 源代码下载 - www.pudn.com 程序员联合开发网
  13. 友盟,听云统计到的crash如何定位
  14. java解惑-------半斤
  15. 一篇读懂深度学习中「训练」和「推断」的区别
  16. SylixOS这个操作系统怎么样?
  17. 金龄会为中老年群体搭建展现风采的舞台
  18. 苹果16g不够用怎么办_孩子不够自信怎么办?父母学会用这4个方法,孩子长大更优秀自信...
  19. pyecharts饼图pie制作
  20. matlab进行fm调制与解调,基于matlab的fm信号调制与解调.doc

热门文章

  1. 【转】 Android Performance Case Study(安卓绘图性能案例研究)
  2. 【codeforces】Codeforces Round #277 (Div. 2) 解读
  3. 加速你的vs.net开发环境
  4. Oracle:view 添加主键
  5. ASP.NET加密解密
  6. html中用js调用ASP文件 实现静态页面动态显示
  7. 线上不修改mysql的存储引擎对emoji标签做删除处理(PHP)
  8. chromium中的性能优化工具syzyProf
  9. vue父子组件的传值
  10. python的条件判断