matlab svm

https://cn.mathworks.com/help/stats/support-vector-machines-for-binary-classification.html#bsr5ovw-1


使用支持向量机

    与任何监督式学习模型一样,您首先训练支持向量机,然后交叉验证分类器。 使用训练好的机器对新数据进行分类(预测)。 另外,为了获得令人满意的预测准确性,您可以使用各种SVM内核函数,并且必须调整内核函数的参数。


1、训练SVM分类器

    使用fitcsvm训练并选择交叉验证SVM分类器,最常用的语法是:

SVMModel = fitcsvm(X,Y,'KernelFunction','rbf',...
    'Standardize',true,'ClassNames',{'negClass','posClass'});
The inputs are:
  • X — Matrix of predictor data, where each row is one observation, and each column is one predictor.
    预测变量数据矩阵,每行是一个观察值,每列是一个预测变量
  • Y — Array of class labels with each row corresponding to the value of the corresponding row in X. Y can be a character array, categorical, logical or numeric vector, or cell vector of character vectors. Column vector with each row corresponding to the value of the corresponding row in X. Y can be a categorical or character array, logical or numeric vector, or cell array of character vectors.
     类标签数组,每行对应于X中相应行的值。Y可以是字符数组、分类、逻辑或数字矢量或字符矢量的单元格矢量。
    每行的列向量对应于X中相应行的值。Y可以是分类或字符数组、逻辑或数字向量或字符向量的单元数组。
  • KernelFunction — The default value is 'linear' for two-class learning, which separates the data by a hyperplane. The value 'gaussian' (or 'rbf') is the default for one-class learning, and specifies to use the Gaussian (or radial basis function) kernel. An important step to successfully train an SVM classifier is to choose an appropriate kernel function.
    两类学习的默认值是“linear”,它通过超平面分隔数据。“gaussian”或“rbf”是单类学习的默认值,并指定使用高斯(或径向基函数)内核。
    成功训练SVM分类器的一个重要步骤是选择合适的核函数。
  • Standardize — Flag indicating whether the software should standardize the predictors before training the classifier.
    指示软件是否应在训练分类器之前使预测期标准化。
  • ClassNames — Distinguishes between the negative and positive classes, or specifies which classes to include in the data. The negative class is the first element (or row of a character array), e.g., 'negClass', and the positive class is the second element (or row of a character array), e.g., 'posClass'. ClassNames must be the same data type as Y. It is good practice to specify the class names, especially if you are comparing the performance of different classifiers.
    区分负类和正类,或指定要包含在数据中的类。负类是第一个元素(或字符数组的行),例如“negClass”,正类是第二个元素(或字符数组的行),例如“posClass”。ClassNames必须与Y的数据类型相同。指定类名是一种很好的做法,尤其是在比较不同分类器的性能时。

    The resulting, trained model (SVMModel) contains the optimized parameters from the SVM algorithm, enabling you to classify new data.

    For more name-value pairs you can use to control the training, see the fitcsvm reference page.

2、用SVM分类器对新数据进行分类

    使用训练的SVM分类器分类新数据的语法是:

[label,score] = predict(SVMModel,newX);
    所得到的label矢量标示X中每一行的分类;score是一个n*2的矩阵。每行对应于X中的一行,这是一个新的观察。第一列包含分类在负类别中的score观察值,第二列包含分类在正分类中的score观测值。
    为了估计后验概率而不是分数,首先将经训练的SVM分类器(SVMModel)传递给fitPosterior,which fits a score-to-posterior-probability 转换函数。语法是:
ScoreSVMModel = fitPosterior(SVMModel,X,Y);


3、调整SVM分类器

使用fitcsvm的'OptimizeHyperparameters'名称 - 值对参数来查找最小化交叉验证损失的参数值。符合条件的参数是'BoxConstraint','KernelFunction','KernelScale','PolynomialOrder'和'Standardize'。有关示例,请参阅使用贝叶斯优化优化SVM分类器拟合。或者,您可以使用bayesopt函数,如使用bayesopt优化交叉验证的SVM分类器所示。 bayesopt功能可以更灵活地定制优化。您可以使用bayesopt函数来优化任何参数,包括使用fitcsvm函数时不适合优化的参数。

您也可以尝试根据此方案手动调整分类器的参数:

1、将数据传递给fitcsvm,并设置名称 - 值对参数'KernelScale','auto'。假设训练的SVM模型被称为SVMModel。该软件使用启发式程序来选择内核比例。启发式程序使用子采样。因此,要重现结果,请在训练分类器之前使用rng设置一个随机数种子。

2、交叉验证分类器通过传递给交叉。默认情况下,软件进行10倍交叉验证。

3、将交叉验证的SVM模型传递给kFoldLoss以估计并保留分类错误。

4、重新调整SVM分类器,但调整'KernelScale'和'BoxConstraint'名称 - 值对参数。
  • BoxConstraint - 一种策略是尝试框约束参数的几何序列。例如,从1e-5到1e5取11个值10倍。增加BoxConstraint可能会减少支持向量的数量,但也可能会增加训练时间。
  • KernelScale - 一种策略是尝试按原始内核比例缩放的RBF西格玛参数的几何序列。做到这一点:
        a.使用点符号检索原始内核比例,例如ks:ks = SVMModel.KernelParameters.Scale。
        b.用作原始内核的比例因子。例如,将ks乘以11个值1e-5到1e5,增加10倍。


    选择产生最低分类错误的模型。您可能想要进一步优化您的参数以获得更好的准确性。从您的初始参数开始,并执行另一个交叉验证步骤,这次使用的因子为1.2。


用高斯内核训练SVM分类器。。

这个例子展示了如何生成一个具有高斯核函数的非线性分类器。首先,在单元圆盘内部生成一类二维点,然后在半径为1到半径2的圆环中生成另一类点。然后,根据具有高斯径向基函数内核的数据生成分类器。由于模型是圆对称的,因此默认的线性分类器显然不适合这个问题。将框约束参数设置为Inf以进行严格分类,这意味着不存在错误分类的训练点。其他内核函数可能不适用于这种严格的框约束,因为它们可能无法提供严格的分类。即使rbf分类器可以分离类,结果也可能会过度训练。


生成均匀分布在单位磁盘上的100个点。为此,生成半径r作为均匀随机变量的平方根,在(0,)中均匀生成一个角度t,并将该点置于(rcos(t),rsin(t))。

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值