【问题标题】:I couldn't understand how to make a k-fold cross validation test with multi-class SVM我不明白如何使用多类 SVM 进行 k 折交叉验证测试
【发布时间】:2015-03-31 06:03:34
【问题描述】:

我对 matlab 和 SVM 非常陌生,我正在从 strach http://bioinformatics.oxfordjournals.org/content/19/13/1656.full.pdf 复制这个实验

*他们说“在 SVM 的训练中,我们使用一对一的方法 其他人,或者一个人对其他人”。好吧,有 12 个班级,所以他们产生 12 个 SVM。他们训练每个班级都是正面的,而不是所有的休息。

*但随后他们说“预测性能已通过 5 折交叉验证测试进行了检查”

我的菜鸟问题是,他们如何在之后进行 k 折交叉验证!他们训练 SVM。我认为(可能有问题)是当你进行 k 折交叉验证时,你从头开始构建一个新的 svm。它们可能相似,但 svm 模型在每个循环中都不同。有 k 个不同的 svm 模型。但是,如果他们事先训练 svm 模型,他们如何进行交叉验证测试?我错过了什么?请帮忙,非常感谢您

【问题讨论】:

    标签: matlab validation svm cross-validation


    【解决方案1】:

    首先,他们生成经过交叉验证的数据集。然后他们训练 5 个模型(每个折叠一个)并反复训练测试。你可以这样做:

    % I assume use of LIBSVM for svm training-testing in this code snippet
    % Create a random data
    data=1+2*randn(1000,10);
    labels=randi(12,[1000,1]);
    
    %do 5-fold cross-validation
    ind=crossvalind('Kfold',labels,5);
    
    for i=1:5
        % (4/5)^th random data for training
        trainingData=data(ind~=5,:); %notice ~=
        trainingLabels=labels(ind~=5); 
    
        % (1/5)^th random data for testing
        testingData=data(ind==5,:); %notice ==
        testingLabels=labels(ind==5); 
    
       % train svm
        model{i,1}=svmtrain(trainingLabels,trainingData);
    
       %test svm
       [predLabels{i,1},accuracy(i,1)]=svmpredict(testingLabels,testingData,model{i,1});
    end
    
    % I think this is what they mean when they say, we analyze the performance
    % using 5 -fold cross validation
    
    % following two things is what you will report
    plot(accuracy);  %how accuracy varies over random selection of data
    avgAccuracy=mean(accuracy); %what is the average accuracy over 5 runs?
    

    【讨论】:

    • 首先,非常感谢。那么他们是否训练了两组不同的 svm,一组用于报告准确性,另一组用于实际执行分析?因为他们说“在 SVM 的训练中,我们使用一对一或一对一的方法”,因此 svm 集必须不同于循环中的 svm 模型以报告准确性。还是实际上是同一件事?这是否意味着,使用 k 折验证也采用 one vs rest 策略?
    • One vs rest 与 k 折验证不同。 One vs. rest 是训练多类 svm 的技术。该技术在内部 svmtrain 实现。所以要回答你的问题,>,答案是否定的。循环是在不同数据上“训练和测试”svm。确保您没有过度拟合您的 SVM,即它不会仅在一组数据上提供良好的输出。
    猜你喜欢
    • 2016-01-16
    • 2017-02-06
    • 1970-01-01
    • 2020-02-06
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多