2014-12-17 2 views
0

Есть ли способ, которым я могу запустить grid.py (из LIBSVM) в Matlab? Я делаю классификацию svm, и мне нужно выполнить поиск сетки для параметров C и g. В LIBSVM файл grid.py находит лучшие параметры. Однако это скрипт python, и я не знаю, как запустить его в Matlab. Есть ли другой способ предсказать наилучшее значение для параметров? Заранее спасибо.grid.py в Matlab LIBSVM

+1

Ну, вы только что сказали в своем вопросе, что нужно сделать: «выполнить сетку для поиска параметров C и g». Вы можете просто сделать это в Matlab: перебрать все пары (C, g) и подготовить свою модель для каждого из них и оптимизировать точность в [наборе данных проверки] (http://stats.stackexchange.com/questions/19048/ то, что-это-разностной-между-тест-набор-и-проверка-набор). Вы также можете использовать другие критерии оптимизации, используя [this] (http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/eval/index.html) расширение libsvm. Прочтите код grid.py, чтобы узнать, какие значения интервалов использовать для этих параметров. –

ответ

1

В MATLAB можно запустить код Python, хотя я никогда не делал этого сам. Я просмотрел его по той же причине, что и вы, и нашел, как сказал @ Михия Тодор, было бы проще написать собственную версию grid.py. Вот основной код, который я написал, чтобы сделать сетку-поиск и перекрестную проверку с использованием LIBSVM в MATLAB:

gamma=1; 
cost=1; 
J=10; 
K=12; 
kernal=2; %RBF 

besterr=[]; 
bestc=[]; 
bestg=[]; 
for j=1:J; 
    gamma=2^(2*(j-round(J/3))); %Calculates a nice spread of search numbers centred above zero 
    for k=1:K; 
     cost=2^(2*(k-round(K/3))); 
     err=svmtrain(y,x,sprintf('-s 4 -t %g -v 5 -c %g -g %g -q', kernal, cost, gamma)); %Nu-SVR change -s if you want SVC 
     if isempty(besterr)|err<besterr; 
      besterr=err; 
      bestc=cost; 
      bestg=gamma; 
     end 
    end 
end 
besterr=sqrt(besterr) %Prints the average RMSD of the 5-fold cross-validation 
bestg %Prints best gamma 
bestc %Prints best cost 

model=svmtrain(y,x,sprintf('-s 4 -t %g -c %g -g %g -q', kernal, bestc, bestg)); %Retrain using new c and g 

Предполагая, что вы сократили, разреженные х-данные это должны работать вне коробки.

Если вы хотите продолжить с grid.py и у вас есть 2014b, это могло бы стать полезным местом для начала работы: Call Python Libraries.

Если у вас нет 2014b или новее, то Call Python function from MATLAB.

Должны ли вы использовать любой из этих двух методов, чтобы написать свой собственный ответ на свой вопрос. Мне бы очень хотелось, чтобы они работали, и я уверен, что другие сочтут это очень полезным!