fitcsvm
训练用于一类和二类分类的支持向量机 (SVM) 分类器
语法
说明
fitcsvm
基于低维或中维预测变量数据集训练或交叉验证一类和二类(二元)分类的支持向量机 (SVM) 模型。fitcsvm
支持使用核函数映射预测变量数据,并支持序列最小优化 (SMO)、迭代单点数据算法 (ISDA) 或 L1 软边距最小化(二次规划目标函数最小化)。
要基于高维数据集(即包含许多预测变量的数据集)训练二类分类线性 SVM 模型,请改用 fitclinear
。
对于结合使用二类 SVM 模型的多类学习,请使用纠错输出编码 (ECOC)。有关详细信息,请参阅 fitcecoc
。
要训练 SVM 回归模型,请参阅 fitrsvm
(适用于低维和中维预测变量数据集)或 fitrlinear
(适用于高维数据集)。
返回训练的支持向量机 (SVM) 分类器 Mdl
= fitcsvm(Tbl
,ResponseVarName
)Mdl
。该分类器使用表 Tbl
中包含的样本数据进行训练。ResponseVarName
是 Tbl
中变量的名称,该变量包含一类或二类分类的类标签。
如果类标签变量只包含一个类(例如,由 1 组成的向量),fitcsvm
会训练一类分类模型。否则,该函数将训练二类分类模型。
可在前面语法中的输入参数外使用一个或多个名称-值对组参数指定选项。例如,您可以指定交叉验证的类型、误分类的代价以及分数变换函数的类型。Mdl
= fitcsvm(___,Name,Value
)
示例
输入参数
输出参数
限制
fitcsvm
为一类或二类学习应用训练 SVM 分类器。要使用就有两个以上类的数据训练 SVM 分类器,请使用fitcecoc
。fitcsvm
支持低维和中维数据集。对于高维数据集,请改用fitclinear
。
详细信息
提示
除非您的数据集很大,否则请始终尝试标准化预测变量(请参阅
Standardize
)。标准化可使预测变量不受其测量尺度的影响。使用
KFold
名称-值对组参数进行交叉验证是很好的做法。交叉验证结果决定 SVM 分类器的泛化能力。对于一类学习:
支持向量中的稀疏性是 SVM 分类器的一个理想属性。要减少支持向量的数量,可将
BoxConstraint
设置为较大的值。此操作会增加训练时间。为了获得最佳训练时间,请将
CacheSize
设置为计算机允许的最大内存限制。如果您期望支持向量比训练集中的观测值少得多,则您可以使用名称-值对组参数
'ShrinkagePeriod'
缩小活动集,从而显著加快收敛速度。指定'ShrinkagePeriod',1000
是很好的做法。远离决策边界的重复观测值不影响收敛。然而,决策边界附近出现的少数几个重复的观测值可能会大幅减慢收敛速度。在以下情况下,要加快收敛速度,请指定
'RemoveDuplicates',true
:您的数据集包含许多重复的观测值。
您怀疑有几个重复的观测值接近决策边界。
要在训练期间保留原始数据集,
fitcsvm
必须临时分别存储两个数据集:原始数据集和没有重复观测值的数据集。因此,如果您为包含少量重复观测值的数据集指定true
,则fitcsvm
消耗的内存将接近原始数据的两倍。在训练模型后,您可以生成预测新数据标签的 C/C++ 代码。生成 C/C++ 代码需要 MATLAB Coder™。有关详细信息,请参阅Introduction to Code Generation。
算法
有关 SVM 二类分类算法的数学公式,请参阅用于二类分类的支持向量机和了解支持向量机。
NaN
、<undefined>
、空字符向量 (''
)、空字符串 (""
) 和<missing>
值表示缺失值。fitcsvm
会删除对应于缺失响应的整行数据。在计算总权重时(请参阅下几项内容),如果某权重所对应的观测值至少具有一个缺失变量,则fitcsvm
忽略该权重。此操作会导致平衡类问题中出现不平衡的先验概率。因此,观测值框约束可能不等于BoxConstraint
。如果您指定
Cost
、Prior
和Weights
名称-值参数,则输出模型对象会将指定的值分别存储在Cost
、Prior
和W
属性中。Cost
属性存储用户指定的代价矩阵 (C),无需进行任何修改。Prior
和W
属性分别存储归一化后的先验概率和观测值权重。对于模型训练,软件会更新先验概率和观测值权重,以纳入代价矩阵中所述的罚分。有关详细信息,请参阅Misclassification Cost Matrix, Prior Probabilities, and Observation Weights。请注意,
Cost
和Prior
名称-值参数用于二类学习。对于一类学习,Cost
和Prior
属性分别存储0
和1
。对于二类学习,
fitcsvm
为训练数据中的每个观测值指定一个框约束。观察值 j 的框约束的公式是,其中 C0 是初始框约束(请参阅
BoxConstraint
名称-值参数),而 wj* 是观测值 j 的由Cost
和Prior
调整的观测值权重。有关观测值权重的详细信息,请参阅Adjust Prior Probabilities and Observation Weights for Misclassification Cost Matrix。如果您将
Standardize
指定为true
并设置Cost
、Prior
或Weights
名称-值参数,则fitcsvm
会使用对应于预测变量的加权均值和加权标准差对预测变量进行标准化。也就是说,fitcsvm
使用标准化预测变量 j(xj,其中 xjk 是预测变量 j(列)的观测值 k(行),且
假设
p
是您预期在训练数据中的离群值比例,并且您设置了'OutlierFraction',p
。对于一类学习,软件会训练偏差项,使得训练数据中 100
p
% 的观测值具有负分数。对于二类学习,软件会实施稳健学习。换句话说,当优化算法收敛时,软件会尝试删除 100
p
% 的观测值。删除的观测值对应于幅值较大的梯度。
如果预测变量数据包含分类变量,则软件通常会对这些变量进行完全虚拟变量编码。软件为每个分类变量的每个水平创建一个虚拟变量。
PredictorNames
属性为每个原始预测变量名称存储一个元素。例如,假设有三个预测变量,其中一个是具有三个水平的分类变量。那么PredictorNames
是 1×3 个字符向量元胞数组,其中包含预测变量的原始名称。ExpandedPredictorNames
属性为每个预测变量(包括虚拟变量)存储一个元素。例如,假设有三个预测变量,其中一个是具有三个水平的分类变量。那么ExpandedPredictorNames
就是 1×5 字符向量数组,其中包含预测变量和新虚拟变量的名称。同样,
Beta
属性为每个预测变量(包括虚拟变量)存储一个 beta 系数。SupportVectors
属性存储支持向量的预测变量值,包括虚拟变量。例如,假设有 m 个支持向量和三个预测变量,其中一个预测变量是具有三个水平的分类变量。那么SupportVectors
就是 n×5 矩阵。X
属性将训练数据存储为原始输入,不包括虚拟变量。当输入为表时,X
仅包含用作预测变量的列。
对于表中指定的预测变量,如果任何变量包含经过排序的(有序)类别,软件会对这些变量使用有序编码。
对于具有 k 个有序水平的变量,软件会创建 k – 1 个虚拟变量。在第 j 个虚拟变量中,前 j 个水平的对应值为 –1;从 j + 1 至 k 的水平的对应值为 +1。
存储在
ExpandedPredictorNames
属性中的虚拟变量的名称使用值 +1 指示第一个水平。软件会为虚拟变量另外存储 k – 1 个预测变量名称,包括水平 2、3、...、k 的名称。
所有求解器都实现 L1 软边距最小化算法。
对于一类学习,软件估计 Lagrange 乘数 α1、...、αn,满足
替代功能
您还可以使用 ocsvm
函数来训练用于异常检测的一类 SVM 模型。
与
fitcsvm
函数相比,ocsvm
函数针对异常检测提供的首选工作流更简单。ocsvm
函数返回OneClassSVM
对象、异常指标和异常分数。您可以使用输出来识别训练数据中的异常。要找出新数据中的异常,可以使用OneClassSVM
的isanomaly
对象函数。isanomaly
函数返回新数据的异常指标和分数。fitcsvm
函数支持一类和二类分类。如果类标签变量只包含一个类(例如,由 1 组成的向量),fitcsvm
会训练一类分类模型并返回ClassificationSVM
对象。要识别异常,您必须首先使用ClassificationSVM
的resubPredict
或predict
对象函数计算异常分数,然后通过找出具有负分数的观测值来识别异常。请注意,大的正异常分数表示
ocsvm
中存在异常,而负分数表示ClassificationSVM
的predict
中存在异常。
ocsvm
函数基于 SVM 的原问题形式找到决策边界,而fitcsvm
函数基于 SVM 的对偶问题形式找到决策边界。对于大型数据集(大型 n),
ocsvm
中求解器的计算开销低于fitcsvm
中的求解器。与fitcsvm
中需要计算 n×n Gram 矩阵的求解器不同,ocsvm
中的求解器只需形成大小为 n×m 的矩阵。此处,m 是扩展空间的维数,对于大数据来说,此维数通常远远小于 n。
参考
[1] Christianini, N., and J. C. Shawe-Taylor. An Introduction to Support Vector Machines and Other Kernel-Based Learning Methods. Cambridge, UK: Cambridge University Press, 2000.
[2] Fan, R.-E., P.-H. Chen, and C.-J. Lin. “Working set selection using second order information for training support vector machines.” Journal of Machine Learning Research, Vol. 6, 2005, pp. 1889–1918.
[3] Hastie, T., R. Tibshirani, and J. Friedman. The Elements of Statistical Learning, Second Edition. NY: Springer, 2008.
[4] Kecman V., T. -M. Huang, and M. Vogt. “Iterative Single Data Algorithm for Training Kernel Machines from Huge Data Sets: Theory and Performance.” Support Vector Machines: Theory and Applications. Edited by Lipo Wang, 255–274. Berlin: Springer-Verlag, 2005.
[5] Scholkopf, B., J. C. Platt, J. C. Shawe-Taylor, A. J. Smola, and R. C. Williamson. “Estimating the Support of a High-Dimensional Distribution.” Neural Comput., Vol. 13, Number 7, 2001, pp. 1443–1471.
[6] Scholkopf, B., and A. Smola. Learning with Kernels: Support Vector Machines, Regularization, Optimization and Beyond, Adaptive Computation and Machine Learning. Cambridge, MA: The MIT Press, 2002.
扩展功能
版本历史记录
在 R2014a 中推出
另请参阅
ClassificationSVM
| CompactClassificationSVM
| ClassificationPartitionedModel
| predict
| fitSVMPosterior
| rng
| quadprog
(Optimization Toolbox) | fitcecoc
| fitclinear
| ocsvm