2014-11-11 1 views
0

Я использую libsvm для классификации. Я использую кросс-проверку для настройки параметров C и гаммы. Нет. наблюдений, которые я использую для перекрестной проверки, составляет около 6000 ~ 7000. Но Matlab занимает огромное время, чтобы настроить параметры. Это из-за размера набора данных или мне нужно оптимизировать код?Как оптимизировать перекрестку для libsvm matlab?

Пример кода:

[labels,data] = libsvmread('newwndwlibfeatures.txt'); 

labels_stem=labels(labels==1); 
feature_stem=data(labels==1,:); 
labels_nostem=labels(labels~=1); 
feature_nostem=data(labels~=1,:); 
L=randperm(length(labels_nostem)); 
labels_nostem=labels_nostem(L); 
feature_nostem=feature_nostem(L,:); 
labelscv=[labels_stem; labels_nostem(1:round(.05*length(labels_nostem)))]; 
featurecv=[feature_stem; feature_nostem(1:round(.05*length(labels_nostem)),:)]; 
weight=[length(labels_stem)/(length(labels_stem)+round(.05*length(labels_nostem))) ... 
     round(.05*length(labels_nostem))/(length(labels_stem)+round(.05*length(labels_nostem)))]; 

[C,gamma] = meshgrid(-15:1:10, -15:1:6); 
% 
folds=5; 
%# grid search, and cross-validation 
cv_acc = zeros(numel(C),1); 

for i=1:numel(C) 
    cv_acc(i) = svmtrain(labelscv, featurecv, ... 
        sprintf('-c %f -g %f -h 0 -v %d -w0 %d -w1 %d', 2^C(i), 2^gamma(i), folds,weight)); 
end 

ответ

0

Ваш размер набора данных не является проблемой. Вы строго искали пространство из 525 возможностей 5 раз. Если каждая смена занимает несколько секунд, вы смотрите на часы, чтобы закончить. (25 строк * 21 столбец 5 folds 2 секунды/60 секунд) Я хотел бы использовать более разумный метод оптимизации, чем просто проверять каждую комбинацию.

Также, если я правильно помню: когда я сделал свой тезис, я столкнулся с той же проблемой, и некоторые из значений C сделали тренировку экспоненциально длиннее.