使用交叉验证的支持向量机分类

3
我刚开始使用Matlab,试图按照生物信息学工具箱文档(SVM分类与交叉验证)中的示例处理分类问题。
然而,我无法理解第9步,它说:
设置一个函数,输入z=[rbf_sigma,boxconstraint],并返回exp(z)的交叉验证值。 之所以采用exp(z)的原因有两个: rbf_sigma和boxconstraint必须为正。 您应该查看大致指数间隔的点。 此函数处理在参数处的交叉验证。
exp([rbf_sigma,boxconstraint]):
minfn = @(z)crossval('mcr',cdata,grp,'Predfun', ...
    @(xtrain,ytrain,xtest)crossfun(xtrain,ytrain,...
    xtest,exp(z(1)),exp(z(2))),'partition',c);

我应该在这里实现什么函数?是exp还是minfn?如果您能为我提供此部分的代码,我将不胜感激。谢谢。

2个回答

3
我想知道当exp([rbf_sigma,boxconstraint])被提到时意味着什么。
1. rbf_sigma: SVM使用一个高斯核,rbf_sigma设置了核的标准偏差(~大小)。为了理解核函数的工作原理,SVM将核函数放置在每个样本周围(这样你就有了每个样本周围的高斯函数)。然后对于每种类别/类型的样本,将核函数求和。在每个点上,总和更高的类别将成为“赢家”。例如,如果类型A在点X处的这些核函数的总和更高,则如果您有新的数据要在点X分类,则会将其分类为类型A。(还有其他配置参数可能会改变选择一种类别而不是另一种类别的实际阈值)
2. boxconstraint: 这是一个对被错误分类的数据进行检测的代价/惩罚。在分类器的训练阶段中,您使用训练数据来调整SVM参数,训练算法使用一个误差函数以决定如何通过迭代方式优化SVM参数。误分类样本的代价与它离正确分类边界的距离成正比。在我附加的图中,边界是内部蓝色圆周。
请看这张图片了解更多信息,通过将红色样本的高斯核“sumA”和绿色样本的高斯核“sumB”相加,您可以看到在图像中心部分sumA>sumB是合理的。同样,在图像的外部部分sumB>sumA也是合理的。
请注意BGreene的指示并结合我对该教程的理解。
  1. 在教程中,他们建议尝试指数级别差异的rbf_sigma和boxconstraint的值。这意味着您应该比较像{0.2、2、20,...}这样的值(注意这是{i=1,2,3,...,2*10^(i-2)}),而不是像{0.2、0.3、0.4、0.5}这样的线性差异的值。他们建议首先尝试广泛的值范围。之后您可以通过第一次获得的最优解来进一步优化。
  2. 命令"[searchmin fval] = fminsearch(minfn,randn(2,1),opts)"将为您提供rbf_sigma和boxconstraint的最优值。可能需要使用exp(z),因为它会影响fminsearch在搜索最优值期间如何增加z(1)和z(2)的值。我认为当您在@minfn的定义中放置exp(z(1))时,fminsearch会采取“指数”大的步骤。
  3. 在机器学习中,始终要明白您的数据中有三个子集:训练数据、交叉验证数据和测试数据。训练集用于针对每个rbf_sigma和boxconstraint值来优化SVM分类器的参数。然后,交叉验证集用于选择参数rbf_sigma和boxconstraint的最佳值。最后测试数据用于了解分类器的性能(分类器的效率是根据测试集确定的)。
  4. 因此,如果您从10000个样本开始,可以将数据分为训练(50%)、交叉验证(25%)和测试(25%)。这意味着您将随机对5000个样本进行训练集采样,然后从剩余的5000个样本中抽取2500个样本作为交叉验证集,剩下的样本(即2500个)则用于测试集。

希望我能够澄清您的疑问。顺便说一下,如果您对分类器和机器学习算法参数的优化感兴趣,我强烈建议您参加这门免费课程 ->www.ml-class.org(它真的很棒)。


2
您需要实现一个名为crossfun的函数(请参见示例)。将函数句柄minfn传递给fminsearch以进行最小化。要优化的量是exp([rbf_sigma,boxconstraint]),以最小化分类错误。
此函数句柄中有许多嵌套的函数: - crossval根据分区c使用交叉验证产生分类错误。 - crossfun - 使用SVM对数据进行分类 - fminsearch - 优化SVM超参数以最小化分类错误
希望这可以帮助您。

我想了解当exp([rbf_sigma,boxconstraint])被提及时,它是什么意思? - Wee
1
这意味着对向量取指数,如果rbf_sigma=2且boxconstraint=1,则z = [2 1];exp(z) = [7.3891 2.7183]。 - BGreene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接