LibSVM 预测精度
Posted
技术标签:
【中文标题】LibSVM 预测精度【英文标题】:LibSVM prediction accuracy 【发布时间】:2015-11-26 04:51:07 【问题描述】:我目前正在尝试运行 LibSVM
,位于:https://www.csie.ntu.edu.tw/~cjlin/libsvm
我只能访问 MATLAB 2011b。当我尝试使用不同的 C
和 gamma
值运行 LibSVM
包中包含的示例数据文件(heartscale)时,我得到了相同的准确度结果。
其他数据集也会发生这种情况。
我构建了一个 for
循环并循环遍历不同的 C
和 gamma
值,并且准确度百分比不会改变。
我这样做是为了找到最好的 C
和 gamma
用于数据集(交叉验证),如上述网站上的文档“支持向量分类的实用指南”中建议的那样。
当我查看我在下面构建的accuracy_mat
时,这些值都是相同的。甚至svmpredict
的输出也是一样的。
我已多次阅读文档并查看网站上的常见问题解答,并希望 SVM 从业者对此提供意见。
[heart_scale_label, heart_scale_inst] = libsvmread( 'heartscale' );
C = '2^-5','2^-3','2^-1';
g = '2^-15','2^-3','2^-1';
accuracy_mat = zeros( length( g ), length( c ) );
data_num = length( heart_scale_inst(:,1) );
t = zeros( data_num, 1 );
for i = 1:length( g )
for j = 1:length( C )
c_train_inputs = ['-c ', Cj];
g_train_inputs = ['-g ', gi];
c_and_g_inputs = [c_train_inputs, g_train_inputs];
model = svmtrain( heart_scale_label, ...
heart_scale_inst, ...
[c_and_g_inputs, '-b 1'] ...
);
[predict_label, ...
accuracy, ...
prob_estimates] = svmpredict( heart_scale_label, ...
heart_scale_inst, ...
model, ...
'-b 1' ...
);
accuracy_mat(i,j) = max( accuracy );
end
end
【问题讨论】:
【参考方案1】:
[C,gamma]
超参数的初始范围将您锁定在一个角落
支持向量方法是非常强大的引擎。
尽管如此,人们仍然可能通过糟糕的数据清理(正则化、NaN 删除等)或通过发送命令使用极端情况超参数 C
或 @987654324 来破坏他们出色的预测能力@。
在 SVM/SVC 引擎投入大量工作之前,如果计划运行蛮力超参数空间搜索(GridSearchCV
等),CPU/GPU 可能很容易花费数百以上几个小时,一个简单的经验法则应该用于搜索空间的预验证。
Andreas Mueller has put that nicely 首先扫描 SVM rbf
的(而预扫描的想法通常是有效的,不仅适用于 rbf
模型)在“经验法则”值范围内:
'C': np.logspace(-3, 2, 6), 'gamma': np.logspace(-3, 2, 6)
即除非你很确定(或被一些难以言喻的限制所禁止)
要仅使用您在[ C, gamma ]
- 搜索空间中预设的超低学习参数值,您可以允许放宽范围,以允许 SVM 学习器在距离它已锁定的观察角更远的地方前进到一些其他结果.
C = 0.001, 0.01, 0.1, 1.0, 10.0, 100.0
g = 0.001, 0.01, 0.1, 1.0, 10.0, 100.0
如果您没有看到 SVM 学习器结果在其超参数的沙盒预测试环境中的任何演变,那么根本原因将隐藏在 DataSET
中(这似乎不是情况下,当您发布观察结果时,同样的问题出现独立于正在审查的特定数据集)。
注意事项:也可以测试有关训练模型的描述性统计值:
model_predictions_accuracy_mean(i,j) = mean( accuracy );
model_predictions_accuracy_var( i,j) = var( accuracy );
accuracy_mat( i,j) = max( accuracy ); %% MAX masks
%% quality-of-fit
%% & may "look" same
%% for the whole range
【讨论】:
以上是关于LibSVM 预测精度的主要内容,如果未能解决你的问题,请参考以下文章