感知机学习算法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 目录 马桶排序(令人 ...
随机推荐
- 通过调节坐标进行jfree图的放大缩小
http://blog.csdn.net/lt1983lt/article/details/5665085 import Java.awt.BorderLayout;import java.awt.C ...
- linux alsa pcm(此pcm非硬件pcm接口)
转:https://blog.csdn.net/crycheng/article/details/7095899 CODEC :音频芯片的控制,比如静音.打开(关闭)ADC(DAC).设置ADC(DA ...
- Python编程-网络编程
一.Socket复习 1.Socket参数 sk.bind(address) 必会 s.bind(address) 将套接字绑定到地址.address地址的格式取决于地址族.在AF_INET下,以元组 ...
- OC_链表实现队列
@interface Node : NSObject @property(nonatomic,strong)NSString *value; @property(nonatomic,strong)No ...
- 理解Android Build系统【转】
本文转载自:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/ Android Build 系统是用来编译 And ...
- Struts2的<s:date>标签使用详解[转]
作用:用来格式化显示日期的格式. 它可以用一种你指定的格式来显示 (如:“yyyy-MM-dd”),可以生成通俗易懂的注释(如:in 2 hours,14 minutes),或者用预先定义的一个格式来 ...
- window.open、window.showModalDialog和window.showModelessDialog 的区别[转]
一.前言 要打开一个可以载入页面的子窗口有三种方法,分别是window.open.window.showModalDialog和window.showModelessDialog. open方法就是打 ...
- 【P2236】彩票(搜索+剪枝)
想说这个题要是想做出来就必须不干一件事情,那就是不要点开标签..点开标签看到那些平衡树什么的.... 首先,我们要理解这个题的题意.买彩票是什么大家都应该知道吧,一般来说,就是从很多数里面选出来几个, ...
- 正则表达式java,javaScript应用
dfa nfa 混合:捕获:断言: 正则引擎大体上可分为不同的两类:DFA和NFA,而NFA又基本上可以分为传统型NFA和POSIX NFA. 1.正则语法 捕获组: 没用()的字符都是一个一个 ...
- Unity3D-UGUI图集打包与动态使用(TexturePacker)
参考地址: http://blog.csdn.net/cjsen/article/details/52487706 今天做项目大佬看我在做图集,就跟我说可以用工具打包图集,也就是TexturePack ...