ELM算法模型是最近几年得到广泛重视的模型,它不同于现在广为火热的DNN。 ELM使用传统的三层神经网络,只包含一个隐含层,但又不同于传统的神经网络。ELM是一种简单易用、有效的单隐层前馈神经网络SLFNs学习算法。2006年由南洋理工大学黄广斌副教授提出。传统的神经网络学习算法(如BP算法)需要人为设置大量的网络训练参数,并且很容易产生局部最优解。极限学习机只需要设置网络的隐层节点个数,在算法执行过程中不需要调整网络的输入权值以及隐元的偏置,并且产生唯一的最优解,因此具有学习速度快且泛化性能好的优点。但是隐含层节点个数的设置需要经过人工大量实验得到或者通过最常见的CV方法可以得到。 下面,matlab实现10-fold CV 寻找最优隐含层节点个数的。作为以前工作的一个小记录。ELM使用的是主页http://www.ntu.edu.sg/home/egbhuang/ 源码。源程序包含两个脚本文件cv_para.m  和 Data2txt.m

Description:

@cv_para.m 这个是主程序

结构体:function [best_para]=cv_para(data,para_set)。其中使用到两个参数,data代表我们的完整数据,也就是没有划分训练集和测试集的完整数据。para_set代表隐含层节点个数的一个数组,例如在[1:60]之间选择一个最优的隐含层节点个数。

@Data2txt.m 这个脚本文件是为了满足ELM算法训练将数据转化为源码ELM可以使用的文本文件。数据格式在ELM主页已经给出example。

 function [best_para]=cv_para(data,para_set)

 num_folds=10;     % 10-fold cross validation

 n=size(data,1);

 n_paras=length(para_set);

 idx=randperm(n);    % idx 代表n个数据中索引的任意排列

 n_test=floor(n/num_folds); % n_test: 测试集包含的数据集的个数

 test_idx=zeros(num_folds,n_test); % test_idx: 储存num_folds次测试集的索引

 train_idx=zeros(num_folds,n-n_test); %train_idx: 原理同test_idx

 % 下面程序操作的主要是索引,只要将训练集地址和测试集地址划分出来

 for i=1:num_folds

     test_idx(i,:)=idx((i-1)*n_test+1:i*n_test);  

     tmp=1:n;

     tmp(test_idx(i,:))=[];

     train_idx(i,:)=tmp;

 end

 best_accs=inf;

 best_para=1; % 保存最优的隐含节点个数

 for i=1:n_paras

         one_accs=0;

         for j=1:num_folds  

             % 这里就是将数据集转化为文本文件形式,以满足elm源码的需求

              train_data=data(train_idx(j,:),:);

              test_data=data(test_idx(j,:),:);

              Data2txt(train_data,'trainfile');

              Data2txt(test_data,'testfile');

              [TrainingTime, TrainingAccuracy] = elm_train('trainfile', 0, para_set(1,i), 'sig');

              [TestingTime, acc] = elm_predict('testfile');

             one_accs=one_accs+acc;

             delete('trainfile');

             delete('testfile');

         end

         if(best_accs>one_accs)

             best_para=para_set(1,i);

             best_accs=one_accs;

         end

 end

 end

 @Data2txt 源码

 function[]=Data2txt(Data,file)

     fid=fopen(file,'w');%дÈëÎļþ·¾¶

     [m,n]=size(Data);

      for i=1:1:m

          for j=1:1:n

             if j==n

                 fprintf(fid,'%g\n',Data(i,j));

             else

                 fprintf(fid,'%g\t',Data(i,j));

          end

         end

      end

     fclose(fid);

 end

使用Cross-validation (CV) 调整Extreme learning Machine (ELM) 最优参数的实现(matlab)的更多相关文章

  1. Extreme Learning Machine(ELM)的工程哲学

    Extreme Learning Machine(ELM)的工程哲学 David_Wang2015 发布于2015年5月6日 11:29 工程问题往往需要的是一定精度范围内的结果,而不是“真正的”结果 ...

  2. 超限学习机 (Extreme Learning Machine, ELM) 学习笔记 (一)

    1. ELM 是什么 ELM的个人理解: 单隐层的前馈人工神经网络,特别之处在于训练权值的算法: 在单隐层的前馈神经网络中,输入层到隐藏层的权值根据某种分布随机赋予,当我们有了输入层到隐藏层的权值之后 ...

  3. paper 102:极限学习机(Extreme Learning Machine)

    原文地址:http://blog.csdn.net/google19890102/article/details/18222103   极限学习机(Extreme Learning Machine) ...

  4. Extreme Learning Machine

    Extreme Learning Machine 作者:凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. ELM 2004年南洋理工大学黄广斌提出了ELM ...

  5. Extreme Learning Machine 翻译

    本文是作者这几天翻译的一篇经典的ELM文章,是第一稿,所以有很多错误以及不足之处. 另外由于此编辑器不支持MathType所以好多公式没有显示出来,原稿是word文档. 联系:250101249@qq ...

  6. 极限学习机(Extreme Learning Machine)学习笔记

    最近研究上了这个一个东西--极限学习机. 在很多问题中,我大多会碰到两个问题,一个是分类,另一个就是回归.简单来说,分类是给一串数打个标签,回归是把一串数变为一个数. 在这里我们需要处理的数据一般维度 ...

  7. 交叉验证(Cross Validation)简介

    参考    交叉验证      交叉验证 (Cross Validation)刘建平 一.训练集 vs. 测试集 在模式识别(pattern recognition)与机器学习(machine lea ...

  8. Cross Validation done wrong

    Cross Validation done wrong Cross validation is an essential tool in statistical learning 1 to estim ...

  9. 交叉验证(cross validation)

    转自:http://www.vanjor.org/blog/2010/10/cross-validation/ 交叉验证(Cross-Validation): 有时亦称循环估计, 是一种统计学上将数据 ...

随机推荐

  1. PHP学习笔记(5) - 选择一个合格的框架

    作为一个合格的PHP开发框架,个人觉得起码需要满足以下几点. 一.上梁不正下梁歪,好的框架首先自身要有良好的编码规范和文件目录结构,代码要易于阅读理解. 二.为了可以更好地适应OOP,框架必须可以提供 ...

  2. c语言贪吃蛇

    思路:函数gotoxy(x,y)使光标移植屏幕的x,y坐标(屏幕左上角为0,0),用来绘制蛇和界面,color()函数用来设置绘制的颜色.设有snakelong节,第i节蛇的x坐标为x[i],y坐标为 ...

  3. NSAssert使用摘抄

    #define NSAssert(condition, desc, ...) 只有条件condition满足,才会执行下一个语句,否则输出断言错误. 例如: NSAssert(1 != 2, @&qu ...

  4. initialize or clean up your unittest within .net unit test

    // Use ClassInitialize to run code before running the first test in the class [ClassInitialize()] pu ...

  5. C# - 定义集合,索引符

    Animal 类 Cow类 Chicken类 Animal 集合类 调用

  6. <二> jQuery 语法

    通过jQuery你可以选择/查询html元素,并对它们进行操作.jQuery 使用的语法是 XPath 与 CSS 选择器语法的组合. $(this).hide() 隐藏当前html元素 $(&quo ...

  7. AES加密算法原理

    随着对称密码的发展,DES数据加密标准算法由于密钥长度较小(56位),已经不适应当今分布式开放网络对数据加密安全性的要求,因此1997年NIST公开征集新的数据加密标准,即AES[1].经过三轮的筛选 ...

  8. Java Portlet 规范概述

    首先,解释几个基本的术语. 1)Portal Portal 是一种 web 应用,通常具有个性化.单点登录.来自不同源的内容聚合(aggregation)并提供信息系统表现层等特点.所谓聚合,是指将不 ...

  9. bzoj 4127: Abs 树链剖分

    4127: Abs Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 11  Solved: 5[Submit][Status][Discuss] Des ...

  10. PYTHON多进程样码

    敲了一晚上,留个念想. 发现它和LINUX的C编程差不多,就是作了PYTHON化的语法封装. 以后希望有机会能用上.. A,多进程函数化实现 import multiprocessing import ...