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?如果您能给我本节的代码,我将不胜感激。谢谢。

4

2 回答 2

3

我想知道它说 exp([rbf_sigma,boxconstraint]) 是什么意思

  1. rbf_sigma:支持向量机使用高斯内核,rbf_sigma 设置内核的标准偏差(~size)。为了理解内核是如何工作的,SVM 将内核放在每个样本周围(这样每个样本周围都有一个高斯分布)。然后为每个类别/类型的样本添加(求和)内核。在每一点上,总和较高的类型将是“赢家”。例如,如果类型 A 在点 X 处这些内核的总和较高,那么如果您在点 X 有一个新的数据要分类,它将被分类为类型 A。(还有其他配置参数可能会改变实际阈值,其中选择了一个类别而不是另一个类别)

您可以通过将红色样本上的高斯核相加来了解如何

图。从你给我们的网页分析这个图。您可以通过将红色样本“sumA”和绿色样本“sumB”上的高斯核相加来了解如何;在图的中心部分,sumA>sumB 是合乎逻辑的。在图像的外部,sumB>sumA 也是合乎逻辑的。

  1. boxconstraint:这是对未分类数据的成本/惩罚。在分类器的训练阶段,您使用训练数据来调整 SVM 参数,训练算法使用误差函数来决定如何以迭代方式优化 SVM 参数。错误分类样本的成本与它离正确分类的边界的距离成正比。在我附上边界的图中是内蓝色圆周。

考虑到 BGreene 的指示以及我对本教程的理解:

  1. 在本教程中,他们建议尝试以指数方式分开的 rbf_sigma 和 boxconstraint 的值。这意味着您应该比较像 {0.2, 2, 20, ...} 之类的值(注意这是 {2*10^(i-2), i=1,2,3,...}),并且不像 {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) 的值。我想当您将 exp(z(1)) 放入 @minfn 的定义中时,fminsearch 将采取“指数”的大步骤。
  3. 在机器学习中,始终尝试理解数据中存在三个子集:训练数据、交叉验证数据和测试数据。训练集用于针对 rbf_sigma 和 boxconstraint 的 EACH 值优化 SVM 分类器的参数。然后使用交叉验证集来选择参数rbf_sigma和boxconstraint的最优值。最后使用测试数据来了解分类器的性能(分类器的效率取决于测试集)。
  4. 因此,如果您从 10000 个样本开始,您可以将数据划分为训练(50%)、交叉验证(25%)、测试(25%)。这样您将随机抽取 5000 个样本作为训练集,然后从剩余的 5000 个样本中抽取 2500 个样本作为交叉验证集,其余样本(即 2500 个)将被分离用于测试集。

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

于 2012-10-11T19:12:34.707 回答
2

您需要实现一个名为crossfun(参见示例)的函数。函数句柄minfn被传递fminsearch给被最小化。 exp([rbf_sigma,boxconstraint])是被优化以最小化分类错误的数量。

此函数句柄中嵌套了许多函数: -crossval使用分区 c 基于交叉验证产生分类错误 - crossfun- 使用 SVM 对数据进行分类 - fminsearch- 优化 SVM 超参数以最小化分类错误

希望这可以帮助

于 2012-10-11T09:28:48.780 回答