我有两条数据。一个是实际fulldata
,它是49625x6数值数据的数据集,另一个是具有名为Book2
的target_class为49625x1的数据的索引。
Book2有六个名称(字符串)一遍又一遍地重复以匹配全数据集数据条目。我想从全数据中获取1000个样本,其中1000个样本中的25%是“蓝色”,75%是使用Book2的“红色”,然后将其包含在名为sampledata
的新子样本中。
如何在MATLAB中实现这一目标?
伪代码:
从Book2中选择250个蓝色样本,不知道如何“选择”250个随机“蓝色”样本
bluesample = indX(Book2, :)
或Book2(indX, :)
不确定。
从Book2中选择750个红色样本,再次不确定如何“选择”750个随机“红色”样本
redsample = indX(Book2, ;)
或Book2(indX, :)
再次不确定。
将蓝色和红色样本合并为子样本。
subsample = join(bluesample, redsample)
查找子样本的索引并从fulldata创建samplesata:
sampledata = subsample(indX(fulldata), :) This line is probably wrong
这是两个数据集的图像:
Book2中的每一行都与fulldata中的行匹配。我试图通过Book2选择一定数量的“正常”和一定数量的“不正常”(是的,我知道它们没有被恰当地命名)数据来自fulldata,因为Book2是全数和包含类标签。
因此,就我的数据集而言,这可能更容易说:
Choose 250 random samples of the string "normal." from Book2 and log the row number.
Choose 750 random samples of the string "not normal." from Book2 and log the row number.
Combine the two random samples of row numbers together.
Make a new dataset (1000x6) using the combined row numbers (above) of fulldata.
答案 0 :(得分:1)
使用strmatch提取'普通'记录:
normIdx = strmatch('normal.', Book2);
normalSubset = fulldata(normIdx, :);
然后生成250个随机非重复整数的列表,我用google搜索“非重复随机整数的matlab列表”和the first result:
p = randperm(size(normalSubset , 1));
p = p(1:250)-1;
现在要获得250个随机选择的正常记录
normalSample = normalSubset (p, :);
normalSample
将是250 x 6.现在对“不正常”做同样的事情。获得notNormalSample
(750 x 6)然后合并然后获得
sample = [normalSample ; notNormalSample ]
所以在sample
中所有法线都会出现在非法线之前,如果你想将它们混合起来,请再次使用randperm()
:
sample = sample(randperm(1000), :);