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. jquery点击其他地方隐藏div层的实现程序

    js代码 $(document).ready(function() { //语言头部的点击事件,显示语言列表 $(".language_selected").click(funct ...

  2. poj 2187 Beauty Contest

    Beauty Contest 题意:给你一个数据范围在2~5e4范围内的横纵坐标在-1e4~1e4的点,问你任意两点之间的距离的最大值的平方等于多少? 一道卡壳凸包的模板题,也是第一次写计算几何的题, ...

  3. C++ 实现设计模式之观察者模式

    1. 什么是观察者模式? 观察者模式(有时又被称为发布-订阅Subscribe>模式.模型-视图View>模式.源-收听者Listener>模式或从属者模式)是软件设计模式的一种.在 ...

  4. 关于《一步步学习ASP.NET MVC3》系列发布时间的说明

    在写这个系列的时候,老魏也是下了很大的决心,因为平时基本上没有时间写文章,这回我要挑战我自己的意志力,决定要把这个系列写完整. 再次呢,老魏不能向大家保证什么时间结束,但基本上要保持一天一篇的进度,如 ...

  5. hdu 2665 Kth number(划分树模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=2665 [ poj 2104 2761 ]  改变一下输入就可以过 http://poj.org/problem? ...

  6. python 操作sqlite数据库

    '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说 没有独立的维护进程,所有的维护都来自于程序本身. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不 ...

  7. Bootstrap 与 ASP.NET MVC 4 不使用 NuGet Package 笔记

    转自 http://www.mytecbits.com/microsoft/dot-net/bootstrap-with-asp-net-mvc-4-step-by-step 单位最近做了一个Boot ...

  8. shell 流程控制

    for循环: #!/bin/bash for file in $(ls /ect) do echo $file done

  9. 原生javascript效果:无缝滚动

    <style type="text/css"> #con {width:400px; padding:10px; margin:20px auto; text-alig ...

  10. 使用JProfiler进行内存分析

    在最近的工作中,通过JProfiler解决了一个内存泄漏的问题,现将检测的步骤和一些分析记录下来,已备今后遇到相似问题时可以作为参考. 运行环境: Tomcat6,jdk6,JProfiler8 内存 ...