我之前有一个问题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)
答案 0 :(得分:2)
我想你想要
idx = [smurfIdx(a);normIdx(p)];
然后确保使用上一个问题的@Dan建议,即
shuffle = randperm(1000);
sample = sample(shuffle,:);
K1 = Book2(idx (shuffle), :);
答案 1 :(得分:1)
问题的措辞有点模糊,所以不清楚你到底在哪里。但是,我已经冒昧地审查您之前的问题(this和this),所以这是我尝试解决您的问题:
出于本答案的目的,我们首先生成一个随机数据集,类似于你的:
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
在绘制数据点之前使用它来提取正确的子集,你应该没问题。