机器学习入门-用Java实现简单感知机

article/2025/9/22 18:41:46

一、通俗理解机器学习

1、机器学习是人工智能的一种,如图所示,它是人工智能的一个子方向。

2、机器学习有点像人类的学习过程。

1. 人类学习通过经验(事件),归纳出规律。
2. 机器学习通过数据,训练出模型。

3、机器学习不是基于编程形成的直接结果,不是代码直接写出一个模型 y = -0.3x + 6,而是通过归纳得出来的模型,例如,通过初始化 y = ax + b 中的 a、b,不断迭代,获得针对样本数据最优的 a、b 值,即得到对应的、归纳出来的最优的模型。

4、机器学习中,会用一些真实的数据对算法构建的模型进行评估,评估模型的性能,如果这个模型能达到要求,就用来测试其他的数据,如果达不到要求就要调整算法来重新建立模型,再次进行评估,如此循环往复,最终获得满意的模型来处理其他的数据。

二、简单理解感知机

感知机(perceptron)是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机对应于输入空间中将实例划分为两类的分离超平面。感知机旨在求出该超平面,为求得超平面导入了基于误分类的损失函数,利用梯度下降法 对损失函数进行最优化(最优化)。感知机的学习算法具有简单而易于实现的优点,分为原始形式和对偶形式。感知机预测是用学习得到的感知机模型对新的实例进行预测的,因此属于判别模型。感知机由Rosenblatt于1957年提出的,是神经网络和支持向量机的基础。

  拿二维平面举例,

看这张图,很明显,直线没有将红蓝点完全分开在两个区域,我们可以将其称为错误的直线,感知机要做的,就是根据各点坐标,将错误的直线纠正为正确的,这样得到的直线就是训练的结果。

说了这么多,要怎么实现呢?  看下面的流程图

三、用Java实现感知机

1、关于w与b的修改

我们会定义一个变量η(0≤η≤1)作为步长,在统计学是中成为学习速率。步长越大,梯度下降的速度越快,更能接近极小点。如果步长过大,有可能导致跨过极小点,导致函数发散;如果步长过小,有可能会耗很长时间才能达到极小点。默认为1

对于wi   wi+=η*y*xi

对于b      b+=η*y

2、代码实现

package machineLearning;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;public class test1 {public static int eta = 1;//步长,默认为1public static double w[] = {1.0,2.0,3.0,4.0};public static int b = 7;public static List<Point> arrayList;public static void main(String[] args) {Point p1 = new Point(new double[]{0, 0, 0, 1}, -1);Point p2 = new Point(new double[]{1, 0, 0, 0}, 1);Point p3 = new Point(new double[]{2, 1, 0, 0}, 1);Point p4 = new Point(new double[]{2, 1, 0, 1}, -1);arrayList = new ArrayList<>();arrayList.add(p1);arrayList.add(p2);arrayList.add(p3);arrayList.add(p4);boolean classify = classify();}/** 判断所有点的位置关系,进行分类*/public static boolean classify() {boolean flag = false;while (!flag) {for (int i = 0; i < arrayList.size(); i++) {if (Anwser(arrayList.get(i)) <= 0) {Update(arrayList.get(i));break;}if (i + 1 == arrayList.size()) {flag = true;}}}return true;}/** 点乘返回sum*/private static double Dot(double[] w, double[] x) {double sum = 0;for (int i = 0; i < x.length; i++) {sum += w[i] * x[i];}return sum;}/** 返回函数计算的值*/private static double Anwser(Point point) {System.out.println("w:"+Arrays.toString(w));System.out.println("b:"+b);return point.y * (Dot(w, point.x) + b);}public static void Update(Point point) {for (int i = 0; i < w.length; i++) {w[i] += eta * point.y * point.x[i];}b += eta * point.y;return;}}
class Point{double x[];int y;public Point(double[] x, int y) {this.x = x;this.y = y;}
}

3、测试结果

w:[1.0, 2.0, 3.0, 4.0]
b:7
w:[1.0, 2.0, 3.0, 3.0]
b:6
w:[1.0, 2.0, 3.0, 2.0]
b:5
w:[1.0, 2.0, 3.0, 1.0]
b:4
w:[1.0, 2.0, 3.0, 0.0]
b:3
w:[1.0, 2.0, 3.0, -1.0]
b:2
w:[1.0, 2.0, 3.0, -2.0]
b:1
w:[1.0, 2.0, 3.0, -2.0]
b:1
w:[1.0, 2.0, 3.0, -2.0]
b:1
w:[1.0, 2.0, 3.0, -2.0]
b:1
w:[-1.0, 1.0, 3.0, -3.0]
b:0
w:[-1.0, 1.0, 3.0, -3.0]
b:0
w:[0.0, 1.0, 3.0, -3.0]
b:1
w:[0.0, 1.0, 3.0, -3.0]
b:1
w:[0.0, 1.0, 3.0, -3.0]
b:1
w:[0.0, 1.0, 3.0, -3.0]
b:1

四、一些感想

用Java实现这个感知机后,发现机器学习并没有想象中那么难,目前理解还是比较浅显,后续还需继续学习机器学习相关内容。


http://chatgpt.dhexx.cn/article/CvA39IHr.shtml

相关文章

机器学习算法 java_Java开发人员的机器学习,第1部分:机器学习算法

机器学习算法 java 无人驾驶汽车&#xff0c;面部检测软件和语音控制扬声器均基于机器学习技术和框架构建&#xff0c;而这些仅仅是第一波。 在接下来的十年中&#xff0c;新一代产品将改变我们的世界&#xff0c;为软件开发以及我们创建和使用的应用程序和产品启动新的方法。 …

【Java应用】使用Java实现机器学习算法:聚类、分类、预测

一、引言 1、机器学习算法概述 机器学习是一种人工智能技术&#xff0c;旨在通过使用数据和统计分析来让计算机系统自动改进性能。机器学习算法可分为三大类&#xff1a;聚类、分类和预测。聚类算法用于将数据集分成不同的群组&#xff1b;分类算法用于将数据分为不同的类别&…

KL15和KL30

一、KL15节点方式 这是最直接和简单的方法&#xff0c;将所有CAN总线上的ECU电源都接在KL15上面。(KL15是当点火开关在ON上才接通蓄电池电源&#xff09; 缺点&#xff0c;无法适应所有的ECU&#xff1a; 1.可以断电关闭&#xff0c;比如座椅控制。 2.有些ECU在汽车到OFF档时…

KL15和KL30节点网络管理概念

一、KL15节点方式 这是最直接和简单的方法&#xff0c;将所有CAN总线上的ECU电源都接在KL15上面。(KL15是当点火开关在ON上才接通蓄电池电源&#xff09; 缺点&#xff0c;无法适应所有的ECU&#xff1a; 1.可以断电关闭&#xff0c;比如座椅控制。 2.有些ECU在汽车到OFF档时…

KL15 是什么?ACC,crank,on等

KL含义 KL is the abbreviation for klemme which is the German term for connector / connection.KL是“ klemme”的缩写&#xff0c;这是德语中连接器或连接的术语。 KL30 &#xff0c;通常表示电瓶的正极。positive KL31&#xff0c;通常表示电瓶的负极。negative KL15, 通…

CANoe串口控制电源

一、工具 CANoe12.0版本&#xff0c;VN1630A 可控制电源---固纬PSW 30-36 二、CAPL编写 1、在variables变量总定义串口的一些配置信息 这里定义的port_KL30和port_KL15具体的值可以去查看设备管理器连接的串口值是多少。 2、初始化串口定义 3、串口发送函数 一切定义配置…

MKS GEN_L V2.1 Klipper固件使用说明书

广州谦辉信息科技有限公司 MKS GEN_L V2.1 Klipper固件使用说明书 创客基地QQ群&#xff1a;489095605 232237692 邮箱&#xff1a;Huangkaidamakerbase.com.cn 文章目录 一、产品简述1.1特点优势1.2主板参数1.3接线图1.4尺寸图 二、固件下载、更新2.1固件下载2.2 使用Xloader更…

Vector - VT System - 板卡_VT7001

接上篇我们介绍完了背板VT8006和VT8012&#xff0c;今天我们来介绍下电源模块板卡VT7001&#xff0c;这个板卡是我们在不需要程控电源的时候依然能够实现精细化的电压、电流控制及检查的板卡&#xff0c;并且在脚本开发中无需考虑时延的一个模块。我们使用的大部分设备无论是继…

车载中电源的术语

文章目录 前言电源模式KLR模式KL30模式KL31模式KL15模式KL50模式 前言 ​ 对于车载测试来说&#xff0c;一般是很少进行电源测试&#xff0c;但是这并不代表着我们不用去了解&#xff0c;在面试中也会经常问到电源相关的一部分知识&#xff0c;所以还是有必要了解一下的 电源…

主动/被动唤醒源与网络主动/被动唤醒

1主动唤醒源/被动唤醒源 主动唤醒源&#xff1a;承担着主动唤醒网络责任的唤醒源&#xff0c;称为主动唤醒源。比如&#xff1a;KL15硬线&#xff0c;User请求&#xff0c;ERA信号等。 KL15硬线&#xff1a;通过KL15硬线方式唤醒网络&#xff0c;说明当前网络没有节点参与通信…

【车载】【汽车电源】简述汽车电源系统

一、汽车电源 一般来讲&#xff0c;传统能源汽车的电源主要来源于电池和发电机&#xff0c;电池为汽车启动提供能量来源&#xff0c;当汽车启动完成之后&#xff0c;汽车的发电机又会为电池充电。由于发电机和发动机是靠皮带连接的&#xff0c;所以广义上也称发动机发电。而发电…

AUTOSAR EcuM学习(一)

简介 ECU Manager(EcuM)的主要任务包括&#xff1a; 初始化(initializes)/反初始化(de-initializes)OS、SchM及BSW模块&#xff1b;执行ECU的关闭(SHUTDOWN)和睡眠(SLEEP)动作&#xff1b;处理唤醒(wakeup)事件并对唤醒源进行校验(wakeup validation)。 最初ECU的整个状态管理…

AUTOSAR EcuM学习(二)

前言 本文以一个简化的示例看下ECU唤醒休眠的执行流程&#xff0c;通常不同项目因需求不同流程处理都会有所不同&#xff0c;本示例只是其中一种&#xff0c;并不是标准普适的流程。假设ECU休眠采用的是MCU掉电方式&#xff0c;且只有两个唤醒源&#xff1a;CAN和KL15&#xf…

KL15含义-- 汽车钥匙孔挡位

KL含义 KL是德文connector含义&#xff0c;芯片引脚的含义。 KL30 &#xff0c;通常表示电瓶的正极。positive KL31&#xff0c;通常表示电瓶的负极。negative KL15, 通常汽车处于RUN模式 KL50&#xff0c;通常汽车处于crank模式 KLR&#xff0c;通常汽车处于的ACC模式 汽车钥…

浅谈汽车应用中的KL15与KL30

浅谈汽车应用中的KL15与KL30 身处汽车行业或者经常看汽车应用的原理图&#xff0c;就经常能看到KL30和KL15等网络标号&#xff0c;这是什么意思&#xff0c;来简单聊下。 KL15指点火信号 KL30指蓄电池供电电压 为啥叫KL呢 其实他是德语Klemme的缩写&#xff0c;指的是ECU的管…

KL15和汽车各个档位

KL是德语Klemme的缩写&#xff0c;意思是ECU的管脚、接线柱&#xff0c;和Pin意思相同&#xff0c;后面的数字代表不同的电源模式。 KL15表示发动机的点火信号和启动车辆的信号&#xff0c;驾驶循环以此为准 KL15R&#xff0c;其中R表示Radio&#xff0c;用于启动车辆的仪表盘…

为什么点火信号叫KL15,蓄电池电压叫KL30?

在刚进入汽车行业时&#xff0c;听到前辈讨论问题时偶尔蹦出来的KL15、KL30&#xff0c;那会内心一脸懵逼&#xff0c;这啥意思呢&#xff1f; 当时也没好意思打断大家的讨论&#xff0c;直接询问。 等他们讨论完后悄咪咪的问了一下坐我对面的同事。 才知道KL15是指点火信号…

在微信开发者工具导入整个weui的实例,查看weui的用法

方法 下载weui的源代码&#xff0c;https://github.com/Tencent/weui-wxss/ &#xff0c; clone or download > Download ZIP解压&#xff0c;找到dist文件夹&#xff0c;在./weui-wxss-master/dist/打开“微信开发者工具”&#xff0c;选择“小程序” > “导入项目” &…

WeUI实例(官方)

博主最近想用小程序画几个页面&#xff0c;于是想试试WeUI的样式。但是没找到WeUI的文档&#xff0c;只找到了在线的实例演示。还有的例子是在div上显示的&#xff0c;当时比较疑惑。后来发现&#xff0c;可能是公众号的页面。 实例演示的链接&#xff1a;传送门 其实这些实例…

WeUI—微信官方UI库

WeUI 为微信 Web 服务量身设计 概述 WeUI是一套同微信原生视觉体验一致的基础样式库&#xff0c;由微信官方设计团队为微信 Web 开发量身设计&#xff0c;可以令用户的使用感知更加统一。包含button、cell、dialog、 progress, toast、article、icon等各式元素。 使用 方法一&a…