最优的支持向量机参数,但结果却非常不同?

SaschSasch 成员职位:23Maven
2019年11月编辑 帮助
你好,
我使用网格搜索参数优化器来确定我的SVM的最佳参数(C和gamma)。SVM嵌入在10倍验证中。
过程完成后,我得到参数集和性能为100(!)%。(见代码1)
代码1:

<?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 " / >
< /操作符>


.



.
.
> < /过程
< /操作符>


. .

> < /过程
< /操作符>
/> . .
.
.
.
.

> < /过程
< /操作符>
> < /过程
当我实际应用收到的参数时,我只得到52,05%。(见代码2)
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
标记:

答案

  • TonyLaingTonyLaing 成员职位:1贡献我
    我在决策树上运行网格优化时遇到了完全相同的问题,关于参数“分割的最小大小”,“最小叶大小”和“最大深度”。当我实际应用优化告诉我的最优参数值时,我的整体模型精度比优化器告诉我的精度低1%左右,如果我应用这些参数值的话。
  • SaschSasch 成员职位:23Maven
    嗨TonyLaing,
    你是否在与训练数据集不同的数据集上测试模型?->结果可能略有不同。

    请看这些帖子(它们是关于参数优化的):

    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
  • MariusHelfMariusHelf RapidMiner认证专家,会员职位:1869年独角兽
    嗨,测试集的性能与评估期间的性能略有不同是正常的——毕竟这两个值都只是估计值,特别是在小数据集上,统计波动可能会产生明显的影响。

    然而,100%的准确率是不寻常的。您的流程看起来很好,所以您应该查看一下数据:您使用了多少个示例进行优化?课程平衡吗?您是如何创建示例的?它与测试数据的分布相同吗?

    最好的,马吕斯
  • SaschSasch 成员职位:23Maven
    嗨,马吕斯,
    谢谢你抽出时间来帮我。

    -你的流程看起来很好
    哦,感谢上帝,第一个问题解决了,这对我帮助很大:)

    你用了多少个例子来进行优化?
    我有256个例子,每个类128个例子,这意味着类是完美平衡的。我还使用10倍验证来进行精度估计。

    -你是如何创建样本的?
    每个例子由5个特征和一个条件标签(消极/积极)组成。在我的例子中,所有的特征都来自心率数据(例如,平均值,std, RMSS等)。

    -它与你的测试数据来自相同的分布吗?
    = >是的。

    所以,当我把最优参数放在支持向量机中,然后用10倍val对相同的数据进行训练时,我只能得到52%的准确率(从我的角度来看,这个结果并没有反映“略有不同”这个术语:)

    我的问题不是100%的准确性,而是超过40%的致命下降……

    再次感谢,
    Sasch
  • MariusHelfMariusHelf RapidMiner认证专家,会员职位:1869年独角兽
    但是100%的准确性总是会让数据挖掘者产生一种怀疑;)

    这个值在10次折叠过程中没有留下太多波动的空间,但是,在第一个过程中精度的标准偏差是多少?

    你总共有多少数据?256个例子并不多,如果可能的话,你应该把它增加10倍。
  • SaschSasch 成员职位:23Maven
    -好吧,但是100%的准确性总是会在数据挖掘者的心中产生一种怀疑
    是的,我知道,如果你在生物信号数据上得到100%的结果,我们总是说“上帝生气了”;)

    256个例子不算多,如果可能的话,应该增加10倍
    我们谈论的是来自人类的生物信号数据。很难根据我们所考察的条件准确地得到这些特征。如果我们人为地增加例子,我们都会被我们的领导送进地狱。;)

    -该值在10次折叠期间没有留下太多波动空间,然而,在第一次过程中精度的标准偏差是多少?
    也许这有帮助:
    图像
    http://imageshack.us/photo/my-images/3/61745688.jpg
  • MariusHelfMariusHelf RapidMiner认证专家,会员职位:1869年独角兽
    您的数据包含哪些列?您是在训练Id属性还是其他什么东西?
    如果在测试集上运行优化会发生什么?
  • SaschSasch 成员职位:23Maven
    我使用ReadExcel-ImportWizard,只导入我需要的6列(5个特征列和1个标签列)。我不认为我不小心进口了什么东西,但我一定会检查的!
    你最后一个问题是什么意思?
    我的第二个代码在与第一个代码相同的数据集上使用最优参数运行。我以为10倍瓦尔就能解决剩下的问题?(分裂在测试和训练集等等..)
  • MariusHelfMariusHelf RapidMiner认证专家,会员职位:1869年独角兽
    好吧,如果您使用相同的数据集进行优化和测试,那么我的最后一个问题已经得到了回答。

    在如此小的数据集上,X-Validation创建的分割可能会产生很大的影响。尝试为所有x - validation设置相同的本地随机种子。这不会改善您的分析,但至少可以使结果具有可比性,如果流程设置正确,则应该使用相同的参数集获得完全相同的性能。
登录注册置评。