机器学习入门-用Java实现简单感知机
一、通俗理解机器学习
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实现简单感知机相关推荐
- 美亚畅销的百页机器学习入门书,不止简单易懂
我与"机器学习"的初次邂逅是在5年前,那时我刚刚决定于新加坡南洋理工大学攻读计算机博士学位.比起计算机学院的主流课程,如数据库.软件开发.嵌入式系统等,"机器学习&quo ...
- 机器学习入门(02)— 由感知机到神经网络的过渡进化,激活函数在神经网络中的作用
1. 神经网络示例 用图来表示神经网络的话,如图3-1 所示.我们把最左边的一列称为输入层,最右边的一列称为输出层,中间的一列称为中间层.中间层有时也称为隐藏层."隐藏"一词的意思 ...
- Thrift入门及 Java 实现简单demo
本文示例代码: github传送门 本文并未与spring boot集成,仅实现了demo.可以将本文中的类作为spring中的bean使用即可. 其实一开始是想集成的,后来发现thrift已经够头大 ...
- 机器学习原来这么有趣!第一章:全世界最简单的机器学习入门指南
第一章:全世界最简单的机器学习入门指南 https://blog.csdn.net/wskzgz/article/details/89917343 第二章:用机器学习制作超级马里奥的关卡 https: ...
- 曲线聚类_机器学习入门必读:6种简单实用算法及学习曲线、思维导图
来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...
- 机器学习入门必读:6种简单实用算法及学习曲线、思维导图
来源:大数据DT 本文约3500字,建议阅读7分钟 本文为你介绍掌握机器领域知识的学习曲线.技术栈以及常用框架. [ 导读 ] 大部分的机器学习算法主要用来解决两类问题--分类问题和回归问题.在本文当 ...
- 机器学习原来如此有趣!全世界最简单的机器学习入门指南
机器学习原来如此有趣!全世界最简单的机器学习入门指南更多关于机器学习的实战案例 你是否曾经听到过人们谈论机器学习,而你却对其含义只有一个模糊的概念呢?你是否已经厌倦了在和同事对话时只能点头呢?现在,让 ...
- python 分类_简单机器学习入门教程:用Python解决简单的水果分类问题
在这篇机器学习入门教程中,我们将使用Python中最流行的机器学习工具scikit- learn,在Python中实现几种机器学习算法.使用简单的数据集来训练分类器区分不同类型的水果. 这篇文章的目的 ...
- 初学者的机器学习入门实战教程!
点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」,购票请扫码咨询 ↑↑↑ 作者 | Adrian Rosebrock 译者 | kbsc13,京东算法工程师,研究领域计算机视觉 来源 ...
- 机器学习群内分享: 机器学习入门的几个问题
编者按:本文内容摘录自CSDN博客专家.CSDN学院讲师蔡军生老师在CSDN组建的机器学习技术学习微信群中的分享内容.蔡军生从事C++开发已经15年以上经验,并在软件开发管理方面有10年以上资历. 蔡 ...
最新文章
- 多表连接去重复 mysql_连接多个表时避免重复条目(MySQL)
- go语言学习,channel消费者和生产者
- 求数组中的最大数,最小数。
- 28.进程和程序的区别
- UDP 组播---基本概念
- 第三十七期:如果你这样回答“什么是线程安全”,面试官都会对你刮目相看
- orale用户密码过期处理
- 怎么查看我的php版本,怎样查看php版本
- 【空瓶识别】基于matlab灰度+二值化空瓶检测【含Matlab源码 806期】
- ITIL 4 讲解:服务目录
- 非 ROOT 安卓内录
- ubantu下安装redis
- python机械臂仿真_机械臂 python
- 查询pytorch文档的实用方法
- 基于STC8单片机的频率计
- Vue.js实战梁笔记02(第3-5章)
- 西门子S7-200 SMART控制步进电机(三)
- SQL leetcode刷题答案(一)
- NVIDIA下载问题
- 三大框架整合步骤(详细)