使用诸如matlab之类的实验室语言实现各类DM算法很方便,可以很快的获得实验结果,因为各类经典的数学或者DM算法都以函数的形式体现,你要做的大部分工作都可以调用这些函数,而你只需要编写少量代码就ok。但使用这类语言也有缺点,其一是这样做的效率可能不怎么高,原因是你不清楚底层代码的实现而盲目调用。其二是无法真正理解这些经典的数学或者是DM算法(看懂一个算法距离实现一个算法还是很遥远的)。 so,我尝试使用java实现一系列经典的DM算法,以加深对它们的理解。先从比较简单的感知器算法开始。 感知器算法流程:
/** * 感知器算法:作为adaboost算法的弱分类器 * 参考资料:http://wenku.baidu.com/view/f2aeda2458fb770bf78a55e5.html### * @author zhenhua.chen * @Description: TODO * @date 2013-3-7 上午9:31:01 * */ public class PerceptronApproach { private static final int T = 100; // 最大迭代次数 /** * * @param dataSet:数据集 * @param weight:每条数据的权重 * @return */ public ArrayList<Double> getWeightVector(ArrayList<ArrayList<Double>> dataSet, ArrayList<Double> dataWeight) { int dataLength = 0; if(null == dataSet) { return null; } else { dataLength = dataSet.get(0).size(); } // 初始化感知器的权重向量 ArrayList<Double> sensorWeightVector = new ArrayList<Double>(); for(int i = 0; i < dataLength; i++) { sensorWeightVector.add(1d); } // 初始化感知器的增量 // int increment = 1; int sign = 0; // 迭代终止的条件: 权值向量的的值连续dataSet.size()次大于0 for(int i = 0; i < T && sign < dataSet.size(); i++) { // 最大迭代次数 for(int z = 0; z < dataSet.size(); z++) { double result = 0; for(int j = 0 ; j < dataLength; j++) { result += dataSet.get(z).get(j) * sensorWeightVector.get(j); } if(result > 0) { sign++; if(sign >= dataSet.size()) break; } else { sign = 0; for(int k = 0; k < dataLength; k++) { //更新权值向量 sensorWeightVector.set(k, sensorWeightVector.get(k) + dataSet.get(z).get(k) * dataWeight.get(z)); } } } } return sensorWeightVector; } public static void main(String[] args) { File f = new File("E:/PA.txt"); BufferedReader reader = null; try { reader = new BufferedReader(new FileReader(f)); String str = null; try { ArrayList<ArrayList<Double>> dataSet = new ArrayList<ArrayList<Double>>(); while((str = reader.readLine()) != null) { ArrayList<Double> tmpList = new ArrayList<Double>(); String[] s = str.split("\t"); for(int i = 0; i < s.length; i++) { tmpList.add(Double.parseDouble(s[i])); } dataSet.add(tmpList); } ArrayList<Double> dataWeight = new ArrayList<Double>(); for(int i = 0; i < dataSet.size(); i++) { dataWeight.add(1d); } PerceptronApproach d = new PerceptronApproach(); d.getWeightVector(dataSet, dataWeight); System.out.println(d.getWeightVector(dataSet, dataWeight)); } catch (IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { e.printStackTrace(); } } }
相关推荐
感知器(Perceptron)是Frank Rosenblatt在1957年就职于康奈尔航空实验室(Cornell Aeronautical Laboratory)时所发明的一种人工神经网络。它可以被视为一种最简单形式的前馈神经网络,是一种二元线性分类器。...
感知机(perceptron)是线性分类的二分类模型,感知机算法使用Python实现含数据集,输出的是测试集的类别
采用c语言实现神经网络中的感知机算法的源代码
本算法实现了固定感知器算法,是人工智能神经元的感知
SinglePerceptron感知器算法的matlab实现
平均感知器 具有平均算法的线性分类 正在安装 npm install averaged-perceptron 使用 一个简单的(不现实的)示例: import averagedPerceptron from "averaged-perceptron" ; const { predict , update } = ...
感知器模型的实现,用于实现简单的感知器算法,得到一个二分类结果
已知两类训练样本为 设 ,用感知器算法求解判别函数,并绘出判别界面。
A simple, illustrative implementation of a single-layered perceptron in Java. When a pattern is impressed on the perceptron the activation of the network is adjusted according to an activation ...
本文实例为大家分享了Python感知器算法实现的具体代码,供大家参考,具体内容如下 先创建感知器类:用于二分类 # -*- coding: utf-8 -*- import numpy as np class Perceptron(object): """ 感知器:用于二分类 ...
数据挖掘感知器算法 该程序实现了一个二元感知器分类器,用于测量测试实例的分类精度。 训练和测试实例是正面/负面评论的集合。 该程序旨在与以下 4 个文件一起运行: train.positive(正训练实例) train....
perceptron神经网络感知器
经典书籍《统计学习方法》李航,第二章节《感知机(Perceptron)》-Python代码
几个模式识别的作业程序,自己写的。望指教哦,内容有感知器算法、多类感知器算法以及K均值算法
感知机perceptron算法通过 python自编码实现过程,代码中有详细的代码注解,简单易懂,入门级的代码,请收好查阅!!!谢谢!!!
multi-layer perceptron implemented in java.multi-layer perceptron implemented in java.multi-layer perceptron implemented in java.
用matlab实现了机器学习中的感知机学习算法(perceptron algorithm),利用前500个样本值训练分类器,用剩余样本做测试。
感知器程序 感知器的分类器的设计 matlab程序
本代码是感知机的原始形式与感知机的对偶形式,纯python代码自己编程以及有2个txt的数据测试。
多层感知机(multi-layer perceptron)实现手写体分类(TensorFlow)