2

我正在尝试使用带有 libsvm 库的 SVM-RFE 在基因表达数据集上运行。我的算法是用 Matlab 编写的。特定数据集能够在 5 倍 CV 下产生 80++% 的分类准确率,而无需应用特征选择。当我尝试在这个数据集上应用 svm-rfe 时(相同的 svm 参数设置并使用 5 倍 CV),分类结果变得更糟,只能达到 60++% 的分类准确率。

这是我的 matlab 编码,如果有人能阐明我的代码有什么问题,不胜感激。先感谢您。

[label, data] = libsvmread('libsvm_data.scale');
[N D] = size(data);

numfold=5; 
indices = crossvalind ('Kfold',label, numfold);
cp = classperf(label);

for i= 1:numfold

disp(strcat('Fold-',int2str(i)));
testix = (indices == i); trainix = ~testix;
test_data = data(testix,:);  test_label = label(testix);
train_data = data(trainix,:); train_label = label(trainix);

model = svmtrain(train_label, train_data, sprintf('-s 0 -t 0);    %'

s = 1:D;
r = [];
iter = 1;

    while ~isempty(s)

    X = train_data(:,s);

    fs_model = svmtrain(train_label, X, sprintf('-s 0 -t %f -c %f -g %f -b 1', kernel, cost, gamma));

    w = fs_model.SVs' * fs_model.sv_coef;    %'
    c = w.^2;
    [c_minvalue, f] = min(c);
    r = [s(f),r];
   ind = [1:f-1, f+1:length(s)];
    s = s(ind);

    iter = iter + 1;
    end

    predefined = 100;
   important_feat = r(:,D-predefined+1:end);

    for l=1:length(important_feat)
        testdata(:,l) = test_data (:,important_feat(l));
    end


 [predict_label_itest, accuracy_itest, prob_values] = svmpredict(test_label, testdata, model,'-b 1'); 
acc_itest_fs (:,i) = accuracy_itest(1);

  clear testdata;
end

Mean_itest_fs = mean((acc_itest_fs),2);
Mean_bac_fs = mean (bac_fs,2);  
4

1 回答 1

0

将 RFE 应用于训练数据后,您将获得训练数据的子集。所以当你使用 traindata 训练一个模型时,我认为你应该使用 traindata 的子集来训练这个模型。

于 2016-05-18T11:12:38.783 回答