【问题标题】:grid.py in Matlab LIBSVMMatlab LIBSVM 中的 grid.py
【发布时间】:2015-02-16 09:12:30
【问题描述】:

有没有办法可以在 Matlab 中运行 grid.py(来自 LIBSVM)?我正在做 svm 分类,我需要对参数 C 和 g 执行网格搜索。在 LIBSVM 中,文件 grid.py 找到了最好的参数。但是它是一个 python 脚本,我不知道如何在 Matlab 中运行它。 还有其他方法可以预测参数的最佳值吗?提前谢谢你。

【问题讨论】:

  • 好吧,你刚刚在你的问题中说需要做什么:“对参数 C 和 g 执行网格搜索”。您可以在 Matlab 中做到这一点:遍历所有 (C,g) 对并为每一对训练模型并优化 validation dataset 的准确性。您还可以使用this libsvm 扩展来定位其他优化标准。阅读 grid.py 代码,了解这些参数使用的区间值。

标签: python matlab libsvm


【解决方案1】:

虽然我自己从来没有做过,但可以在 MATLAB 中运行 python 代码。我出于与您自己相同的原因进行了调查,发现正如@Mihia Todor 所说,编写自己的grid.py版本会更容易。这是我编写的基本代码,用于在 MATLAB 中使用 LIBSVM 进行网格搜索和交叉验证:

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

假设您已经扩展了稀疏的 x 数据,这应该可以开箱即用。

如果您确实希望继续使用 grid.py 并拥有 2014b,这可能是一个有用的起点: Call Python Libraries.

如果您没有 2014b 或更新版本,请使用 Call Python function from MATLAB

如果您让这两种方法中的任何一种起作用,请写下您自己的问题答案。我很乐意看到它们工作,我相信其他人会发现它非常有用!

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 2015-04-12
    • 2013-05-14
    • 2016-07-24
    • 2012-07-09
    • 2014-08-01
    • 1970-01-01
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多