最优的支持向量机参数,但结果却非常不同?
你好,
我使用网格搜索参数优化器来确定我的SVM的最佳参数(C和gamma)。SVM嵌入在10倍验证中。
过程完成后,我得到参数集和性能为100(!)%。(见代码1)
代码1:
Code2:
这怎么可能?
还是我做错了什么?(顺便说一下:我的分类任务是二进制的,我的两个类是很好的平衡的,(128个训练向量,每个类5个特征))
提前谢谢你,
Sasch
我使用网格搜索参数优化器来确定我的SVM的最佳参数(C和gamma)。SVM嵌入在10倍验证中。
过程完成后,我得到参数集和性能为100(!)%。(见代码1)
代码1:
当我实际应用收到的参数时,我只得到52,05%。(见代码2)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<过程version = " 5.2.008 " >
> <上下文
<输入/ >
<输出/ >
<宏/ >
> < /上下文. .
<列出关键= "注释" >
< / >列表
<列出关键= " data_set_meta_data_information " >
/> .
< / >列表
< /操作符>
“参数”<列表键= >
<参数键= " SVM。γ“价值= " 0.000030517578125,0.00012207,0.000488281,0.001953125,0.0078125,0.03125,0.125,0.5,2,8 " / >
< / >列表
<列出关键= " class_weights " / >.
< /操作符>. .
> < /过程
<列出关键= " application_parameters " / >
< /操作符>
<列出关键= " class_weights " / >
< /操作符>. . .
> < /过程
< /操作符>. .
> < /过程
< /操作符>
/> .. . . . .
> < /过程
< /操作符>
> < /过程
Code2:
[上面的代码只显示了我的故障排除设置。]
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<过程version = " 5.2.008 " >
> <上下文
<输入/ >
<输出/ >
<宏/ >
> < /上下文. .
<列出关键= "注释" >
< / >列表
<列出关键= " data_set_meta_data_information " >
/> .
< / >列表
< /操作符>. .
<列出关键= " class_weights " / >.
< /操作符>. .
> < /过程
<列出关键= " application_parameters " / >
< /操作符>
<列出关键= " class_weights " / >
< /操作符>. . .
> < /过程
< /操作符>. .
> < /过程
< /操作符>
> < /过程
这怎么可能?
还是我做错了什么?(顺便说一下:我的分类任务是二进制的,我的两个类是很好的平衡的,(128个训练向量,每个类5个特征))
提前谢谢你,
Sasch
标记:
0
答案
你是否在与训练数据集不同的数据集上测试模型?->结果可能略有不同。
请看这些帖子(它们是关于参数优化的):
http://rapid-i.com/rapidforum/index.php/topic,4034.msg14915.html#msg14915
http://rapid-i.com/rapidforum/index.php/topic,4018.msg14881.html
也许他们能帮你解决问题…
Greetz,
Sasch
然而,100%的准确率是不寻常的。您的流程看起来很好,所以您应该查看一下数据:您使用了多少个示例进行优化?课程平衡吗?您是如何创建示例的?它与测试数据的分布相同吗?
最好的,马吕斯
谢谢你抽出时间来帮我。
-你的流程看起来很好
哦,感谢上帝,第一个问题解决了,这对我帮助很大
你用了多少个例子来进行优化?
我有256个例子,每个类128个例子,这意味着类是完美平衡的。我还使用10倍验证来进行精度估计。
-你是如何创建样本的?
每个例子由5个特征和一个条件标签(消极/积极)组成。在我的例子中,所有的特征都来自心率数据(例如,平均值,std, RMSS等)。
-它与你的测试数据来自相同的分布吗?
= >是的。
所以,当我把最优参数放在支持向量机中,然后用10倍val对相同的数据进行训练时,我只能得到52%的准确率(从我的角度来看,这个结果并没有反映“略有不同”这个术语)
我的问题不是100%的准确性,而是超过40%的致命下降……
再次感谢,
Sasch
这个值在10次折叠过程中没有留下太多波动的空间,但是,在第一个过程中精度的标准偏差是多少?
你总共有多少数据?256个例子并不多,如果可能的话,你应该把它增加10倍。
是的,我知道,如果你在生物信号数据上得到100%的结果,我们总是说“上帝生气了”
256个例子不算多,如果可能的话,应该增加10倍
我们谈论的是来自人类的生物信号数据。很难根据我们所考察的条件准确地得到这些特征。如果我们人为地增加例子,我们都会被我们的领导送进地狱。
-该值在10次折叠期间没有留下太多波动空间,然而,在第一次过程中精度的标准偏差是多少?
也许这有帮助:
http://imageshack.us/photo/my-images/3/61745688.jpg
如果在测试集上运行优化会发生什么?
你最后一个问题是什么意思?
我的第二个代码在与第一个代码相同的数据集上使用最优参数运行。我以为10倍瓦尔就能解决剩下的问题?(分裂在测试和训练集等等..)
在如此小的数据集上,X-Validation创建的分割可能会产生很大的影响。尝试为所有x - validation设置相同的本地随机种子。这不会改善您的分析,但至少可以使结果具有可比性,如果流程设置正确,则应该使用相同的参数集获得完全相同的性能。