一、通俗理解机器学习

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

机器学习入门-用Java实现简单感知机相关推荐

  1. 美亚畅销的百页机器学习入门书,不止简单易懂

    我与"机器学习"的初次邂逅是在5年前,那时我刚刚决定于新加坡南洋理工大学攻读计算机博士学位.比起计算机学院的主流课程,如数据库.软件开发.嵌入式系统等,"机器学习&quo ...

  2. 机器学习入门(02)— 由感知机到神经网络的过渡进化,激活函数在神经网络中的作用

    1. 神经网络示例 用图来表示神经网络的话,如图3-1 所示.我们把最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层.中间层有时也称为隐藏层."隐藏"一词的意思 ...

  3. Thrift入门及 Java 实现简单demo

    本文示例代码: github传送门 本文并未与spring boot集成,仅实现了demo.可以将本文中的类作为spring中的bean使用即可. 其实一开始是想集成的,后来发现thrift已经够头大 ...

  4. 机器学习原来这么有趣!第一章:全世界最简单的机器学习入门指南

    第一章:全世界最简单的机器学习入门指南 https://blog.csdn.net/wskzgz/article/details/89917343 第二章:用机器学习制作超级马里奥的关卡 https: ...

  5. 曲线聚类_机器学习入门必读:6种简单实用算法及学习曲线、思维导图

    来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...

  6. 机器学习入门必读:6种简单实用算法及学习曲线、思维导图

    来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...

  7. 机器学习原来如此有趣!全世界最简单的机器学习入门指南

    机器学习原来如此有趣!全世界最简单的机器学习入门指南更多关于机器学习的实战案例 你是否曾经听到过人们谈论机器学习,而你却对其含义只有一个模糊的概念呢?你是否已经厌倦了在和同事对话时只能点头呢?现在,让 ...

  8. python 分类_简单机器学习入门教程:用Python解决简单的水果分类问题

    在这篇机器学习入门教程中,我们将使用Python中最流行的机器学习工具scikit- learn,在Python中实现几种机器学习算法.使用简单的数据集来训练分类器区分不同类型的水果. 这篇文章的目的 ...

  9. 初学者的机器学习入门实战教程!

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」,购票请扫码咨询 ↑↑↑ 作者 | Adrian Rosebrock 译者 | kbsc13,京东算法工程师,研究领域计算机视觉 来源 ...

  10. 机器学习群内分享: 机器学习入门的几个问题

    编者按:本文内容摘录自CSDN博客专家.CSDN学院讲师蔡军生老师在CSDN组建的机器学习技术学习微信群中的分享内容.蔡军生从事C++开发已经15年以上经验,并在软件开发管理方面有10年以上资历. 蔡 ...

最新文章

  1. 多表连接去重复 mysql_连接多个表时避免重复条目(MySQL)
  2. go语言学习,channel消费者和生产者
  3. 求数组中的最大数,最小数。
  4. 28.进程和程序的区别
  5. UDP 组播---基本概念
  6. 第三十七期:如果你这样回答“什么是线程安全”,面试官都会对你刮目相看
  7. orale用户密码过期处理
  8. 怎么查看我的php版本,怎样查看php版本
  9. 【空瓶识别】基于matlab灰度+二值化空瓶检测【含Matlab源码 806期】
  10. ITIL 4 讲解:服务目录
  11. 非 ROOT 安卓内录
  12. ubantu下安装redis
  13. python机械臂仿真_机械臂 python
  14. 查询pytorch文档的实用方法
  15. 基于STC8单片机的频率计
  16. Vue.js实战梁笔记02(第3-5章)
  17. 西门子S7-200 SMART控制步进电机(三)
  18. SQL leetcode刷题答案(一)
  19. NVIDIA下载问题
  20. 三大框架整合步骤(详细)

热门文章

  1. 云计算中网络基础知识
  2. VirtualBox使用教程
  3. windows全系1
  4. JavaScript对话框
  5. 系统架构师论文-论新技术的引进
  6. 计算机软件 属于特许权,​软件使用权是否属于无形资产
  7. 遇到一个奇怪的问题——关于VS2013、VS2015中字符集(多字节字符集和Unicode字符集)的选择
  8. 电能终端服务器,抄表终端服务器设置教程
  9. ElasticJob 3.0 带你快速入门
  10. 凹多边形三角剖分算法实现---基于Unity3D