randperm或同时洗牌两个数据集

时间:2012-11-16 10:44:33

标签: matlab random permutation

我之前有一个问题here,我认为我遇到了一个问题,因为我无法同时对样本数据和样本数据(idx)的索引进行混洗。

我有一个名为fulldata的数据集,其中包含49,000行乘6列,然后我有另一个数据集,它是fulldata(Book2)的类标签,其中包含许多类标签,这些标签对应于中的确切行fulldata。

我只想从fulldata(normal。和smurf。)中挑选两个类标签,其中我想要750个普通行和250个smurf行。

然后我想随机抽取新的样本数据(1000x6)。

到目前为止已经得到了管理。但后来我被卡住了...... Dan帮助了上一个问题,但后来我注意到k1输出了Book2中的其他一些类标签,如海王星等等,不应该是这样的...... K1应该只包含smurf和普通类标签

我之所以这样问是因为我想在matlab中使用baysian分类器,为了使用它我需要:

Test_Data (unseen data)
Trainning_data (This is the sample data im trying to create above)
Target_class (this is the class labels that match exactly each row in sample data) 

3 个答案:

答案 0 :(得分:2)

我想你想要

idx = [smurfIdx(a);normIdx(p)];

然后确保使用上一个问题的@Dan建议,即

shuffle = randperm(1000);
sample = sample(shuffle,:);
K1 = Book2(idx (shuffle), :);

答案 1 :(得分:1)

问题的措辞有点模糊,所以不清楚你到底在哪里。但是,我已经冒昧地审查您之前的问题(thisthis),所以这是我尝试解决您的问题:

出于本答案的目的,我们首先生成一个随机数据集,类似于你的:

classes = {'normal.', 'smurf.', 'neptune.', 'eject.', 'portsweep.'};
fulldata = ceil(1e3 * rand(49000, 6));
Book2 = {classes{ceil(numel(classes) * rand(size(fulldata, 1), 1))}}';

让我们随机选择对应于“普通”标签的750行和对应于“smurf”标签的250行。但是,您应该创建一个随机索引向量并使用它来索引{{1} }和randperm数组,如下所示:

fulldata

Book2现在将随机索引保存到idxnormal = strmatch('normal.', Book2); % # Find normals idxnormal = idxnormal(randperm(numel(idxnormal))); % # Random shuffle of normals idxsmurf = strmatch('smurf.', Book2); % # Find smurfs idxsmurf = idxsmurf(randperm(numel(idxsmurf))); % # Random shuffle of smurfs idx = [idxnormal(1:750); idxsmurf(1:250)]; % # 750 normals and 250 smurfs idx = idx(randperm(numel(idx))); % # Random shuffle /'Book2',它们仅对应于“normal”或“smurf”标记。现在让我们使用相应的标签检索数据的子集:

idx

答案 2 :(得分:0)

在阅读完之前的问题后,我希望能够理解这个问题。如果我是对的,你只是忘了先过滤你的数据,只提取smurf和正常。

在这种情况下,您应该查看逻辑索引:http://www.mathworks.nl/company/newsletters/articles/Matrix-Indexing-in-MATLAB/matrix.html;jsessionid=97fa707e5059807b7ecae8969810

在绘制数据点之前使用它来提取正确的子集,你应该没问题。