算法小白的第一次尝试---PLA(感知机算法)实现

【机器学习】PLA (感知机算法 Perceptron Learning Algorithm) 1. PLA 基础理论 PLA是一个线性二分类算法。 1.1 Perceptron Hypothesis 我们也可以把偏置项作为一个恒为1的维度并入x向量,于是得到: h(x)=sign(wTx)h(x) = sign(w^Tx)h(x)=sign(wTx) 注意:这里的负样本是-1而不是0     2. PLA的算法实现过程 算法步骤: 选择w0=0w_0 = 0w0​=0 (选择初始值,一般选0) 选择一个分类错误的样本n,更新w, w1=w0+ynxnw_1 = w_0 阅读详情
import breeze.linalg.DenseVector
import org.apache.log4j.{Level, Logger}
import org.apache.spark.ml.feature.LabeledPoint
import org.apache.spark.ml.linalg.Vectors
import org.apache.spark.sql.SparkSession
import scala.collection.mutable.ArrayBuffer
/**
  * @author XiaoTangBao
  * @date 2019/3/6 10:13
  * @version 1.0
  * The original form of perceptron learning algorithm,For linearly separable data sets,
  * the original form of the perceptron algorithm converges. After a finite number of iterations,
  * a hyperplane can be found, and the data set is completely correctly divided.
  */
object PLA {
  def main(args: Array[String]): Unit = {
    //屏蔽部分日志
    Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
    val sparkSession = SparkSession.builder().master("local[4]").appName("PLA").getOrCreate()
    //获取数据源----https://pan.baidu.com/s/17dK9fdGHzGY1SfI-s1pt6w
    val data = sparkSession.sparkContext.textFile("G:\\mldata\\iris.txt")
    val pddata = data.map(str => str.split('|')).map(arr =>(arr(0).toDouble,arr(1).toDouble,arr(2).toDouble,arr(3).toDouble,arr(4))).collect()
    val Xi = ArrayBuffer[LabeledPoint]()
    for(dt<- pddata) {
      var label = -1
      if(dt._5.equals("Iris-setosa")) label = 1
      Xi.append(LabeledPoint(label,Vectors.dense(dt._1,dt._2,dt._3,dt._4)))
    }
    //待分类点为四维,定义初始的w,b,ata
    var w = DenseVector(3.0,0.8,1.8,2.4)
    var b = 20.0
    var ata = 0.2
    //基于SGD迭代求解最优w,b,ata
    var outflag = true
    while(outflag){
      for(i<-0 until  Xi.length){
        var inflag = true
        //针对当前分类错误点,不停的修改超平面,直至该点分类正确
        while(inflag){
          if(!judge(w,b,Xi(i))){
            println("当前纠正:X"+(i+1))
            w = ata * Xi(i).label * DenseVector(Xi(i).features.toArray) + w
            b = b + ata * Xi(i).label
          }else{
            inflag = false
          }
        }
      }
      //所有测点都完全分类正确,则退出
      var num = 0
      for(i<-0 until Xi.length){
        if(judge(w,b,Xi(i))) num +=1
      }
      if(num == Xi.length) outflag = false
    }
    println("训练结束")
    println(w)
    println(b)
  }
  //判断是否被正确分类
  def judge(w:DenseVector[Double],b:Double,xi:LabeledPoint):Boolean = {
    var flag = true
    //(w dot DenseVector(xi.features.toArray)) 必须添加优先级(),不然报错
    val fit = xi.label * ((w dot DenseVector(xi.features.toArray)) + b )
    if(fit <=0) flag = false
    flag
  }
}
--------------------------------------------------------------------
当前纠正:X51
当前纠正:X51
当前纠正:X51
当前纠正:X1
当前纠正:X52
当前纠正:X1
当前纠正:X58
当前纠正:X1
当前纠正:X58
当前纠正:X1
当前纠正:X58
当前纠正:X1
当前纠正:X99
当前纠正:X1
训练结束
DenseVector(-1.7200000000000006, -0.1399999999999999, -3.760000000000001, 0.40000000000000024)
19.400000000000002
感知机【图文,详细推导】 机器学习笔记,本文主要介绍感知机。感知机(PLA)是 1957 年,由 Rosenblatt 提出会,是神经网络和支持向量机的基础。感知机是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取值为+1和-1。 阅读详情

相关推荐

PLA与改进的POCKET_PLA的MATLAB实现

自己写的适用于线性可分的PLA分类算法和非线性的POCKET PLA算法,数据可以自己到UCI数据集里下载

机器学习:感知机算法(PLA)

感知机(Perceptron)是一种最简单的人工神经网络模型,由弗兰克·罗森布拉特(Frank Rosenblatt)在1958年提出。它是一种线性分类器,用于二分类任务,即把输入数据分为两个类别。

燕双嘤 5161

代码PLAmatlab实现

matlab实现PLA算法

可编程逻辑阵列PLA

随着电子技术的发展,人类社会已进入数字时代,数字系统广泛应用于计算机、数据处理、通信与测量等领域,在我们日常生活中起着越来越重要的作用。由于数字系统比模拟系统有更高的精确度和可靠性,以前用模拟系统完成的许多任务现在都采用数字系统完成。 数字电路是数字计算机和自动控制系统的基础,它的发展是以电子器件的发展为基础的。 电子器件的发展经历了电子管、晶体管、中小规模集成电路和大规模集成电路的发展历程。以计算机为例,20 世纪初,电子管的诞生引起了人们的极大兴趣,用电子管...

txgc_zhd的博客 7688

基于感知机的分词算法简介

我原来发过一个“python写的基于感知机的中文分词系统”的资源,那个是很完整的代码,包括训练数据等。但是代码没有任何注释,所以我又提交这个说明文档。但这个文档是用pageplayer做的(pageplayer压缩后有19M我发不上来),写的简略,但是还比较清楚,包括算法时间分析,改进等等。希望对大家有所帮助吧。

PLA算法实现

PLA算法的matlab实现,具有详细注释,根据台湾大学课件编写

PLA算法Java实现——机器学习基石

package Machine_learning.PLA;/** * Created by unclewang on 2017/3/22. */ public class Weight { public double w0; public double w1; public double w2; public Weight(){ } public W

王叔叔的小心情 1000

VS code平台调试AutoLISP程序教程

VS code平台调试AutoLISP程序教程

BearElder的博客 3186

用python实现PLA算法和POCKET_PLA算法并分析执行效果

1. PLA算法python实现 为便于在二维空间中进行画图分析,构建二维感知机模型,即w和x均为二维向量,根据学习算法的原始形式,可以得出PLA算法的代码如下: def PLA(): W = np.zeros(2) b = 0 count = 0 while True: count += 1 cease = True ...

CUE的博客 2672

从示波器波形看懂CAN/RS485/RS422:一个TVS管放错位置,通信全挂的教训

本文通过示波器波形分析,深入探讨了CAN/RS485/RS422通信系统中TVS管布局错误的故障诊断与解决方案。文章详细解析了错误布局导致的波形特征,如信号钳位、阻抗失配等,并提供了正确的保护电路设计方案和终端匹配技术,帮助工程师快速定位和解决通信故障。

weixin_30555515的博客 347

高速接口电平标准互连设计:LVPECL、PECL与LVDS的实战解析

本文深入解析了LVPECL、PECL与LVDS三种高速接口电平标准的互连设计实战。针对信号共模电压、阻抗匹配等核心差异,详细对比了直流耦合与交流耦合两种主流方案,并提供了电阻网络计算、布局布线要点及光模块等特殊场景下的选型建议,帮助工程师解决高速信号间的“翻译”难题,确保信号完整性。

weixin_29198045的博客 542

基于Python实现的感知机PLA人工智能实验

感知机针对二分类问题进行学习。输入为样本的特征向量x∈Rn\bold x\in R^nx∈Rn,输出为类别y∈{+1,−1}y\in\{+1,-1\}y∈{+1,−1}。感知机的预测结果为f(x)=sign(w⋅x+b)f(x)=sign(w\cdot x+b)f(x)=sign(w⋅x+b),其中signsignsign为符号函数,在自变量大于0时为1,自变量小于0时为-1。www为权值向量,和x的维度相同。b是偏置,为标量。线性方程w⋅x+bw\cdot x+bw⋅x+b对应着特征空间的一个分离超平面,

毕业作品网站 732

Rust 与 C/C++:Rust 比 C/C++ 更好还是只是“技能问题”?

对于许多嵌入式系统开发人员而言,的崛起似乎掀起了一股不小的浪潮,特别是在相较于传统的语言,Rust的“内存安全”优势让人眼前一亮。然而,是否可以将Rust作为C/C++的替代品?或者说,Rust是否真的比C/C++更好,抑或它只是一个“技能问题”呢?在嵌入式开发的领域,我观察到,尽管Rust在一些高性能、内存安全敏感的场景中受到了广泛推崇,但它在实际应用中的普及度,特别是在嵌入式领域,依然有限。今天,我会从多个角度探讨这个问题,并且分享一些对于Rust、C/C++以及嵌入式系统开发的个人见解。

qq_63315166的博客 1300

PLA感知机及其实现

基础知识: 1、感知机学习的模型 感知机是根据输入实例的特征向量x对其进行二分分类的线性分类模型: f(x) = sign(w.x + b) 感知机模型对应于输入空间中的超平面w.x + b = 0,也即感知机学习的目的就是:找到一个能够完美划分不同类别的实例点的超平面; 2、感知机学习的策略 感知机的学习策略就是极小化损失函数: 损失函数对应于误分类...

WJ20160110的博客 283

ROS TF坐标转换实战:从零搭建机器人坐标系(附常见问题排查)

本文提供了一份ROS TF坐标转换的实战指南,详细讲解了如何从零为机器人搭建完整的坐标系,并深入解析了TF的原理。内容涵盖静态与动态坐标变换的发布、URDF模型使用、以及Rviz和rqt_tf_tree等可视化调试工具。文章还附带了常见问题排查表,帮助开发者快速定位并解决TF树断裂、数据错位等典型问题。

weixin_29268385的博客 206

对冲策略与马丁结合ea的编程实践(五)核心是把两个品种合成一个新品种

在外汇、数字货币、期货交易甚至赌博中,马丁策略、网格策略是最常用的策略,也是最容易被理解的策略,但是如何克服单边行情、极端行情,是使用马丁策略最为头疼的事情,如加大间距、加大资金量,只能缓解,并不能根本解决这样的情况,所以使用时大部分时候都心里没底。 有没有一种正确的思路,让行情控制在震荡范围以内呢,这是今天我要向大家分享的一个思路,那就是对冲。大家看下图: 大家可以看到欧美(EURUSD)和镑美(GBPUSD),这两个品种,大部分时候走势是一致的,那么我们有没有可能把他们两个品种进行一下合成,比如买0.

omidsky的博客 3742

机器学习基础篇(十二)——多层感知机

机器学习基础篇(十二)——多层感知机 一、概述 多层感知机(MLP:Multi-Layer Perceptron)由感知机(PLA: Perceptron Learning Algorithm)推广而来。它最主要的特点是有多个神经元层,因此也叫深度神经网络(DNN: Deep Neural Networks)。 感知机是单个神经元模型,是较大神经网络的前身。神经网络的强大之处在于它们能够学习训练数据中的表示,以及如何将其与想要预测的输出变量联系起来。从数学上讲,它们能够学习任何映射函数,并且已经被证明是一种

羊羊的博客 2万+

使用W5500与外网通信故障解决(MAC地址问题)

在蒲城项目的调试时,AMS500发现一个致命的问题,就是:在局域网跨网段通信时候和中心服务器不能通信,但是在一个HUB下是没有问题的,以前的串口服务器有过类似的问题出现,解决方法说是芯片的问题,结果也不了了之,换了芯片正常。 我们的网络通信芯片选择W5500,其中的MAC地址采用的是CPU的序列号作为Mac地址的问题就出在这,我们在使用的时候MAC地址的第一个必须是偶数,我们忽视了。 现象描...

zxm8513优快云博客 7757

《机器学习基石》---感知机算法

1 推导感知机模型 基本思想是,把特征的线性加权值作为一个分数,根据这个分数与一个门限值的关系来进行分类: 我们加一个特征x0等于1,门限值就可以放到w里面去,得到更简单的形式: 这就是感知机模型,对应一个分离超平面。 2 如何来学习感知机 “知错能改”原则:找到一个误分类点,就尝试去修正它。具体的修正过程如下: 当找到一个误分类点时,如果y本来是+1,则说明现在的w与x...

weixin_30577801的博客 144

国社科“选题设计论证”部分不再难!用AI快速梳理五大核心板块,轻松撰写出高质量的基金申报书(附AI提示词)

七哥给大家推荐的高校都在用的AI平台——高级学术版专业应用平台,集成了ChatGPT、Claude、Gemini、Grok等Al大模型的PLUS版本平台,包括 ChatGPT-5、4o、o3、4.1、4.5、Gemini 2.5 Pro、Claude 3.7、Claude 4、DeepSeek 满血版、Grok 3 、Grok 4等原生线路,还有国际主流的GPTs学术应用,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。

智能AI让学术科研更容易 934

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【MLP多层感知机】

MLP(多层感知机,Multilayer Perceptron)是一种前馈人工神经网络(Feedforward Artificial Neural Network),是深度学习中的基础模型之一,主要用于分类和回归任务。

zzzyyy8的博客 903

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Neural Network

#1.PLA 重新回顾一下一开始学的PLA,preceptron learning Algorithm。PLA适用于二维及高维的线性可分的情况,如果是非线性可分的数据,如果使用PLA可能会无限循环。问题的答案只有同意或不同意: PLA要做的其实就找到一个x映射到y的f,使得这个f和数据的分布一致,判断结果一致。 如果是遇到了线性不可分的情况,就不能再要求完全正确了,所以在optimization...

weixin_34304013的博客 129

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: Spark Breez矩阵计算
下一篇: 算法小白的第一次尝试---SVM实现
小糖宝
博客等级 码龄9年 47粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值