Matlab 将置换数据放入LibSVM预计算内核

Matlab 将置换数据放入LibSVM预计算内核,matlab,kernel,permutation,libsvm,Matlab,Kernel,Permutation,Libsvm,我现在正在做非常简单的SVM分类。我在LibSVM中使用了一个预计算内核,并使用了RBF和DTW 当我计算相似核矩阵时,一切似乎都很好。。。直到我排列我的数据,在我计算内核矩阵之前 支持向量机当然对输入数据的排列是不变的。在下面的Matlab代码中,标有“的行在清理代码并让我的同事查看后,我们/他最终发现了错误。当然,我必须从训练和测试样本计算测试矩阵,让SVM通过使用训练向量的alpha值乘积的和来预测测试数据。对于非支持向量,它们为零。希望这能为你们中的任何人澄清问题。为了更清楚,请参阅下面

我现在正在做非常简单的SVM分类。我在LibSVM中使用了一个预计算内核,并使用了RBF和DTW

当我计算相似核矩阵时,一切似乎都很好。。。直到我排列我的数据,在我计算内核矩阵之前


支持向量机当然对输入数据的排列是不变的。在下面的Matlab代码中,标有“的行在清理代码并让我的同事查看后,我们/他最终发现了错误。当然,我必须从训练和测试样本计算测试矩阵,让SVM通过使用训练向量的alpha值乘积的和来预测测试数据。对于非支持向量,它们为零。希望这能为你们中的任何人澄清问题。为了更清楚,请参阅下面我修改的代码。但是,例如,在中,有一个敏锐的眼睛也可以看到测试矩阵与训练和测试向量的计算。如果您有任何进一步的评论/问题/提示,请随时发表评论或/和回答

function [tacc, testacc, mdl, SimilarityMatrixTrain, SimilarityMatrixTest, trainLabels, testLabels] = computeSimilarityMatrix(dirName)
fileList = getAllFiles(dirName);
fileList = fileList(1:72);
trainLabels = [];
testLabels = [];
trainFiles = {};
testFiles = {};   
n = 0;
sigma = 0.01;

trainFiles = fileList(1:2:end);
testFiles = fileList(2:5:end);

noTrain = size(trainFiles);
noTest = size(testFiles);

permTrain = randperm(noTrain(1));
permTest = randperm(noTest(1));

trainFiles = trainFiles(permTrain);
testFiles = testFiles(permTest);

%Train
for i = 1 : noTrain(1)
    x = csvread(trainFiles{i});
    label = x(1);
    trainlabel = label;
    trainLabels = [trainLabels, label];
    for j = 1 : noTrain(1)
        y = csvread(trainFiles{j});
        dtwDistance = dtwWrapper(x(2:end), y(2:end));
        rbfValue = exp((dtwDistance.^2)./(-2*sigma.^2));
        SimilarityMatrixTrain(i, j) = rbfValue;
    end
end

SimilarityMatrixTrain = [(1:size(SimilarityMatrixTrain, 1))', SimilarityMatrixTrain];

%Test
for i = 1 : noTest(1)
    x = csvread(testFiles{i});
    label = x(1);
    testlabel = label;
    testLabels = [testLabels, label];
    for j = 1 : noTrain(1)
        y = csvread(trainFiles{j});     
        dtwDistance = dtwWrapper(x(2:end), y(2:end));
        rbfValue = exp((dtwDistance.^2)./(-2*sigma.^2));
        SimilarityMatrixTest(i, j) = rbfValue;

    end
end

SimilarityMatrixTest = [(1:size(SimilarityMatrixTest, 1))', SimilarityMatrixTest];

mdlU = svmtrain(trainLabels', SimilarityMatrixTrain, '-t 4 -c 1000 -q');
fprintf('TEST: '); [pclassU, xU, yU] = svmpredict(testLabels', SimilarityMatrixTest, mdlU);
fprintf('TRAIN: ');[pclassT, xT, yT] = svmpredict(trainLabels', SimilarityMatrixTrain, mdlU);

tacc = xT(1);
testacc = xU(1);
mdl = mdlU;

end
问候
本杰明

嗯,我不知道stackoverflow是否适合我的问题,所以我决定也在stats.stackexchange.com上发布这篇文章。请随意回答我的问题。亲爱的版主:如果这对你不合适,请随意删除我的帖子。非常感谢你!
function [tacc, testacc, mdl, SimilarityMatrixTrain, SimilarityMatrixTest, trainLabels, testLabels] = computeSimilarityMatrix(dirName)
fileList = getAllFiles(dirName);
fileList = fileList(1:72);
trainLabels = [];
testLabels = [];
trainFiles = {};
testFiles = {};   
n = 0;
sigma = 0.01;

trainFiles = fileList(1:2:end);
testFiles = fileList(2:5:end);

noTrain = size(trainFiles);
noTest = size(testFiles);

permTrain = randperm(noTrain(1));
permTest = randperm(noTest(1));

trainFiles = trainFiles(permTrain);
testFiles = testFiles(permTest);

%Train
for i = 1 : noTrain(1)
    x = csvread(trainFiles{i});
    label = x(1);
    trainlabel = label;
    trainLabels = [trainLabels, label];
    for j = 1 : noTrain(1)
        y = csvread(trainFiles{j});
        dtwDistance = dtwWrapper(x(2:end), y(2:end));
        rbfValue = exp((dtwDistance.^2)./(-2*sigma.^2));
        SimilarityMatrixTrain(i, j) = rbfValue;
    end
end

SimilarityMatrixTrain = [(1:size(SimilarityMatrixTrain, 1))', SimilarityMatrixTrain];

%Test
for i = 1 : noTest(1)
    x = csvread(testFiles{i});
    label = x(1);
    testlabel = label;
    testLabels = [testLabels, label];
    for j = 1 : noTrain(1)
        y = csvread(trainFiles{j});     
        dtwDistance = dtwWrapper(x(2:end), y(2:end));
        rbfValue = exp((dtwDistance.^2)./(-2*sigma.^2));
        SimilarityMatrixTest(i, j) = rbfValue;

    end
end

SimilarityMatrixTest = [(1:size(SimilarityMatrixTest, 1))', SimilarityMatrixTest];

mdlU = svmtrain(trainLabels', SimilarityMatrixTrain, '-t 4 -c 1000 -q');
fprintf('TEST: '); [pclassU, xU, yU] = svmpredict(testLabels', SimilarityMatrixTest, mdlU);
fprintf('TRAIN: ');[pclassT, xT, yT] = svmpredict(trainLabels', SimilarityMatrixTrain, mdlU);

tacc = xT(1);
testacc = xU(1);
mdl = mdlU;

end