感知机模型

假设输入数据集为表示是n个训练数据样本。输出y只有两个值(-1,+1)两个分类。那么感知机模型可以表示为以下函数:

其中sign是符号函数,意义如下。w表示权值,b表示偏置。我们就是需要通过一定的策略和算法求出其w和b,就可以得到相关的感知机模型。

援引网上参考代码如下:

package sk.ann;import java.util.ArrayList;
import java.util.Arrays;public class PerceptronClassifier {/* 分类器参数*/private double[] w;//权值向量组private double b = 0;//阈值private double eta = 1;ArrayList<Point> arrayList;/*** 初始化分类器,传入需要分组的数据* @param arrayList  需要分类的点*/public PerceptronClassifier(ArrayList<Point> arrayList, double eta) {// 分类器初始化this.arrayList = arrayList;w = new double[arrayList.get(0).x.length];this.eta = eta;}public PerceptronClassifier(ArrayList<Point> arrayList) {// 分类器初始化this.arrayList = arrayList;w = new double[arrayList.get(0).x.length];this.eta = 1;}/*** 进行分类计算* @return 是否分类成功*/public boolean Classify() {boolean flag = false;while (!flag) {for (int i = 0; i < arrayList.size(); i++) {//所有训练集if (LearnAnswer(arrayList.get(i)) <= 0) {UpdateWAndB(arrayList.get(i));break;}if (i == (arrayList.size() - 1)) {flag = true;}}}System.out.println(Arrays.toString(w));System.out.println(b);return true;}/*** 进行学习得到的结果* @param point 需要进行学习的点,训练样本* @return*/private double LearnAnswer(Point point) {System.out.println(Arrays.toString(w));System.out.println(b);return point.y * (DotProduct(w, point.x) + b);}/*** 进行w更新* @param point 需要根据样本来随机梯度下降来进行w和b更新* @return 不需要返回值*/private void UpdateWAndB(Point point) {for (int i = 0; i < w.length; i++) {w[i] += eta * point.y * point.x[i];}b += eta * point.y;return;}/*** 进行点乘* @param x1 乘数* @param x2 乘数* @return 点乘的积*/private double DotProduct(double[] x1, double[] x2) {int len = x1.length;double sum = 0;for (int i = 0; i < len; i++) {sum += x1[i] * x2[i];}return sum;}/*** 主程序进行检测* @param args*/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<Point> list = new ArrayList<Point>();list.add(p1);list.add(p2);list.add(p3);list.add(p4);PerceptronClassifier classifier = new PerceptronClassifier(list);classifier.Classify();}
}/*** 定义一个Point,里面包含两个部分,用来分类。x表示输入R维空间向量,y表示分类值,只有-1和+1两类*/class Point {double[] x = new double[2];double y = 0;Point(double[] x, double y) {this.x = x;this.y = y;}public Point() {}}

执行结果如下:

[0.0, 0.0, 0.0, 0.0]
0.0
[0.0, 0.0, 0.0, -1.0]
-1.0
[0.0, 0.0, 0.0, -1.0]
-1.0
[1.0, 0.0, 0.0, -1.0]
0.0
[1.0, 0.0, 0.0, -1.0]
0.0
[1.0, 0.0, 0.0, -1.0]
0.0
[1.0, 0.0, 0.0, -1.0]
0.0
[-1.0, -1.0, 0.0, -2.0]
-1.0
[-1.0, -1.0, 0.0, -2.0]
-1.0
[0.0, -1.0, 0.0, -2.0]
0.0
[0.0, -1.0, 0.0, -2.0]
0.0
[1.0, -1.0, 0.0, -2.0]
1.0
[1.0, -1.0, 0.0, -2.0]
1.0
[1.0, -1.0, 0.0, -2.0]
1.0
[1.0, -1.0, 0.0, -2.0]
1.0
[-1.0, -2.0, 0.0, -3.0]
0.0
[-1.0, -2.0, 0.0, -3.0]
0.0
[0.0, -2.0, 0.0, -3.0]
1.0
[0.0, -2.0, 0.0, -3.0]
1.0
[0.0, -2.0, 0.0, -3.0]
1.0
[2.0, -1.0, 0.0, -3.0]
2.0
[2.0, -1.0, 0.0, -3.0]
2.0
[2.0, -1.0, 0.0, -3.0]
2.0
[2.0, -1.0, 0.0, -3.0]
2.0
[0.0, -2.0, 0.0, -4.0]
1.0
[0.0, -2.0, 0.0, -4.0]
1.0
[0.0, -2.0, 0.0, -4.0]
1.0
[2.0, -1.0, 0.0, -4.0]
2.0
[2.0, -1.0, 0.0, -4.0]
2.0
[2.0, -1.0, 0.0, -4.0]
2.0
[2.0, -1.0, 0.0, -4.0]
2.0
[0.0, -2.0, 0.0, -5.0]
1.0
[0.0, -2.0, 0.0, -5.0]
1.0
[0.0, -2.0, 0.0, -5.0]
1.0
[2.0, -1.0, 0.0, -5.0]
2.0
[2.0, -1.0, 0.0, -5.0]
2.0
[2.0, -1.0, 0.0, -5.0]
2.0
[2.0, -1.0, 0.0, -5.0]
2.0
[0.0, -2.0, 0.0, -6.0]
1.0
[0.0, -2.0, 0.0, -6.0]
1.0
[0.0, -2.0, 0.0, -6.0]
1.0
[2.0, -1.0, 0.0, -6.0]
2.0
[2.0, -1.0, 0.0, -6.0]
2.0
[2.0, -1.0, 0.0, -6.0]
2.0
[2.0, -1.0, 0.0, -6.0]
2.0
[2.0, -1.0, 0.0, -6.0]
2.0

这个代码实现具有特定分类标记,如1和-1。

机器学习知识点(八)感知机模型Java实现相关推荐

  1. 今日机器学习概念:感知机模型

    点击上方"AI有道",选择"设为星标" 关键时刻,第一时间送达! 感知机模型是机器学习二分类问题中的一个非常简单的模型.它的基本结构如下图所示: 感知机的运算过 ...

  2. 机器学习:从感知机模型体会随机梯度下降

    文章目录 感知机模型: 感知机模型的随机梯度下降: 感知机模型的算法描述: 感知机的代码实现: 感知机模型: 寻找一个超平面使数据集线性可分,寻找超平面的过程可以转化为最小化一个损失函数的过程: 如何 ...

  3. 【机器学习算法】感知机模型

    文章目录 1. 感知机模型 2. 收敛性证明(Novikoff定理) 3. 感知机对偶形式 4.感知机的缺点 5.感知机的几个变形 5.1 投票感知机 5.2 平均感知机 1. 感知机模型   感知机 ...

  4. 1 李航《统计机器学习》之感知机模型

    1.1  感知机模型         类别: 二分类线性分类模型.判别模型         模型:,可以理解为特征空间的一个分割超平面,权重可以理解为分割超平面的法向量,偏置可以理解为超平面的截距. ...

  5. 机器学习知识点(二十五)Java实现隐马尔科夫模型HMM之jahmm库

    1.隐马尔可夫模型HMM的应用场景,关乎于序列和状态变化的都可以.    发现java有可库,专为开发HMM,可惜只能在CSDN上有得下载.     2.jahmm是java开发隐马尔科夫模型的一个j ...

  6. 机器学习知识点(九)BP神经网络Java实现

    为深入理解机器学习中BP神经网络算法,从网上找到的Java实现代码. 1.BP神经网络结构如下图所示,最左边的是输入层,最右边的是输出层,中间是多个隐含层,隐含层和输出层的每个神经节点,都是由上一层节 ...

  7. 机器学习知识点(五)梯度下降法Java实现

    梯度下降法,就是利用负梯度方向来决定每次迭代的新的搜索方向,使得每次迭代(步长)能使待优化的目标函数逐步减小.梯度下降法是2范数下的最速下降法,用来求解函数的最小值,无约束优化. 看数学定义都晦涩,网 ...

  8. 多元函数梯度下降 java_机器学习知识点(五)梯度下降法Java实现

    梯度下降法,就是利用负梯度方向来决定每次迭代的新的搜索方向,使得每次迭代(步长)能使待优化的目标函数逐步减小.梯度下降法是2范数下的最速下降法,用来求解函数的最小值,无约束优化. 看数学定义都晦涩,网 ...

  9. 短小精悍-机器学习核心概念、模型、基础知识点简明手册-免费分享

    该手册只有130页,整理了几乎所有关机机器学习的概念.模型.基础知识点,它将帮助读者快速回顾关于机器学习相关的核心知识点和重要公式.模型.概念.涉及概率模型.处理离散数据的生成模型.高斯模型.贝叶斯模 ...

最新文章

  1. resize函数_每日一题手写函数防抖与节流
  2. 不用羡慕BAT,自己手工也能搭建伪基站监控系统
  3. python标准库和第三方库_python常用标准库及三方库
  4. Spark2.3.0的DataFrame去哪了,DataSet是哪位?
  5. 钉钉 php 推送,微信模板推送,钉钉信息推送
  6. Swift - 触摸事件(点击,移动,抬起等)说明及用例
  7. python批量生成word报告_python自动生成word报告 | 如何将现有的数据利用python 填入word的表格中?...
  8. Balsamiq Mockups 实例3
  9. IntObjectHashMap和HashMap的区别?
  10. 验证GridControl Gridview 单元格。
  11. SystemExit: 2
  12. Eclipse打开报错解决方案
  13. 51单片机学习笔记(清翔版)(23)——红外通讯
  14. windows10 卓越性能模式
  15. CSP-2022 游寄
  16. CSS知识全面汇总——速查手册
  17. linux内核vga参数,LINUX grub 修改VGA参数
  18. “情商”和“智商”究竟有哪些区别?
  19. 法大大连续两年中国电子签名市场份额第一
  20. 【cocos2d游戏开发实战】一款射击类小游戏《Zombie Age》的开发(一)

热门文章

  1. Redis:主从复制原理
  2. 计算机硬件大型作业报告,计算机硬件技术大作业报告.doc
  3. gm怎么刷东西 rust_刷了这种黑板漆再也不用担心吃粉笔灰了
  4. Java程序设计第三次作业
  5. Kotlin 在kotlin内使用Java的一些注意(长篇)
  6. Jsp之五 过滤器与监听器
  7. ubuntu 下安装 activate-power-mode
  8. Web API Test Client 1.2.0
  9. 大道至简第四章流于形式的沟通——读后感
  10. 2D简单图形相关算法罗列