日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

如何将UCI数据集转换成Matlab可用格式

發(fā)布時(shí)間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何将UCI数据集转换成Matlab可用格式 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在開(kāi)始學(xué)習(xí)機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的過(guò)程中,我的導(dǎo)師讓我看了一篇關(guān)于聚類的論文 A testing based extraction algorithm for identifying significant communities in networks.pdf,該論文提出了一個(gè)基于假設(shè)檢驗(yàn)的算法ESSC。導(dǎo)師說(shuō)等我看明白之后就可以編程實(shí)現(xiàn),我看了不到兩周,然后試著用 Matlab 實(shí)現(xiàn)這個(gè)算法。

在實(shí)現(xiàn)過(guò)程中,我不單單是直接對(duì)著論文中的偽代碼敲代碼,還找了一個(gè)數(shù)據(jù)集作為假想敵。一邊對(duì)照著偽代碼,一邊思考著如何才能保證代碼在該數(shù)據(jù)集上跑起來(lái)不會(huì)有問(wèn)題,這使我在實(shí)現(xiàn)該算法的過(guò)程中順利了很多。

由于 UCI 網(wǎng)站上的數(shù)據(jù)集都是文本格式,所以我在得到在 Matlab 中比較方便的 .mat 格式遇到了一些困難。經(jīng)過(guò)一番搜索,我把我尋找和得到數(shù)據(jù)集,再轉(zhuǎn)換成可用格式的過(guò)程總結(jié)成了一篇博客:如何使用UCI數(shù)據(jù)集 - 菜鳥(niǎo)阿華

在第一個(gè)數(shù)據(jù)集上做了很多次實(shí)驗(yàn)之后,我跟導(dǎo)師反饋說(shuō)實(shí)驗(yàn)效果一直都不是很好,導(dǎo)師建議我把數(shù)據(jù)進(jìn)行一下歸一化處理并且找一些其他的數(shù)據(jù)集實(shí)驗(yàn)。經(jīng)過(guò)一番尋找,我找到了一個(gè)符合要求的數(shù)據(jù)集 Wine。當(dāng)我打算用原來(lái)的方法得到可用格式數(shù)據(jù)時(shí)出現(xiàn)了一些問(wèn)題,于是我查詢了所使用函數(shù) textread 的幫助文檔 textread。原方法有一定問(wèn)題,而且我忽略了Matlab提供的Note:

按照Matlab指示,我查看了 textscan 的幫助文檔 textscan,學(xué)習(xí)了該函數(shù)的使用方法,對(duì)著 Matlab 提供的示例,一個(gè)一個(gè)敲出來(lái)觀察實(shí)驗(yàn)結(jié)果。經(jīng)過(guò)一番折騰,我終于得到了 Wine 數(shù)據(jù)集的可用格式,實(shí)現(xiàn)代碼如下:

fileID = fopen('wine.data'); % 該數(shù)據(jù)文件需在當(dāng)前目錄下 C = textscan(fileID, '%f %f %f %f %f %f %f %f %f %f %f %f %f %f', 'delimiter', ','); % 返回cell格式的數(shù)據(jù) %f個(gè)數(shù)為特征個(gè)數(shù) fclose(fileID); source_wine = cell2mat(C); % 將cell格式轉(zhuǎn)換成mat格式 wine = source_wine(:, 2:14); % 第一列是類標(biāo)簽,去掉即可 save source_wine.mat source_wine; % 便于將來(lái)使用 save wine.mat wine;

新方法看起來(lái)原方法簡(jiǎn)單多了吧!這里仍有值得注意的兩點(diǎn):1. Matlab中的cell是什么? 2. cell2mat方法如何使用。不過(guò)博主對(duì)于這兩點(diǎn)還不太清楚,于是趕緊滾去查一些大牛的博客啦~~


順便貼一下我實(shí)現(xiàn)的ESSC代碼吧(程序中還有bug但一直找不到,/哭泣):

function [ c_number ] = ESSC(dist_matrix, alpha) % ESSC : ESSC主函數(shù) % 參數(shù)dist_matrix:數(shù)據(jù)集中兩兩之間的距離矩陣 % 參數(shù)dataset:整個(gè)數(shù)據(jù)集 類似iris數(shù)值型數(shù)據(jù) % 參數(shù)alpha: 顯著性水平閾值d = [1:size(dist_matrix, 1)]'; % vector 標(biāo)識(shí)數(shù)據(jù)集中數(shù)據(jù)的index v = d; % 提取一個(gè)社區(qū)后剩余的數(shù)據(jù) c_number = 1; proportion = 1/2; % 種子大小比例while c_number% 選取種子集合seedsetrandom = round(1 + (size(v, 1)-1)*rand); % 產(chǎn)生1-size(v,1)隨機(jī)數(shù),四舍五入seed = v(random); % 種子為剩余數(shù)據(jù)v中的第random條數(shù)據(jù)seedset = []; % 種子集合seedset_size = round(size(v, 1) * proportion); % 確定種子集合的大小:每次剩余數(shù)據(jù)的1/2% 提取剩余數(shù)據(jù)集v中與seed數(shù)據(jù)距離最近的(seedset_size)條數(shù)據(jù),距離最近的是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 第一次循環(huán)代表種子集合,之后代表上一次發(fā)現(xiàn)的社區(qū)b1 = []; % 每次社區(qū)更新后的結(jié)果b_temp = b0; % 臨時(shí)社區(qū) 第一次為b0while ~(isempty(setdiff(b0, b1)) && isempty(setdiff(b1, b0))) % b0不等于b1b0 = b1; % b0代表上一次發(fā)現(xiàn)的社區(qū) 第一次為空集group1 = b_temp; % 得到group1group2 = setdiff(d, b_temp); % 得到group2b_temp = []; % 臨時(shí)社區(qū)置空% 對(duì)數(shù)據(jù)集d中的每一條數(shù)據(jù)i,計(jì)算數(shù)據(jù)i到兩個(gè)group中每條數(shù)據(jù)的距離vectorgroup1_dist = [];group2_dist = [];pvalue = [[1:150]', ones(150,1)];for i = 1: size(d, 1)% 計(jì)算數(shù)據(jù)i到group1中每條數(shù)據(jù)的距離vectorgroup1_dist = dist_matrix(i, group1')';% 計(jì)算數(shù)據(jù)i到group2中每條數(shù)據(jù)的距離vectorgroup2_dist = dist_matrix(i, group2')';% 計(jì)算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% 收集社區(qū)c0 = b0; % Community_search返回的社區(qū)b0c = strcat('c', int2str(c_number)); %字符串c 代表第c_number個(gè)社區(qū)的名字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; % 社區(qū)個(gè)數(shù) save('background.mat', 'v');end

總結(jié)

以上是生活随笔為你收集整理的如何将UCI数据集转换成Matlab可用格式的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。