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与改进的POCKET_PLA的MATLAB实现
自己写的适用于线性可分的PLA分类算法和非线性的POCKET PLA算法,数据可以自己到UCI数据集里下载
机器学习:感知机算法(PLA)
感知机(Perceptron)是一种最简单的人工神经网络模型,由弗兰克·罗森布拉特(Frank Rosenblatt)在1958年提出。它是一种线性分类器,用于二分类任务,即把输入数据分为两个类别。
代码PLAmatlab实现
matlab实现PLA算法
可编程逻辑阵列PLA
随着电子技术的发展,人类社会已进入数字时代,数字系统广泛应用于计算机、数据处理、通信与测量等领域,在我们日常生活中起着越来越重要的作用。由于数字系统比模拟系统有更高的精确度和可靠性,以前用模拟系统完成的许多任务现在都采用数字系统完成。 数字电路是数字计算机和自动控制系统的基础,它的发展是以电子器件的发展为基础的。 电子器件的发展经历了电子管、晶体管、中小规模集成电路和大规模集成电路的发展历程。以计算机为例,20 世纪初,电子管的诞生引起了人们的极大兴趣,用电子管...
基于感知机的分词算法简介
我原来发过一个“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
VS code平台调试AutoLISP程序教程
VS code平台调试AutoLISP程序教程
用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 ...
从示波器波形看懂CAN/RS485/RS422:一个TVS管放错位置,通信全挂的教训
本文通过示波器波形分析,深入探讨了CAN/RS485/RS422通信系统中TVS管布局错误的故障诊断与解决方案。文章详细解析了错误布局导致的波形特征,如信号钳位、阻抗失配等,并提供了正确的保护电路设计方案和终端匹配技术,帮助工程师快速定位和解决通信故障。
高速接口电平标准互连设计:LVPECL、PECL与LVDS的实战解析
本文深入解析了LVPECL、PECL与LVDS三种高速接口电平标准的互连设计实战。针对信号共模电压、阻抗匹配等核心差异,详细对比了直流耦合与交流耦合两种主流方案,并提供了电阻网络计算、布局布线要点及光模块等特殊场景下的选型建议,帮助工程师解决高速信号间的“翻译”难题,确保信号完整性。
基于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对应着特征空间的一个分离超平面,
Rust 与 C/C++:Rust 比 C/C++ 更好还是只是“技能问题”?
对于许多嵌入式系统开发人员而言,的崛起似乎掀起了一股不小的浪潮,特别是在相较于传统的语言,Rust的“内存安全”优势让人眼前一亮。然而,是否可以将Rust作为C/C++的替代品?或者说,Rust是否真的比C/C++更好,抑或它只是一个“技能问题”呢?在嵌入式开发的领域,我观察到,尽管Rust在一些高性能、内存安全敏感的场景中受到了广泛推崇,但它在实际应用中的普及度,特别是在嵌入式领域,依然有限。今天,我会从多个角度探讨这个问题,并且分享一些对于Rust、C/C++以及嵌入式系统开发的个人见解。
PLA感知机及其实现
基础知识: 1、感知机学习的模型 感知机是根据输入实例的特征向量x对其进行二分分类的线性分类模型: f(x) = sign(w.x + b) 感知机模型对应于输入空间中的超平面w.x + b = 0,也即感知机学习的目的就是:找到一个能够完美划分不同类别的实例点的超平面; 2、感知机学习的策略 感知机的学习策略就是极小化损失函数: 损失函数对应于误分类...
ROS TF坐标转换实战:从零搭建机器人坐标系(附常见问题排查)
本文提供了一份ROS TF坐标转换的实战指南,详细讲解了如何从零为机器人搭建完整的坐标系,并深入解析了TF的原理。内容涵盖静态与动态坐标变换的发布、URDF模型使用、以及Rviz和rqt_tf_tree等可视化调试工具。文章还附带了常见问题排查表,帮助开发者快速定位并解决TF树断裂、数据错位等典型问题。
对冲策略与马丁结合ea的编程实践(五)核心是把两个品种合成一个新品种
在外汇、数字货币、期货交易甚至赌博中,马丁策略、网格策略是最常用的策略,也是最容易被理解的策略,但是如何克服单边行情、极端行情,是使用马丁策略最为头疼的事情,如加大间距、加大资金量,只能缓解,并不能根本解决这样的情况,所以使用时大部分时候都心里没底。 有没有一种正确的思路,让行情控制在震荡范围以内呢,这是今天我要向大家分享的一个思路,那就是对冲。大家看下图: 大家可以看到欧美(EURUSD)和镑美(GBPUSD),这两个品种,大部分时候走势是一致的,那么我们有没有可能把他们两个品种进行一下合成,比如买0.
机器学习基础篇(十二)——多层感知机
机器学习基础篇(十二)——多层感知机 一、概述 多层感知机(MLP:Multi-Layer Perceptron)由感知机(PLA: Perceptron Learning Algorithm)推广而来。它最主要的特点是有多个神经元层,因此也叫深度神经网络(DNN: Deep Neural Networks)。 感知机是单个神经元模型,是较大神经网络的前身。神经网络的强大之处在于它们能够学习训练数据中的表示,以及如何将其与想要预测的输出变量联系起来。从数学上讲,它们能够学习任何映射函数,并且已经被证明是一种
使用W5500与外网通信故障解决(MAC地址问题)
在蒲城项目的调试时,AMS500发现一个致命的问题,就是:在局域网跨网段通信时候和中心服务器不能通信,但是在一个HUB下是没有问题的,以前的串口服务器有过类似的问题出现,解决方法说是芯片的问题,结果也不了了之,换了芯片正常。 我们的网络通信芯片选择W5500,其中的MAC地址采用的是CPU的序列号作为Mac地址的问题就出在这,我们在使用的时候MAC地址的第一个必须是偶数,我们忽视了。 现象描...
《机器学习基石》---感知机算法
1 推导感知机模型 基本思想是,把特征的线性加权值作为一个分数,根据这个分数与一个门限值的关系来进行分类: 我们加一个特征x0等于1,门限值就可以放到w里面去,得到更简单的形式: 这就是感知机模型,对应一个分离超平面。 2 如何来学习感知机 “知错能改”原则:找到一个误分类点,就尝试去修正它。具体的修正过程如下: 当找到一个误分类点时,如果y本来是+1,则说明现在的w与x...
国社科“选题设计论证”部分不再难!用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学术应用,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
【MLP多层感知机】
MLP(多层感知机,Multilayer Perceptron)是一种前馈人工神经网络(Feedforward Artificial Neural Network),是深度学习中的基础模型之一,主要用于分类和回归任务。
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
Neural Network
#1.PLA 重新回顾一下一开始学的PLA,preceptron learning Algorithm。PLA适用于二维及高维的线性可分的情况,如果是非线性可分的数据,如果使用PLA可能会无限循环。问题的答案只有同意或不同意: PLA要做的其实就找到一个x映射到y的f,使得这个f和数据的分布一致,判断结果一致。 如果是遇到了线性不可分的情况,就不能再要求完全正确了,所以在optimization...
ssm框架搭建
这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载
文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况
主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。
5161



被折叠的 条评论
为什么被折叠?



