matlab - 具有交叉验证的 SVM 分类

标签 matlab classification svm bioinformatics

我是 Matlab 的新手,正在尝试按照 the Bioinformatics Toolbox documentation (SVM Classification with Cross Validation) 中的示例进行操作处理分类问题。

但是,我无法理解第 9 步,它说:

Set up a function that takes an input z=[rbf_sigma,boxconstraint], and returns the cross-validation value of exp(z).

The reason to take exp(z) is twofold: rbf_sigma and boxconstraint must be positive.

You should look at points spaced approximately exponentially apart. This function handle computes the cross validation at parameters

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

最佳答案

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

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

You can see how by adding up the gaussian kernels on the red samples "sumA", and on the green samples "sumB"; it is logical that sumA>sumB in the center part of the figure. It is also logical that sumB>sumA in the outer part of the image.

图。从您给我们的网页上分析这个数字。您可以通过将红色样本“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} (它们会线性分开)。他们建议首先尝试广泛的值(value)观。您可以稍后从之前获得的第一个最优值进一步优化。
  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 的每个值优化 SVM 分类器的参数。然后使用交叉验证集来选择参数 rbf_sigma 和 boxconstraint 的最佳值。最后,测试数据用于了解分类器的性能(分类器的效率取决于测试集)。
  4. 因此,如果您从 10000 个样本开始,您可以将数据划分为例如训练 (50%)、交叉验证 (25%)、测试 (25%)。因此,您将为训练集随机抽取 5000 个样本,然后从剩余的 5000 个样本中抽取 2500 个样本用于交叉验证集,其余样本(即 2500 个)将被分离用于测试集。

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

关于matlab - 具有交叉验证的 SVM 分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12815581/

相关文章:

matlab - 如何在matlab中使用一类SVM?

python - 在Python中计算分类变量和连续变量的条件概率? P(分类|连续)

machine-learning - SVMlight 列车数据格式化

matlab - FFT 后在时域中延迟具有频域中相位变化的信号

class - 复制作为句柄类的类的方法?

python - 使用我的分类器和数据试用 scikit 学习示例

csv - Weka 对 CSV 的预测

python-3.x - 未安装错误: TfidfVectorizer - Vocabulary wasn't fitted python

c++ - OpenCV SVM "unsupported response type"错误

python - 使用 NumPy 进行 Procrustes 分析?