在开始学习机器学习和数据挖掘的过程中,我的导师让我看了一篇关于聚类的论文 A testing based extraction algorithm for identifying significant communities in networks.pdf,该论文提出了一个基于假设检验的算法ESSC。导师说等我看明白之后就可以编程实现,我看了不到两周,然后试着用 Matlab 实现这个算法。

在实现过程中,我不单单是直接对着论文中的伪代码敲代码,还找了一个数据集作为假想敌。一边对照着伪代码,一边思考着如何才能保证代码在该数据集上跑起来不会有问题,这使我在实现该算法的过程中顺利了很多。

由于 UCI 网站上的数据集都是文本格式,所以我在得到在 Matlab 中比较方便的 .mat 格式遇到了一些困难。经过一番搜索,我把我寻找和得到数据集,再转换成可用格式的过程总结成了一篇博客:如何使用UCI数据集 - 菜鸟阿华

在第一个数据集上做了很多次实验之后,我跟导师反馈说实验效果一直都不是很好,导师建议我把数据进行一下归一化处理并且找一些其他的数据集实验。经过一番寻找,我找到了一个符合要求的数据集 Wine。当我打算用原来的方法得到可用格式数据时出现了一些问题,于是我查询了所使用函数 textread 的帮助文档 textread。原方法有一定问题,而且我忽略了Matlab提供的Note:

按照Matlab指示,我查看了 textscan 的帮助文档 textscan,学习了该函数的使用方法,对着 Matlab 提供的示例,一个一个敲出来观察实验结果。经过一番折腾,我终于得到了 Wine 数据集的可用格式,实现代码如下:

fileID = fopen('wine.data'); % 该数据文件需在当前目录下
C = textscan(fileID, '%f %f %f %f %f %f %f %f %f %f %f %f %f %f', 'delimiter', ','); % 返回cell格式的数据 %f个数为特征个数
fclose(fileID);
source_wine = cell2mat(C); % 将cell格式转换成mat格式
wine = source_wine(:, 2:14); % 第一列是类标签,去掉即可
save source_wine.mat source_wine; % 便于将来使用
save wine.mat wine; 

新方法看起来原方法简单多了吧!这里仍有值得注意的两点:1. Matlab中的cell是什么? 2. cell2mat方法如何使用。不过博主对于这两点还不太清楚,于是赶紧滚去查一些大牛的博客啦~~


顺便贴一下我实现的ESSC代码吧(程序中还有bug但一直找不到,/哭泣):

function [ c_number ] = ESSC(dist_matrix, alpha)
% ESSC : ESSC主函数
% 参数dist_matrix:数据集中两两之间的距离矩阵
% 参数dataset:整个数据集 类似iris数值型数据
% 参数alpha: 显著性水平阈值d = [1:size(dist_matrix, 1)]';      % vector 标识数据集中数据的index
v = d;                              % 提取一个社区后剩余的数据
c_number = 1;
proportion = 1/2;                   % 种子大小比例while c_number% 选取种子集合seedsetrandom = round(1 + (size(v, 1)-1)*rand);         % 产生1-size(v,1)随机数,四舍五入seed = v(random);                                % 种子为剩余数据v中的第random条数据seedset = [];                                    % 种子集合seedset_size = round(size(v, 1) * proportion);   % 确定种子集合的大小:每次剩余数据的1/2% 提取剩余数据集v中与seed数据距离最近的(seedset_size)条数据,距离最近的是seed本身if seedset_size ~= 0seed_dist_with_v = [v, dist_matrix(seed, v')'];seed_dist_with_v_sort = sortrows(seed_dist_with_v, 2); % 按第2列距离排序seedset = seed_dist_with_v_sort(1:seedset_size, 1);elseif seedset_size == 0seedset = [seed];end% Community-Searchb0 = seedset;                        % b0 第一次循环代表种子集合,之后代表上一次发现的社区b1 =  [];                            % 每次社区更新后的结果b_temp = b0;                         % 临时社区 第一次为b0while ~(isempty(setdiff(b0, b1)) && isempty(setdiff(b1, b0))) % b0不等于b1b0 = b1;                                   % b0代表上一次发现的社区 第一次为空集group1 = b_temp;                 % 得到group1group2 = setdiff(d, b_temp);     % 得到group2b_temp = [];                     % 临时社区置空% 对数据集d中的每一条数据i,计算数据i到两个group中每条数据的距离vectorgroup1_dist = [];group2_dist = [];pvalue = [[1:150]', ones(150,1)];for i = 1: size(d, 1)% 计算数据i到group1中每条数据的距离vectorgroup1_dist = dist_matrix(i, group1')';% 计算数据i到group2中每条数据的距离vectorgroup2_dist = dist_matrix(i, group2')';% 计算pvalueif(size(group1_dist, 1) ~= 0 && size(group2_dist, 1) ~= 0)pvalue(i, 2) = ranksum(group1_dist, group2_dist, 'tail', 'left');endend% pvalue排序和使用FDR校正pvalue_order = sortrows(pvalue, 2);for i = 1:size(pvalue_order, 1)if pvalue_order(i, 2) <= i*alpha/size(pvalue_order, 1)b_temp = [b_temp; pvalue_order(i, 1)];elseif pvalue_order(i, 2) > i*alpha/size(pvalue_order, 1)break;endendb1 = b_temp;end% 收集社区c0 = b0;           % Community_search返回的社区b0c = strcat('c', int2str(c_number)); %字符串c 代表第c_number个社区的名字eval([c, '=c0;']); % 把c0的值赋值给名字为字符串c的变量中if ~isempty(c0)save(strcat('community_', strcat(int2str(c_number), '.mat')), c);c_number = c_number + 1;v = setdiff(v, c0);if size(v, 1) == 0break;endelseif isempty(c0)break;endendc_number = c_number -1;  % 社区个数
save('background.mat', 'v');end

如何将UCI数据集转换成Matlab可用格式相关推荐

  1. SSD学习系列(二)LMDB概念以及将VOC数据集转换成LMDB格式

    LMDB概念 接上一篇,将SSDa caffen框架代码编译通过后y,接下来就可以利用其脚本将标注好的VOC格式数据集转换成LMDB格式,以便开始SSD模型训练. LMDB是Lightning Mem ...

  2. 如何将nb公式转换成matlab公式

    目录 1. 下载Mathematica软件 2. Mathematica教程 3. 将Mathematica中的nb文件转换成matlab文件 4. Mathematica导入matlab文件 5.利 ...

  3. 数据集转换成LMDB格式

    文章来源https://www.cnblogs.com/dengshunge/p/10841108.html略加修改和补充. 介绍两种LMDB格式数据集的生成,一种是自己的数据集,一种是下载wider ...

  4. INRIA数据集转换成VOC格式

    背景 下面的代码是将INRIA数据集转换成VOC格式.图片是614张. 其中,使用OinginImage文件夹里的Train中Pos和Annotations作为训练,利用Test里的Pos作为测试. ...

  5. TT100K数据集转换成coco格式,并重新划分

    TT100K数据集转换成coco格式,并重新划分 统计每个类别 import os import jsonos.makedirs('annotations',exist_ok=True) #存放数据的 ...

  6. 从搜狗获取行业词库并转换成jieba可用的词库文件

    从搜狗获取行业词库并转换成jieba可用的词库文件 从搜狗获取行业词库 利用网站在线转换 利用Django建立网站 从搜狗获取行业词库 搜狗官方的词库地址 下载下来后是.scel扩展名的文件 利用网站 ...

  7. 将pdf转换html_pdf文件怎么转换成html网页格式?用什么方法来转换?

    pdf转换成html已经是日常工作很常见的需求了,如果你还在手动转换,不仅耗时间而且又不准确这样我们的效率往往会最低,掌握快速将pdf文件转html网页的巧妙方法可以大大提高我们的工作效率这样我们就可 ...

  8. 将*.STL转换成顶点索引格式

    将*.STL转换成顶点索引格式 *.stl的格式很简单,某一个片断如下: solid ascii   facet normal 0.000000e+000 0.000000e+000 1.000000 ...

  9. 怎么把pdf转换为html,如何将PDF转换成HTML网页格式呢?

    原标题:如何将PDF转换成HTML网页格式呢? 现在很多在校程序学生们时常在思考怎么对HTML网页进行编译以呈现出想要展现的内容.但是HTML犹如我们外语学习一样,一个网页有很多的HTML文件,超文本 ...

  10. 怎么把avi文件转换成mp4视频格式,4个高能方法

    怎么把avi文件转换成mp4视频格式? 当您下载到avi格式的视频文件时,您可能会选择将其转换为MP4格式的文件. avi是一种由微软开发的多媒体容器格式,尽管现在已经被认为是老旧的技术,但由于其简单 ...

最新文章

  1. jquery-1.4.4.min.js无法解析json中result.data问题
  2. 中间件(1)分布式缓存
  3. ubuntu修改ssh服务的端口号
  4. Java和C++在细节上的差异(转)
  5. C#语言-NPOI.dll导入Excel功能的实现
  6. 最大值、数据排序、九九乘法表、杨辉三角
  7. BZOJ1233: [Usaco2009Open]干草堆tower
  8. 解决电脑右键新建没有文本文档的问题
  9. 原来javaeye变成iteye了
  10. 你知道3D打印SLA的优缺点吗?
  11. Mac下nginx配置虚拟主机,访问报错502
  12. 东方财富代码选股_教你选股!一招搞定!
  13. JavaFX中嵌入谷歌Chromium内核
  14. Vue 拦截器 多接口调用 实现唯一loding效果 解决同步接口调用loding闪动
  15. Android https证书过期,Android 的 HTTPS 证书过期异常
  16. vi打开文件提示Another program may be editing the same file
  17. Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling论文笔记
  18. 05LaTeX学习系列之---TeX的命令行操作
  19. Symantec赛门铁克强制型EV SSL服务器证书
  20. Paper之EfficientDet: 《Scalable and Efficient Object Detection—可扩展和高效的目标检测》的翻译及其解读

热门文章

  1. arch linux密码,Arch Linux root密码忘记了怎么办
  2. 如何批量转换图片格式为jpg?
  3. 计算机主机前耳机没声音,win7系统电脑前面耳机没声音怎么办
  4. html5 逐帧播放 代码,html5-video – 使用媒体源扩展进行逐帧解码
  5. UML课程大作业-网上书店系统
  6. 动态版简易通讯录制作
  7. java final修饰的数组_Java基于final修饰数据过程解析
  8. 计算机1级题库软件,计算机一级软件哪个好_计算机一级刷题软件_计算机一级试题软件...
  9. java freepascal_Free Pascal
  10. 中文输入纠错任务整理