感知机学习算法Java实现
感知机学习算法Java实现。
Perceptron类用于实现感知机,
其中的perceptronOriginal()方法用于实现感知机学习算法的原始形式;
perceptronAnother()方法用于实现感知机学习算法的对偶形式(此处仍有bug)。
import java.util.Scanner;
public class Perceptron {
private static final int maxn = 1010;
private static final int maxm = 101;
private static double[][] x = new double[maxn][maxm];
private static double[] y = new double[maxn];
private static int N = 0;
private static int M = 0;
private static double phi = 0.1;
private static double[] w = new double[maxm];
private static double b = 0;
private static double[] alpha = new double[maxn];
private static double[][] G = new double[maxn][maxn];
private static void perceptronOriginal() {
for(int i=0;i<M;i++) w[i] = 0;
b = 0;
boolean ok = true;
while(ok) {
ok = false;
for(int i=0;i<N;i++) {
double tmp = 0;
for(int j=0;j<M;j++) tmp += w[j] * x[i][j];
tmp += b;
if(tmp * y[i] <= 0) {
ok = true;
for(int j=0;j<M;j++) w[j] += phi * y[i] * x[i][j];
b += phi * y[i];
}
}
}
}
private static void beforePerceptronAnother() {
for(int i=0;i<N;i++)
for(int j=i;j<N;j++)
for(int k=0;k<M;k++)
G[i][j] = x[i][k] * x[j][k];
for(int i=0;i<N;i++)
for(int j=0;j<i;j++)
G[i][j] = G[j][i];
}
public static void perceptronAnother() { // has bug
beforePerceptronAnother();
for(int i=0;i<N;i++) alpha[i] = 0;
b = 0;
boolean ok = true;
while(ok) {
ok = false;
for(int i=0;i<N;i++) {
double tmp = 0;
for(int j=0;j<N;j++)
tmp += alpha[j] * y[j] * G[j][i];
tmp += b;
if(y[i] * tmp <= 0) {
ok = true;
alpha[i] += phi;
b += phi * y[i];
System.out.println("alpha[" + i + "]:" + alpha[i] + ",b:" + b);
}
}
}
phi *= 0.9;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("input N: ");
N = in.nextInt();
System.out.print("input M: ");
M = in.nextInt();
System.out.println("input x:");
for(int i=0;i<N;i++)
for(int j=0;j<M;j++)
x[i][j] = in.nextDouble();
System.out.println("input y(y={-1,+1}):");
for(int i=0;i<N;i++)
y[i] = in.nextDouble();
System.out.println("perceptron original......");
perceptronOriginal();
for(int i=M-1;i>=0;i--)
System.out.println("w" + i + ":" + w[i]);
System.out.println("b:" + b);
System.out.println("perceptron another......");
perceptronAnother();
for(int i=0;i<M;i++) w[i] = 0;
for(int i=0;i<N;i++) {
for(int j=0;j<M;j++) {
w[j] += alpha[i] * y[i] * x[i][j];
}
}
for(int i=M-1;i>=0;i--)
System.out.println("w" + i + ":" + w[i]);
System.out.println("b:" + b);
}
}
感知机学习算法Java实现的更多相关文章
- 感知机学习算法 python实现
参考李航<统计学习方法> 一开始的感知机章节,看着不太复杂就实现一下... """ 感知机学习算法的原始形式 例2.1 """ ...
- 【机器学习】感知机学习算法(PLA)
感知机问题学习算法引入:信用卡问题 根据已知数据(不同标准的人的信用评级)训练后得出一个能不能给新客户发放信用卡的评定结果 解决该问题的核心思想扔为之前所讲到的梯度下降算法,对于更多条件的类似问题,首 ...
- 感知机学习算法(PLA)
Perception Learning Algorithm, PLA 1.感知机 感知机是一种线性分类模型,属于判别模型. 感知机模型给出了由输入空间到输出空间的映射: f(X) = sign(WTX ...
- 利用Python实现一个感知机学习算法
本文主要参考英文教材Python Machine Learning第二章.pdf文档下载链接: https://pan.baidu.com/s/1nuS07Qp 密码: gcb9. 本文主要内容包括利 ...
- 吴裕雄 python 机器学习——人工神经网络感知机学习算法的应用
import numpy as np from matplotlib import pyplot as plt from sklearn import neighbors, datasets from ...
- 归并排序算法 java 实现
归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...
- java虚拟机学习-触摸java常量池(13-1)
java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深 ...
- CS229 Lesson 5 生成学习算法
课程视频地址:http://open.163.com/special/opencourse/machinelearning.html 课程主页:http://cs229.stanford.edu/ 更 ...
- [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序
用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html 目录 马桶排序(令人 ...
随机推荐
- Nginx之Location模块
location 的语法 locltion可以把不同方式的请求,定位到不同的处理方式上 location分类及用法 location大致分为三类: location = patt {} [精准匹配] ...
- utf-8,Unicode和ASCII区别
一.ASCII 码 我们知道,计算机内部,所有信息最终都是一个二进制值.每一个二进制位(bit)有0和1两种状态,因此八个二进制位就可以组合出256种状态,这被称为一个字节(byte).也就是说,一个 ...
- 域名解析中TTL是什么意思
在做域名解析的时候都会看到一个叫“TTL”的值,一般都有一个默认的值,不过不同注册商默认的值也会不一样,常见的是3600和7200这两个值. 另外ping的时候也可以看到“TTL=XXX”的字样,(如 ...
- C# 关于 上传文件 大小限制问题
<system.web> <compilation debug="true" targetFramework="4.5" /> < ...
- JAVA8新特性——接口定义增强
JAVA9都要出来了,JAVA8新特性都没搞清楚,是不是有点掉队哦~ 接口定义增强 在JDK1.8以前,接口是定义的: 接口(英文:Interface),在JAVA编程语言中是一个抽象类型,是抽象方法 ...
- 关于synchronized关键字
1.synchronized关键字的作用域有二种: 1)是某个对象实例内,synchronized aMethod(){}可以防止多个线程同时访问这个对象的synchronized方法(如果一个对象有 ...
- openstack Neutron分析(3)—— neutron-dhcp-agent源码分析
1.neutron dhcp3个主要部件分别为什么?2.dhcp模块包含哪些内容?3.Dnsmasq配置文件是如何创建和更新的?4.DHCP agent的信息存放在neutron数据库的哪个表中? 扩 ...
- Codeforces 938E Max History:排列 + 逆元【考虑单个元素的贡献】
题目链接:http://codeforces.com/problemset/problem/938/E 题意: 定义f(a): 初始时f(a) = 0, M = 1. 枚举i = 2 to n,如果a ...
- review15
不同区域的星期格式 不同国家的星期的简称或全称有很大的不同.如果想用特定地区的星期格式来表示日期中的星期,可以用format的重载方法: format(Locale locale, 格式化模式,日期列 ...
- 绑定自己Self
Header="{Binding Path=Command.Text, RelativeSource={RelativeSource Self}}"/>