首页 > 其他分享 >机器学习 | MATLAB实现支持向量机分类参数设定

机器学习 | MATLAB实现支持向量机分类参数设定

时间:2022-12-15 15:40:02浏览次数:54  
标签:设定 变量 只读 指定 分类器 MATLAB 向量 属性


机器学习 | MATLAB实现支持向量机分类参数设定

目录

  • ​​机器学习 | MATLAB实现支持向量机分类参数设定​​
  • ​​基本介绍​​
  • ​​属性描述​​
  • ​​程序设计​​
  • ​​参考资料​​

基本介绍

ClassificationSVM 是用于一类和二类学习的支持向量机 (SVM) 分类器。 训练的ClassificationSVM分类器存储训练数据、参数值、先验概率、支持向量和算法实现信息。 使用这些分类器执行任务,例如拟合得分到后验概率的转换函数和预测新数据的标签。

属性描述

使用 fitcsvm 创建一个 ClassificationSVM 对象。

Alpha — Trained classifier coefficients
numeric vector

该属性是只读的。
训练的分类器系数,指定为 s×1 数值向量。 s 是训练分类器中支持向量的数量,sum(Mdl.IsSupportVector)。
Alpha 包含来自对偶问题的训练分类器系数,即估计的拉格朗日乘数。 如果您使用 fitcsvm 的 RemoveDuplicates 名称-值对组参数删除重复项,则对于作为支持向量的一组给定重复观测值,Alpha 包含一个对应于整个集合的系数。 也就是说,MATLAB® 将非零系数归因于一组重复项中的一个观测值,并将一个系数 0 分配给该组中的所有其他重复观测值。

Beta — Linear predictor coefficients
numeric vector

该属性是只读的。
线性预测系数,指定为数值向量。 Beta 的长度等于用于训练模型的预测变量的数量。
MATLAB 使用完全虚拟编码扩展预测数据中的分类变量。 也就是说,MATLAB 为每个分类变量的每个级别创建一个虚拟变量。 Beta 为每个预测变量(包括虚拟变量)存储一个值。 例如,如果有三个预测变量,其中一个是具有三个级别的分类变量,则 Beta 是包含五个值的数值向量。

Bias — Bias term
scalar

该属性是只读的。
偏置项,指定为标量。

BoxConstraints — Box constraints
numeric vector

该属性是只读的。
框约束,指定为 n×1 框约束的数值向量。 n 是训练数据中的观察数(请参阅 NumObservations 属性)。
如果您使用 fitcsvm 的 RemoveDuplicates 名称-值对组参数删除重复项,则对于给定的一组重复观测值,MATLAB 会对框约束求和,然后将总和归因于一个观测值。 MATLAB 将 0 的框约束归因于集合中的所有其他观察值。

CacheInfo — Caching information
structure array

该属性是只读的。
缓存信息,指定为结构体数组。 缓存信息包含此表中描述的字段。

IsSupportVector — Support vector indicator
logical vector

该属性是只读的。
支持向量指示符,指定为 n×1 逻辑向量,用于标记预测变量数据矩阵中的相应观测值是否为支持向量。 n 是训练数据中的观察数(请参阅 NumObservations)。
如果您使用 fitcsvm 的 RemoveDuplicates 名称-值对组参数删除重复项,则对于作为支持向量的一组给定重复观测值,IsSupportVector 仅将一个观测值标记为支持向量。

KernelParameters — Kernel parameters
structure array

该属性是只读的。
内核参数,指定为结构体数组。 内核参数属性包含此表中列出的字段。

Nu — One-class learning parameter
positive scalar

该属性是只读的。
一类学习参数 ν,指定为正标量。

OutlierFraction — Proportion of outliers
numeric scalar

该属性是只读的。
训练数据中异常值的比例,指定为数值标量。

Solver — Optimization routine
'ISDA' | 'L1QP' | 'SMO'

该属性是只读的。
用于训练 SVM 分类器的优化例程,指定为“ISDA”、“L1QP”或“SMO”。

SupportVectorLabels — Support vector class labels
s-by-1 numeric vector

该属性是只读的。
支持向量类标签,指定为 s×1 数值向量。 s 是训练分类器中支持向量的数量,sum(Mdl.IsSupportVector)。
SupportVectorLabels 中的值为 +1 表示对应的支持向量属于正类 (ClassNames{2})。 –1 值表示对应的支持向量在负类 (ClassNames{1}) 中。
使用 fitcsvm 的 RemoveDuplicates 名称-值对组参数删除重复项,则对于作为支持向量的一组给定重复观测值,SupportVectorLabels 包含一个唯一的支持向量标签。

SupportVectors — Support vectors
s-by-p numeric matrix

该属性是只读的。
训练分类器中的支持向量,指定为 s-by-p 数值矩阵。 s 是训练分类器中支持向量的数量,sum(Mdl.IsSupportVector),p 是预测数据中预测变量的数量。
SupportVectors 包含 MATLAB 认为是支持向量的预测变量数据 X 的行。 如果在使用 fitcsvm 训练 SVM 分类器时指定 ‘Standardize’,true,则 SupportVectors 包含 X 的标准化行。
如果您使用 fitcsvm 的 RemoveDuplicates 名称-值对组参数删除重复项,则对于作为支持向量的一组给定重复观测值,SupportVectors 包含一个唯一支持向量。

CategoricalPredictors - 分类预测指标
正整数向量 | []

该属性是只读的。
分类预测指标,指定为正整数向量。 CategoricalPredictors 包含指示相应预测变量是分类的索引值。 索引值介于 1 和 p 之间,其中 p 是用于训练模型的预测变量的数量。 如果没有一个预测变量是分类的,则此属性为空 ([])。

ClassNames - 唯一的类标签
分类数组 | 字符数组 | 逻辑向量 | 数值向量 | 字符向量元胞数组

该属性是只读的。
训练中使用的唯一类标签,指定为分类或字符数组、逻辑或数值向量或字符向量元胞数组。 ClassNames 与类标签 Y 具有相同的数据类型。(软件将字符串数组视为字符向量的元胞数组。)ClassNames 还确定类顺序。

Cost — Misclassification cost
numeric square matrix

该属性是只读的。
误分类成本,指定为数值方阵。
对于二分类学习,成本属性存储由拟合函数的成本名称-值参数指定的误分类成本矩阵。 行对应于真实类,列对应于预测类。 也就是说,如果一个点的真实类是 i,则 Cost(i,j) 是将一个点分类到类 j 的成本。 Cost 的行和列的顺序对应于 ClassNames 中类的顺序。
对于一类学习, Cost = 0.。

ExpandedPredictorNames — Expanded predictor names
cell array of character vectors

该属性是只读的。
扩展的预测变量名称,指定为字符向量元胞数组。
如果模型对分类变量使用虚拟变量编码,则 ExpandedPredictorNames 包含描述扩展变量的名称。 否则,ExpandedPredictorNames 与 PredictorNames 相同。

Gradient - 训练数据梯度值
数值向量

该属性是只读的。
训练数据梯度值,指定为数值向量。 Gradient 的长度等于观察的数量(NumObservations)。

ModelParameters — Parameters used to train model
object

该属性是只读的。
用于训练 ClassificationSVM 模型的参数,指定为对象。 ModelParameters 包含参数值,例如用于训练 SVM 分类器的名称-值对参数值。 ModelParameters 不包含估计参数。
使用点表示法访问 ModelParameters 的属性。 例如,使用 Mdl.ModelParameters.Alpha 访问估计 Alpha 的初始值。

Mu — Predictor means
numeric vector | []

该属性是只读的。
预测器均值,指定为数值向量。 如果在使用 fitcsvm 训练 SVM 分类器时指定 ‘Standardize’,1 或 ‘Standardize’,true,则 Mu 的长度等于预测变量的数量。
MATLAB 使用完全虚拟编码扩展预测数据中的分类变量。 也就是说,MATLAB 为每个分类变量的每个级别创建一个虚拟变量。 Mu 为每个预测变量存储一个值,包括虚拟变量。 但是,MATLAB 不会对包含分类变量的列进行标准化。
如果在使用 fitcsvm 训练 SVM 分类器时设置 ‘Standardize’,false,则 Mu 是一个空向量 ([])。

NumObservations — Number of observations
numeric scalar

该属性是只读的。
存储在 X 和 Y 中的训练数据中的观察数,指定为数值标量。

PredictorNames - 预测变量名称
字符向量元胞数组

该属性是只读的。
预测变量名称,指定为字符向量元胞数组。 PredictorNames 元素的顺序对应于预测变量名称在训练数据中出现的顺序。

Prior - 先验概率
数值向量

该属性是只读的。
每个类的先验概率,指定为数值向量。
对于二分类学习,如果您指定成本矩阵,则软件会通过合并成本矩阵中描述的惩罚来更新先验概率。
对于二分类学习,软件对拟合函数的 Prior name-value 参数指定的先验概率进行归一化,使概率总和为 1。 Prior 属性存储归一化的先验概率。 Prior 的元素顺序对应于 Mdl.ClassNames 的元素。
对于一类学习,Prior = 1。

ResponseName — Response variable name
character vector

该属性是只读的。
响应变量名称,指定为字符向量。

RowsUsed - 拟合中使用的行
[] | 逻辑向量

该属性是只读的。
用于拟合 ClassificationSVM 模型的原始训练数据行,指定为逻辑向量。 如果使用了所有行,则此属性为空。

ScoreTransform — Score transformation
character vector | function handle

分数转换,指定为字符向量或函数句柄。 ScoreTransform 表示用于转换预测分类分数的内置转换函数或函数句柄。
要将分数转换函数更改为函数,例如,使用点表示法。
对于内置函数,输入字符向量。

Sigma — Predictor standard deviations
[] (default) | numeric vector

该属性是只读的。
预测变量标准差,指定为数值向量。
如果在使用 fitcsvm 训练 SVM 分类器时指定 ‘Standardize’,true,则 Sigma 的长度等于预测变量的数量。
MATLAB 使用完全虚拟编码扩展预测数据中的分类变量。 也就是说,MATLAB 为每个分类变量的每个级别创建一个虚拟变量。 Sigma 为每个预测变量存储一个值,包括虚拟变量。 但是,MATLAB 不会对包含分类变量的列进行标准化。
如果在使用 fitcsvm 训练 SVM 分类器时设置 ‘Standardize’,false,则 Sigma 是一个空向量 ([])。

W — Observation weights
numeric vector

该属性是只读的。
用于训练 SVM 分类器的观察权重,指定为 n×1 数值向量。 n 是观察次数(参见 NumObservations)。
fitcsvm 对 ‘Weights’ 名称-值对参数中指定的观察权重进行归一化,以便特定类中 W 的元素总和为该类的先验概率。

X - 非标准化预测变量
数值矩阵 | 桌子

该属性是只读的。
用于训练 SVM 分类器的非标准化预测变量,指定为数值矩阵或表格。
X 的每一行对应一个观测值,每一列对应一个变量。
MATLAB 排除包含至少一个缺失值的观测值,并从 Y 中删除相应的元素。

Y - 类标签
分类数组 | 字符数组 | 逻辑向量 | 数值向量 | 字符向量元胞数组

该属性是只读的。
用于训练 SVM 分类器的类标签,指定为分类或字符数组、逻辑或数值向量或字符向量元胞数组。 Y 是与 fitcsvm 的输入参数 Y 相同的数据类型。 (该软件将字符串数组视为字符向量元胞数组。)
Y 的每一行代表 X 对应行的观察到的分类。
MATLAB 排除包含缺失值的元素,并从 X 中删除相应的观测值。

程序设计

% 加载 Fisher 的 iris 数据集。 去除萼片的长度和宽度以及所有观察到的 setosa 虹膜.

load fisheriris
inds = ~strcmp(species,'setosa');
X = meas(inds,3:4);
y = species(inds);
% 使用处理后的数据集训练 SVM 分类器。
SVMModel = fitcsvm(X,y)
SVMModel =
ClassificationSVM
ResponseName: 'Y'
CategoricalPredictors: []
ClassNames: {'versicolor' 'virginica'}
ScoreTransform: 'none'
NumObservations: 100
Alpha: [24x1 double]
Bias: -14.4149
KernelParameters: [1x1 struct]
BoxConstraints: [100x1 double]
ConvergenceInfo: [1x1 struct]
IsSupportVector: [100x1 logical]
Solver: 'SMO'

%SVMModel 是经过训练的 ClassificationSVM 分类器。 显示 SVMModel 的属性。 例如,要确定类顺序,请使用点表示法。

classOrder = SVMModel.ClassNames
classOrder = 2x1 cell
{'versicolor'}
{'virginica' }

%第一类('versicolor')是负类,第二类('virginica')是正类。 您可以使用“ClassNames”名称-值对组参数在训练期间更改课程顺序。绘制数据的散点图并圈出支持向量。

sv = SVMModel.SupportVectors;
figure
gscatter(X(:,1),X(:,2),y)
hold on
plot(sv(:,1),sv(:,2),'ko','MarkerSize',10)
legend('versicolor','virginica','Support Vector')
hold off

机器学习 | MATLAB实现支持向量机分类参数设定_数组

支持向量是发生在或超出其估计的类边界的观察值。
通过在训练期间使用 ‘BoxConstraint’ 名称-值对组参数设置框约束来调整边界(以及支持向量的数量)。


标签:设定,变量,只读,指定,分类器,MATLAB,向量,属性
From: https://blog.51cto.com/u_15735367/5940128

相关文章