感知机学习算法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实现的更多相关文章

  1. 感知机学习算法 python实现

    参考李航<统计学习方法> 一开始的感知机章节,看着不太复杂就实现一下... """ 感知机学习算法的原始形式 例2.1 """ ...

  2. 【机器学习】感知机学习算法(PLA)

    感知机问题学习算法引入:信用卡问题 根据已知数据(不同标准的人的信用评级)训练后得出一个能不能给新客户发放信用卡的评定结果 解决该问题的核心思想扔为之前所讲到的梯度下降算法,对于更多条件的类似问题,首 ...

  3. 感知机学习算法(PLA)

    Perception Learning Algorithm, PLA 1.感知机 感知机是一种线性分类模型,属于判别模型. 感知机模型给出了由输入空间到输出空间的映射: f(X) = sign(WTX ...

  4. 利用Python实现一个感知机学习算法

    本文主要参考英文教材Python Machine Learning第二章.pdf文档下载链接: https://pan.baidu.com/s/1nuS07Qp 密码: gcb9. 本文主要内容包括利 ...

  5. 吴裕雄 python 机器学习——人工神经网络感知机学习算法的应用

    import numpy as np from matplotlib import pyplot as plt from sklearn import neighbors, datasets from ...

  6. 归并排序算法 java 实现

    归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...

  7. java虚拟机学习-触摸java常量池(13-1)

    java虚拟机学习-深入理解JVM(1) java虚拟机学习-慢慢琢磨JVM(2) java虚拟机学习-慢慢琢磨JVM(2-1)ClassLoader的工作机制 java虚拟机学习-JVM内存管理:深 ...

  8. CS229 Lesson 5 生成学习算法

    课程视频地址:http://open.163.com/special/opencourse/machinelearning.html 课程主页:http://cs229.stanford.edu/ 更 ...

  9. [C#][算法] 用菜鸟的思维学习算法 -- 马桶排序、冒泡排序和快速排序

    用菜鸟的思维学习算法 -- 马桶排序.冒泡排序和快速排序 [博主]反骨仔 [来源]http://www.cnblogs.com/liqingwen/p/4994261.html  目录 马桶排序(令人 ...

随机推荐

  1. 【leetcode刷题笔记】Word Ladder II

    Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...

  2. Nginx配置中last和break及permanent和redirect的区别

    一.不写last和break 流程就是依次执行这些rewrite rewrite break - url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变 ...

  3. [POI2008]砖块Klo

    题目 爆炸\(OJ\)机子太慢了吧实在不想打平衡树了 做法 烂大街的一个概念:求中位数 然后求前缀差和后缀差,主席树模板题 注意\(int\)和\(long long\) My complete co ...

  4. [SCOI2003]蜘蛛难题

    题目 对于当年来说似乎是神题?? 做法 对于联通注水来说,我们考虑把所有能平分到水的桶同时加高度,然后暴力判断 My complete code copy来的代码 #include <cstdi ...

  5. canvas 视频音乐播放器

    canvas 视频音乐播放器 var play_nor_img_path = 'images/play_btn_n.png'; //播放按钮 正常时 60x60 px var play_sec_img ...

  6. 恢复性训练day1

    DP: 0/1背包一个常见的错误是没有cmax(f[i][j],f[i-1][j]) 0/1背包的拓展中有转移式的变形,以及无限数量背包,分组背包等. 可化为背包问题的一般不会太难. 数组开小,出现大 ...

  7. jack server 常见错误解决方法【转】

    本文转载自:https://blog.csdn.net/qq_27061049/article/details/70156200 jack 服务常见错误解决方法 当你编译Android时,你不需要修改 ...

  8. Go 外部排序-网络版

    目录结果 main.go package main import ( "NetworkSort/pipeline" "fmt" "os" & ...

  9. Mybatis入门2-动态代理实现CRUD

    MyBatis动态代理生成DAO的步骤: 1) 编写数据管理的接口XxxMapper 2) 编写该接口对应的Mapper.xml a) namespace必须与Mapper接口全名一致 b) stat ...

  10. EntityFramework 学习 一 Execute Native SQL Query

    SQL query for entity types: using (var ctx = new SchoolDBEntities()) { var studentList = ctx.Student ...