X= [P(1,:,:);
P(2,:,:);
P(3,:,:)];
y= P(4:end,:);
indTrain = randperm(4798);
indTrain = indTrain(1:3838);
trainX= X(indTrain,:);
trainy = y(indTrain);
indTest = 3839:4798;
indTest(indTrain) = [];
testX = X(indTest,:);
testy = y(indTest);
它显示trainX= X(indTrain,:);
中的错误
任何人都可以澄清一下吗?谢谢。指数超出矩阵维度
顺便说一下,我有一个4x4798
数据,前3行用作预测变量,最后一行(4th row)
是我的回复。我将如何正确地将数据拆分为第一个3838 columns
作为我的训练集并保留为测试集。
谢谢.. !!
答案 0 :(得分:2)
要修复索引错误,您需要选择X
的列索引,而不是行索引:
trainX = X(:, indTrain );
您的P
矩阵似乎是4乘4798,而两个维度。因此,写P(1,:,:)
确实会选择第一行,但由于末尾有额外的P
,因此给出了:
三维度的印象。 不要那样做。这是一个坏习惯,使你的代码更难阅读/理解/调试。
X = P(1:3,:); % select all three rows at once
y = P(4,:); % no need for 4:end here - again, gives wrong impression as if you expect more than a single label per x.
此外,我不明白你想用indTest(indTrain)=[]
完成什么?您是否试图确定火车和测试装置是否相互排斥?
此行很可能会导致错误,因为测试集的大小为960且indTrain
包含1:3838(随机置换),因此您将再次出现“index exceeded ...”错误。
您已将indTrain
和indTest
定义为互斥,无需其他操作。如果您需要格外小心,可以使用setdiff
indTest = setdiff( indTest, indTrain );