Matlab:如何将数据矩阵随机分成两个子集的列向量,同时保留标签信息?

5
我有一个数据矩阵 X(60x208)和一个标签矩阵 Y(1x208)。我想将数据矩阵 X 分成两个随机的列向量子集:训练集(占数据的70%)和测试集(占数据的30%),但我仍然需要能够确定 Y 中的哪个标签对应于每个列向量。我找不到任何函数来完成此操作,有什么想法吗?
编辑:我觉得我应该补充一下,Y 中只有两个标签:1和2(不确定是否有影响)。

Y 中,那些 12 代表什么意思? - Divakar
只是不同的标签。想法是用不同的颜色绘制它们,即所有的1都是红色的,2都是蓝色的。 - user3457834
@Divakar - 这很可能是一个机器学习问题,其中您拥有带有分类标签的训练数据,每个数据点都分配了一个标签。这是一种监督算法,您提供一个数据点,系统应该将该数据点分类为属于特定标签。训练数据用于训练系统,以确保数据被分类到相应的标签。测试集用于衡量准确性,以查看经过训练的系统是否可以根据其从未见过的输入准确地对数据进行分类...因此是一个测试集。 - rayryeng
@rayryeng - 就是这样,感谢你的所有帮助! - user3457834
@user3457834 - 我很高兴能帮忙!祝你好运! - rayryeng
1
@rayryeng 感谢您抽出时间分享这些信息! - Divakar
1个回答

9
这很容易做到。使用randperm生成从1到208的随机排列索引,其中208是您的数据点数。
一旦生成了这个序列,只需将其用于XY中进行子集操作,以提取训练和测试数据及标签。因此,可以像这样操作:
num_points = size(X,2);
split_point = round(num_points*0.7);
seq = randperm(num_points);
X_train = X(:,seq(1:split_point));
Y_train = Y(seq(1:split_point));
X_test = X(:,seq(split_point+1:end));
Y_test = Y(seq(split_point+1:end));

“split_point”决定了我们需要将多少个点放入我们的训练集中,如果这个计算结果有小数点的话,我们需要把它四舍五入。我也没有在程序中硬编码“208”,因为你的数据集可能会增长,所以这个程序可以适用于任何大小的数据集。 “X_train”和“Y_train”将包含您的训练集数据和标签,而“X_test”和“Y_test”将包含您的测试集数据和标签。
因此,“X_train”的第一列是您的训练集中第一个元素的数据点,而“Y_train”的第一个元素则作为该特定点的标签... 依此类推!

1
我也是这个想法!+1 - Divakar
@Divakar - 谢谢 :) 不好意思,不过我比你先完成了! - rayryeng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接