fitcknn
适合k-最近邻分类器
语法
描述
返回一个k-基于表中输入变量(也称为预测器、特征或属性)的最近邻分类模型Mdl
= fitcknn (资源描述
,ResponseVarName
)资源描述
输出(响应)资源描述。ResponseVarName
.
例子
火车k-最近邻分类器
训练k- Fisher虹膜数据的最近邻分类器,其中k,预测器中最近邻的个数为5。
载入费雪的虹膜数据。
负载fisheririsX = meas;Y =物种;
X
是一个数字矩阵,其中包含150个鸢尾的四个花瓣的测量值。Y
是包含相应虹膜种类的字符向量的单元格数组。
训练一个5近邻分类器。标准化非分类预测器数据。
Mdl = fitcknn(X,Y,“NumNeighbors”5,“标准化”, 1)
Mdl = ClassificationKNN ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 Distance: 'euclidean' NumNeighbors: 5 Properties, Methods
Mdl
是经过训练的ClassificationKNN
分类器,它的一些属性显示在命令窗口中。
访问的属性Mdl
,使用点表示法。
Mdl。ClassNames
ans =3 x1细胞{'setosa'} {'versicolor'} {'virginica'}
Mdl。之前
ans =1×30.3333 0.3333 0.3333
Mdl。之前
类的先验概率,您可以使用“之前”
中的名称-值对参数fitcknn
.类别先验概率的顺序对应于类别的顺序Mdl。ClassNames
.默认情况下,先验概率是数据中各类的相对频率。
你也可以在训练后重置先验概率。例如,将先验概率分别设置为0.5、0.2和0.3。
Mdl。先验= [0.5 0.2 0.3];
训练k-使用Minkowski度量的最近邻分类器
载入费雪的虹膜数据集。
负载fisheririsX = meas;Y =物种;
X
是一个数字矩阵,其中包含150个鸢尾的四个花瓣的测量值。Y
是包含相应虹膜种类的字符向量的单元格数组。
使用闵可夫斯基度量训练一个3近邻分类器。要使用Minkowski度量,必须使用穷尽搜索器。标准化非分类预测器数据是一个很好的实践。
Mdl = fitcknn(X,Y,“NumNeighbors”3,...“NSMethod”,“详尽”,“距离”,闵可夫斯基的,...“标准化”1);
Mdl
是一个ClassificationKNN
分类器。
的属性Mdl
通过双击Mdl
在工作区窗口中。这将打开变量编辑器。
火车k-使用自定义距离度量的最近邻分类器
训练k-使用卡方距离的最近邻分类器。
载入费雪的虹膜数据集。
负载fisheririsX = meas;%预测Y =物种;%响应
卡方距离j维点x和z是
在哪里 权重与维度有关吗j.
指定卡方距离函数。距离函数必须:
取一排
X
,例如,x
,和矩阵Z
.比较
x
到每一行Z
.返回一个向量
D
的长度 ,在那里 行数是多少Z
.的每个元素D
观察到的距离是否对应于x
和对应于每一行的观察值Z
.
chiSqrDist = @ x, Z, wt)√((bsxfun (@minus, x, Z)。^ 2)* wt);
本示例使用任意权重进行说明。
训练一个3近邻分类器。标准化非分类预测器数据是一个很好的实践。
K = 3;W = [0.3;0.3;0.2;0.2);KNNMdl = fitcknn(X,Y,“距离”@ (x, Z) chiSqrDist (x, Z, w),...“NumNeighbors”、钾、“标准化”1);
KNNMdl
是一个ClassificationKNN
分类器。
使用默认的10倍交叉验证交叉验证KNN分类器。检查分类错误。
rng (1);%用于重现性CVKNNMdl = crossval(KNNMdl);classError = kfoldLoss(CVKNNMdl)
classError = 0.0600
CVKNNMdl
是一个ClassificationPartitionedModel
分类器。
将分类器与使用不同权重方案的分类器进行比较。
W2 = [0.2;0.2;0.3;0.3);CVKNNMdl2 = fitcknn(X,Y,“距离”@ (x, Z) chiSqrDist (x, Z, w2),...“NumNeighbors”、钾、“KFold”10“标准化”1);classError2 = kfoldLoss(CVKNNMdl2)
classError2 = 0.0400
第二种加权方案产生的分类器具有更好的样本外性能。
优化拟合KNN分类器
此示例演示如何使用自动优化超参数fitcknn
.本例使用Fisher虹膜数据。
加载数据。
负载fisheririsX = meas;Y =物种;
通过使用自动超参数优化找到最小化五倍交叉验证损失的超参数。
为了再现性,设置随机种子并使用“expected-improvement-plus”
采集功能。
rng(1) Mdl = fitcknn(X,Y,“OptimizeHyperparameters”,“汽车”,...“HyperparameterOptimizationOptions”,...结构(“AcquisitionFunctionName”,“expected-improvement-plus”))
|=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | NumNeighbors距离| | | | |结果运行时| | | (estim(观察) .) | | | |=====================================================================================================| | 最好1 | | 0.026667 | 0.5307 | 0.026667 | 0.026667 | 30 |余弦| | 2 |接受| 0.04 | 0.2435 | 0.026667 | 0.027197 | 2 | chebychev | | 3 |接受| 0.19333 | 0.31468 | 0.026667 | 0.030324 | 1 |汉明| | 4 |接受| 0.33333 | 0.22437 | 0.026667 | 0.033313 | | 31日斯皮尔曼| | 5 |的| 0.02 | 0.14986 | 0.02 | 0.020648 | 6 |余弦| | 6 |接受| 0.073333 | 0.14588 | 0.02 | 0.023082 | 1 |相关| | | 7日接受| 0.06 | 0.29558 | 0.02 | 0.020875 | 2 | cityblock | | |接受8 | 0.04 | 0.18156 | 0.02 | 0.020622 | 1 |欧几里得| | | 9日接受| 0.24 | 0.29538 | 0.02 | 0.020562 | 74 | mahalanobis | | 10 |接受| 0.04 |0.33588 | 0.02 | 0.020649 | 1 |闵可夫斯基| | | 11日接受| 0.053333 | 0.25318 | 0.02 | 0.020722 | 1 | seuclidean | | | 12日接受| 0.19333 | 0.36986 | 0.02 | 0.020701 | 1 | jaccard | | | 13日接受| 0.04 | 0.29604 | 0.02 | 0.029203 | 1 | cos | | | 14日接受| 0.04 | 0.40884 | 0.02 | 0.031888 | 75 |余弦| | 15 |接受| 0.04 | 0.19448 | 0.02 | 0.020076 | 1 | cos | | | 16日接受| 0.093333 | 0.31419 | 0.02 | 0.020073 | 75 |欧几里得| | | 17日接受| 0.093333 | 0.1489 | 0.02 | 0.02007| 75 |闵可夫斯基| | | 18日接受| 0.1 | 0.22393 | 0.02 | 0.020061 | 75 | chebychev | | | 19日接受| 0.15333 | 0.16678 | 0.02 | 0.020044 | 75 | seuclidean | | |接受20 | 0.1 | 0.19847 | 0.02 | 0.020044 | 75 | cityblock | |=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | NumNeighbors距离| | | | |结果运行时| |(观察)| (estim) | | ||=====================================================================================================| | 21日|接受| 0.033333 | 0.16232 | 0.02 | 0.020046 | 75 |相关| | | 22日接受| 0.033333 | 0.26063 | 0.02 | 0.02656 | 9 |余弦| | | 23日接受| 0.033333 | 0.37433 | 0.02 | 0.02854 | 9 |余弦| | | 24日接受| 0.02 | 0.19591 | 0.02 | 0.028607 | 1 | chebychev | | | 25日接受| 0.02 | 0.25144 | 0.02 | 0.022264 | 1 | chebychev | | | 26日接受| 0.02 | 0.28304 | 0.02 | 0.021439 | 1 |chebychev | | 27 | Accept | 0.02 | 0.21119 | 0.02 | 0.020999 | 1 | chebychev | | 28 | Accept | 0.66667 | 0.23 | 0.02 | 0.020008 | 75 | hamming | | 29 | Accept | 0.04 | 0.30776 | 0.02 | 0.020008 | 12 | correlation | | 30 | Best | 0.013333 | 0.15386 | 0.013333 | 0.013351 | 6 | euclidean |
__________________________________________________________ 优化完成。最大目标:达到30。总函数估计:30总运行时间:48.77秒总目标函数估计时间:7.7226最佳观测可行点:NumNeighbors Distance ____________ _________ 6 euclidean观测目标函数值= 0.013333估计目标函数值= 0.013351函数估计时间= 0.15386最佳估计可行点(根据模型):NumNeighbors Distance ____________ _________ 6欧氏估计目标函数值= 0.013351估计函数评估时间= 0.20725
Mdl = ClassificationKNN ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 HyperparameterOptimizationResults: [1x1 BayesianOptimization] Distance: 'euclidean' NumNeighbors: 6 Properties, Methods
输入参数
资源描述
- - - - - -样本数据
表格
用于训练模型的样例数据,指定为表。每一行资源描述
对应一个观察结果,每一列对应一个预测变量。可选地,资源描述
可以为响应变量包含一个附加列。不允许多列变量和字符向量的单元格数组以外的单元格数组。
如果
资源描述
包含响应变量,并且希望在中使用所有剩余变量资源描述
作为预测器,然后通过使用指定响应变量ResponseVarName
.如果
资源描述
包含响应变量,并且您希望仅使用其余变量的子集资源描述
作为预测器,然后用指定公式公式
.如果
资源描述
不包含响应变量,则使用Y
.中的响应变量的长度和行数资源描述
必须是平等的。
公式
- - - - - -响应变量和预测变量子集的解释模型
特征向量|字符串标量
响应变量和预测变量子集的解释模型,在形式中指定为字符向量或字符串标量“Y ~ x1 + x2 + x3”
.在这种形式中,Y
表示响应变量,和x1
,x2
,x3
表示预测变量。
中指定变量的子集资源描述
使用公式作为训练模型的预测因子。如果您指定了一个公式,那么该软件将不使用任何变量资源描述
没有出现在公式
.
公式中的变量名必须是资源描述
(Tbl.Properties.VariableNames
)和有效的MATLAB®标识符。中的变量名可以进行验证资源描述
通过使用isvarname
函数。如果变量名无效,则可以使用matlab.lang.makeValidName
函数。
数据类型:字符
|字符串
Y
- - - - - -类标签
分类数组|字符数组|字符串数组|逻辑向量|数值向量|字符向量的单元格数组
类标签,指定为类别、字符或字符串数组、逻辑或数字向量或字符向量的单元格数组。每一行Y
的对应行的分类X
.
软件会考虑南
,”
(空字符向量),""
(空字符串),< >失踪
,<定义>
值Y
丢失的值因此,该软件不能使用缺少响应的观察结果进行训练。
数据类型:分类
|字符
|字符串
|逻辑
|单
|双
|细胞
X
- - - - - -预测数据
数字矩阵
预测数据,指定为数值矩阵。
每一行对应一个观察结果(也称为实例或示例),每列对应一个预测变量(也称为特征)。
的长度Y
的行数X
必须是平等的。
以预测符的出现顺序指定它们的名称X
,使用PredictorNames
名称-值对参数。
数据类型:双
|单
名称-值参数
指定可选参数对为Name1 = Value1,…,以=家
,在那里的名字
参数名称和价值
对应的值。名-值参数必须出现在其他参数之后,但对的顺序并不重要。
在R2021a之前,名称和值之间用逗号隔开,并括起来的名字
在报价。
例子:“NumNeighbors”3“NSMethod”、“穷举”,“距离”,“闵可夫斯基”
使用最近邻搜索方法和Minkowski度量为三个最近邻指定分类器。
请注意
方法不能使用任何交叉验证名称-值参数“OptimizeHyperparameters”
名称-值参数。的交叉验证“OptimizeHyperparameters”
只有使用“HyperparameterOptimizationOptions”
名称-值参数。
BreakTies
- - - - - -打破僵局的算法
“最小”
(默认)|“最近的”
|“随机”
使用的破键算法预测
方法,如果多个类具有相同的最小代价,则指定为逗号分隔的对,由“BreakTies”
和以下其中之一:
“最小”
—在并列组中使用最小的索引。“最近的”
-使用绑定组中最接近的类。“随机”
-在打平的组中使用随机的平局。
默认情况下,当多个类之间的最近点数量相同时,就会发生联系k最近的邻居。
例子:“BreakTies”,“最近”
BucketSize
- - - - - -节点最大数据点
50
(默认)|正整数
的叶节点中的最大数据点数Kd-树,指定为逗号分隔的对,由“BucketSize”
和一个正整数值。这个论点只有在NSMethod
是“kdtree”
.
例子:“BucketSize”,40岁
数据类型:单
|双
CategoricalPredictors
- - - - - -分类预测器标志
[]
|“所有”
分类预测器标志,指定为逗号分隔的一对,由“CategoricalPredictors”
和以下其中之一:
“所有”
-所有的预测都是绝对的。[]
-没有绝对的预测。
预测数据fitcknn
必须是全部连续或全部绝对的。
当你设置CategoricalPredictors
来“所有”
,默认为距离
是“汉明”
.
例子:“CategoricalPredictors”、“所有”
一会
- - - - - -用于培训的类的名称
分类数组|字符数组|字符串数组|逻辑向量|数值向量|字符向量的单元格数组
用于训练的类的名称,指定为类别、字符或字符串数组;逻辑向量:逻辑或数字向量;或者字符向量的单元格数组。一会
必须具有与响应变量相同的数据类型资源描述
或Y
.
如果一会
是字符数组,则每个元素必须对应于数组的一行。
使用一会
:
在培训期间指定类的顺序。
指定与类顺序对应的任何输入或输出参数维度的顺序。例如,使用
一会
指定…尺寸的顺序成本
返回的分类分数的列顺序预测
.选择培训类的一个子集。例如,假设所有不同的类名的集合
Y
是(“a”、“b”、“c”)
.使用类的观察来训练模型“一个”
和“c”
只是,指定“类名”,(“a”、“c”)
.
的默认值。一会
响应变量中所有不同的类名的集合是否在资源描述
或Y
.
例子:“类名”,(“b”,“g”)
数据类型:分类
|字符
|字符串
|逻辑
|单
|双
|细胞
浸
- - - - - -协方差矩阵
X (X, omitrows)
(默认)|标量值的正定矩阵
协方差矩阵,指定为逗号分隔的对,由“浸”
以及计算马氏距离时表示协方差矩阵的标量值的正定矩阵。这个论点只有在“距离”
是“mahalanobis”
.
你不能同时指定“标准化”
其中任何一个“规模”
或“浸”
.
数据类型:单
|双
距离
- - - - - -距离度量
“cityblock”
|“chebychev”
|“相关”
|的余弦
|“欧几里得”
|“汉明”
|函数处理|……
距离度量,指定为逗号分隔的对,由“距离”
和有效的距离度量名称或函数句柄。允许的距离度量名称取决于您选择的邻居搜索器方法(参见NSMethod
).
NSMethod |
距离度量名称 |
---|---|
详尽的 |
任意距离度量ExhaustiveSearcher |
kdtree |
“cityblock” ,“chebychev” ,“欧几里得” ,或闵可夫斯基的 |
的有效距离度量ExhaustiveSearcher
.
距离度量名称 | 描述 |
---|---|
“cityblock” |
城市街区距离。 |
“chebychev” |
切比乔夫距离(最大坐标差)。 |
“相关” |
1减去观察值之间的样本线性相关性(作为值序列处理)。 |
的余弦 |
1减去观测值之间夹角的余弦(作为向量处理)。 |
“欧几里得” |
欧氏距离。 |
“汉明” |
汉明距离,不同坐标的百分比。 |
“jaccard” |
1减去雅卡德系数,非零坐标的百分比。 |
“mahalanobis” |
马氏距离,用正定协方差矩阵计算C .的默认值。C 样本协方差矩阵是X ,按X (X, omitrows) .指定不同的值C ,使用“浸” 名称-值对参数。 |
闵可夫斯基的 |
闵可夫斯基距离。默认指数为2 .要指定不同的指数,请使用“指数” 名称-值对参数。 |
“seuclidean” |
标准化欧氏距离。每一个坐标差X 查询点是缩放的,意思是除以缩放值年代 .的默认值。年代 标准偏差是从哪里计算的X ,S = std(X,'omitnan') .指定另一个值年代 ,使用规模 名称-值对参数。 |
“枪兵” |
1减去观察值之间的样本斯皮尔曼秩相关(作为值序列处理)。 |
@ |
距离函数句柄。 函数D2 = distfun(ZI,ZJ)距离百分比计算...
|
如果你指定CategoricalPredictors
作为“所有”
,则默认距离度量为“汉明”
.否则,默认距离度量为“欧几里得”
.
有关定义,请参见距离度量.
例子:“距离”,“闵可夫斯基”
数据类型:字符
|字符串
|function_handle
DistanceWeight
- - - - - -距离加权函数
“平等”
(默认)|“逆”
|“squaredinverse”
|函数处理
距离加权函数,指定为逗号分隔的对,由“DistanceWeight”
或者是函数句柄,或者是表中的一个值。
价值 | 描述 |
---|---|
“平等” |
没有权重 |
“逆” |
重量是1/距离 |
“squaredinverse” |
重量是1/距离2 |
@ |
fcn 是一个函数,它接受非负距离的矩阵,并返回包含非负距离权值的相同大小的矩阵。例如,“squaredinverse” 等于@ (d) d。^ (2) . |
例子:“DistanceWeight”、“逆”
数据类型:字符
|字符串
|function_handle
指数
- - - - - -闵可夫斯基距离指数
2
(默认)|正标量值
闵可夫斯基距离指数,指定为逗号分隔的对,由“指数”
一个正的标量值。这个论点只有在“距离”
是闵可夫斯基的
.
例子:“指数”,3
数据类型:单
|双
IncludeTies
- - - - - -系上包含标志
假
(默认)|真正的
领带包含标志,指定为逗号分隔的一对,由“IncludeTies”
以及指示是否预测
包含所有距离值等于k最小的距离。如果IncludeTies
是真正的
,预测
包括所有这些邻居。否则,预测
使用完全k邻居。
例子:“IncludeTies”,真的
数据类型:逻辑
NSMethod
- - - - - -最近邻搜索法
“kdtree”
|“详尽”
最近邻搜索方法,指定为逗号分隔的对,由“NSMethod”
和“kdtree”
或“详尽”
.
“kdtree”
—创建并使用Kd树查找最近的邻居。“kdtree”
当距离度量是以下之一时有效:“欧几里得”
“cityblock”
闵可夫斯基的
“chebychev”
“详尽”
—使用穷尽搜索算法。在预测一个新点的类时xnew
,软件计算从所有点的距离值X
来xnew
寻找最近的邻居。
默认为“kdtree”
当X
有10
或者更少的列,X
不是稀疏还是一个gpuArray
,距离度规是a“kdtree”
类型;否则,“详尽”
.
例子:“NSMethod”、“详尽”
NumNeighbors
- - - - - -要找到的最近邻居的数量
1
(默认)|正整数
PredictorNames
- - - - - -预测器变量名
唯一名称的字符串数组|唯一字符向量的单元格数组
预测器变量名,指定为惟一名称的字符串数组或惟一字符向量的单元格数组。的功能PredictorNames
这取决于你提供训练数据的方式。
如果你提供
X
和Y
,然后你可以使用PredictorNames
中的预测变量指定名称X
.名字的顺序
PredictorNames
的列顺序必须对应X
.也就是说,PredictorNames {1}
是X (: 1)
,PredictorNames {2}
是X (:, 2)
,等等。同时,大小(X, 2)
和元素个数(PredictorNames)
必须是平等的。默认情况下,
PredictorNames
是{x1, x2,…}
.
如果你提供
资源描述
,然后你可以使用PredictorNames
选择在训练中使用的预测变量。也就是说,fitcknn
中的预测变量PredictorNames
训练过程中的响应变量。PredictorNames
的子集Tbl.Properties.VariableNames
和不能包含响应变量的名称。默认情况下,
PredictorNames
包含所有预测变量的名称。一个好的实践是使用任意一种方法指定训练的预测器
PredictorNames
或公式
,但不是两者都有。
例子:“PredictorNames”(“SepalLength”、“SepalWidth”,“PetalLength”,“PetalWidth”)
数据类型:字符串
|细胞
之前
- - - - - -先验概率
“经验”
(默认)|“统一”
|标量值向量|结构
每个类的先验概率,指定为逗号分隔的对,由“之前”
和这个表中的一个值。
价值 | 描述 |
---|---|
“经验” |
类的先验概率是类的相对频率Y . |
“统一” |
所有类的先验概率都等于1/K,在那里K是类的数量。 |
数值向量 | 每个元素都是一个类先验概率。对元素进行排序Mdl .ClassNames 方法指定顺序一会 名称-值对参数。该软件将元素规范化,使它们的和为1 . |
结构 | 一个结构
|
如果为两者设置值权重
和之前
,将权重重新规格化,使其相加等于各自类中的先验概率值。
例子:“前”、“制服”
数据类型:字符
|字符串
|单
|双
|结构体
ResponseName
- - - - - -响应变量名
“Y”
(默认)|特征向量|字符串标量
响应变量名,指定为字符向量或字符串标量。
如果你提供
Y
,然后你可以使用ResponseName
为响应变量指定名称。如果你提供
ResponseVarName
或公式
,那么你就不能使用ResponseName
.
例子:“ResponseName”、“反应”
数据类型:字符
|字符串
规模
- - - - - -距离范围内
性病(X, omitnan)
(默认)|非负标量值的向量
距离刻度,指定为逗号分隔的对,由“规模”
和一个包含非负标量值的向量,其长度等于中的列数X
.每一个坐标差X
的对应元素对查询点进行缩放规模
.这个论点只有在“距离”
是“seuclidean”
.
你不能同时指定“标准化”
其中任何一个“规模”
或“浸”
.
数据类型:单
|双
ScoreTransform
- - - - - -分数转换
“没有”
(默认)|“doublelogit”
|“invlogit”
|“ismax”
|“分对数”
|函数处理|……
分数转换,指定为字符向量、字符串标量或函数句柄。
这个表总结了可用的字符向量和字符串标量。
价值 | 描述 |
---|---|
“doublelogit” |
1 / (1 +e2x) |
“invlogit” |
日志(x/ (1 -x)) |
“ismax” |
将分数最大的类的分数设置为1,并将所有其他类的分数设置为0 |
“分对数” |
1 / (1 +e- - - - - -x) |
“没有” 或“身份” |
x(转换) |
“标志” |
1x< 0 为0x= 0 1x> 0 |
“对称” |
2x- 1 |
“symmetricismax” |
将分数最大的类的分数设置为1,并将所有其他类的分数设置为-1 |
“symmetriclogit” |
2 / (1 +e- - - - - -x) - 1 |
对于MATLAB函数或您定义的函数,使用它的函数句柄进行分数变换。函数句柄必须接受一个矩阵(原始分数)并返回一个相同大小的矩阵(转换后的分数)。
例子:“ScoreTransform”、“分对数”
数据类型:字符
|字符串
|function_handle
标准化
- - - - - -标志来标准化预测器
假
(默认)|真正的
标志来标准化预测器,指定为逗号分隔的一对,由“标准化”
和真正的
(1
)或假
(0)
.
如果你设置“标准化”,真的
,然后软件将预测数据的每列居中并缩放(X
)分别用列均值和标准差表示。
该软件没有标准化分类预测器,如果所有预测器都是分类的,则抛出错误。
你不能同时指定“标准化”,1
其中任何一个“规模”
或“浸”
.
将预测器数据标准化是一种很好的做法。
例子:“标准化”,真的
数据类型:逻辑
权重
- - - - - -观察权重
正数值的数值向量|变量的名称资源描述
CVPartition
- - - - - -交叉验证分区
[]
(默认)|cvpartition
分区对象
交叉验证分区,指定为cvpartition
创建的分区对象cvpartition
.分区对象指定交叉验证的类型以及训练集和验证集的索引。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:假设您创建一个随机分区,对500个观察结果进行5次交叉验证cvp = cvpartition(500,'KFold',5)
.然后,您可以使用指定交叉验证的模型“CVPartition”,本量利
.
坚持
- - - - - -保留验证的部分数据
(0,1)范围内的标量值
用于抵制验证的数据的一部分,指定为范围(0,1)中的标量值。如果你指定‘坚持’,p
,然后软件完成以下步骤:
随机选择和保留
p * 100
%的数据作为验证数据,并使用其余的数据训练模型。存储紧凑的,训练过的模型
训练有素的
属性的交叉验证模型。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“坚持”,0.1
数据类型:双
|单
KFold
- - - - - -折叠数
10
(默认)|大于1的正整数
交叉验证模型中使用的折叠数,指定为大于1的正整数。如果你指定KFold, k
,然后软件完成以下步骤:
将数据随机划分为
k
集。对于每个集合,保留该集合作为验证数据,并使用另一个集合训练模型
k
- 1集。存储
k
紧凑,训练有素的模型k
中的-by-1单元格向量训练有素的
属性的交叉验证模型。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“KFold”,5
数据类型:单
|双
Leaveout
- - - - - -保留一个交叉验证标志
“关闭”
(默认)|“上”
保留一个交叉验证标志,指定为“上”
或“关闭”
.如果你指定“Leaveout”,“上”
,那么对于每一个n观察(n是否指定了观察数(不包括遗漏的观察数)NumObservations
属性),软件完成以下步骤:
保留一个观察结果作为验证数据,并使用另一个来训练模型n- 1次观察。
存储n紧凑,训练有素的模型n中的-by-1单元格向量
训练有素的
属性的交叉验证模型。
要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition
,坚持
,KFold
,或Leaveout
.
例子:“Leaveout”,“上”
OptimizeHyperparameters
- - - - - -待优化参数
“没有”
(默认)|“汽车”
|“所有”
|合格参数名称的字符串数组或单元格数组|向量的optimizableVariable
对象
参数要优化,指定为逗号分隔的对,由“OptimizeHyperparameters”
和以下其中之一:
“没有”
-不要优化。“汽车”
——使用{‘距离’,‘NumNeighbors}
.“所有”
—优化所有符合条件的参数。合格参数名称的字符串数组或单元格数组。
向量的
optimizableVariable
的输出hyperparameters
.
优化尝试最小化交叉验证的损失(错误)fitcknn
通过改变参数。有关交叉验证丢失的信息(尽管是在不同的上下文中),请参见分类损失.要控制交叉验证类型和优化的其他方面,请使用HyperparameterOptimizationOptions
名称-值对。
请注意
的价值“OptimizeHyperparameters”
覆盖使用其他名称-值参数指定的任何值。例如,设置“OptimizeHyperparameters”
来“汽车”
原因fitcknn
参数对应的超参数“汽车”
选项,并忽略超参数的任何指定值。
符合条件的参数fitcknn
是:
距离
- - - - - -fitcknn
搜索中“cityblock”
,“chebychev”
,“相关”
,的余弦
,“欧几里得”
,“汉明”
,“jaccard”
,“mahalanobis”
,闵可夫斯基的
,“seuclidean”
,“枪兵”
.DistanceWeight
- - - - - -fitcknn
搜索中“平等”
,“逆”
,“squaredinverse”
.指数
- - - - - -fitcknn
默认情况下,在范围内的正实值之间搜索(0.5, 3)
.NumNeighbors
- - - - - -fitcknn
在正整数值之间搜索,默认情况下在范围内按对数缩放[1,马克斯(2轮(NumObservations / 2)))
.标准化
- - - - - -fitcknn
值之间的搜索“真正的”
和“假”
.
通过传递vector来设置非默认参数optimizableVariable
具有非默认值的对象。例如,
负载fisheriris参数=超参数(“fitcknn”量,物种);参数(1)。Range = [1,20];
通过参数个数
的价值OptimizeHyperparameters
.
默认情况下,迭代显示出现在命令行中,并根据优化中的超参数的数量显示图形。对于优化和绘图,目标函数是误分类率。要控制迭代显示,请设置详细的
的字段“HyperparameterOptimizationOptions”
名称-值参数。要控制情节,设置ShowPlots
的字段“HyperparameterOptimizationOptions”
名称-值参数。
示例请参见优化拟合KNN分类器.
例子:“汽车”
HyperparameterOptimizationOptions
- - - - - -优化选项
结构
优化选项,指定为结构。的效果OptimizeHyperparameters
名称-值参数。结构中的所有字段都是可选的。
字段名 | 值 | 默认的 |
---|---|---|
优化器 |
|
“bayesopt” |
AcquisitionFunctionName |
获取函数,其名称包括 |
“expected-improvement-per-second-plus” |
MaxObjectiveEvaluations |
目标函数评价的最大次数。 | 30. 为“bayesopt” 和“randomsearch” ,和整个网格“gridsearch” |
MaxTime |
时间限制,指定为正实标量。时间限制以秒为单位,用 |
正 |
NumGridDivisions |
为“gridsearch” ,表示每个维度的值的个数。该值可以是一个给出每个维度值数量的正整数向量,也可以是一个适用于所有维度的标量。对于类别变量,该字段将被忽略。 |
10 |
ShowPlots |
指示是否显示图形的逻辑值。如果真正的 ,该字段根据迭代次数绘制最佳观测目标函数值。如果你使用贝叶斯优化(优化器 是“bayesopt” ),则该字段也绘制出最佳估计的目标函数值。最佳观测目标函数值和最佳估计目标函数值对应于BestSoFar(观察) 和BestSoFar (estim)。 列的迭代显示,分别。您可以在属性中找到这些值ObjectiveMinimumTrace 和EstimatedObjectiveMinimumTrace 的Mdl。HyperparameterOptimizationResults .如果问题包含一个或两个优化参数的贝叶斯优化,那么ShowPlots 并根据参数绘制了目标函数模型。 |
真正的 |
SaveIntermediateResults |
指示何时是否保存结果的逻辑值优化器 是“bayesopt” .如果真正的 ,该字段将覆盖名为“BayesoptResults” 在每次迭代中。变量是aBayesianOptimization 对象。 |
假 |
详细的 |
在命令行显示:
详细信息请参见 |
1 |
UseParallel |
指示是否并行运行贝叶斯优化的逻辑值,这需要并行计算工具箱™。由于并行时序的不可再现性,并行贝叶斯优化不一定产生可再现的结果。详情请参见并行贝叶斯优化. | 假 |
重新分区 |
指示是否在每次迭代时重新划分交叉验证的逻辑值。如果这个字段是 设置 |
假 |
只使用以下三个选项中的一个。 | ||
CVPartition |
一个cvpartition 对象,如由cvpartition |
“Kfold”,5 如果不指定交叉验证字段 |
坚持 |
范围内的标量(0,1) 表示抵制分数 |
|
Kfold |
大于1的整数 |
例子:“HyperparameterOptimizationOptions”、结构(MaxObjectiveEvaluations, 60)
数据类型:结构体
输出参数
Mdl
——培训k-最近邻分类模型
ClassificationKNN
模型对象|ClassificationPartitionedModel
交叉验证的模型对象
训练有素的k-最近邻分类模型,返回为ClassificationKNN
模型对象或ClassificationPartitionedModel
交叉验证的模型对象。
如果设置任何名称-值对参数KFold
,坚持
,CrossVal
,或CVPartition
,然后Mdl
是一个ClassificationPartitionedModel
交叉验证的模型对象。否则,Mdl
是一个ClassificationKNN
模型对象。
的属性来引用Mdl
,使用点表示法。例如,要在命令窗口中显示距离度量,请输入Mdl。D我stance
.
更多关于
提示
在训练一个模型之后,您可以生成预测新数据标签的C/ c++代码。生成C/ c++代码需要MATLAB编码器™.详情请参见代码生成简介.
算法
nan
或<定义>
S表示缺失观测值。的行为fitcknn
当数据集或权重包含缺失的观察时。如果指定
成本
,之前
,权重
参数时,输出模型对象将指定的值存储在成本
,之前
,W
属性,分别。的成本
属性存储用户指定的成本矩阵(C)就这样。的之前
和W
属性分别存储归一化后的先验概率和观测权值。详情请参见错误分类成本矩阵,先验概率和观察权重.该软件使用
成本
属性用于预测,而不是训练。因此,成本
不是只读的;您可以在创建训练过的模型后使用点表示法更改属性值。假设你设
“标准化”,真的
.如果你指定
规模
其中任何一个之前
或权重
,然后软件用加权标准差对观测距离进行缩放。如果你指定
浸
其中任何一个之前
或权重
,然后软件对距离应用加权协方差矩阵。换句话说,
选择
虽然fitcknn
可以训练一个多类KNN分类器,你可以将一个多类学习问题简化为一系列的KNN二元学习者使用fitcecoc
.
扩展功能
自动平行支撑
通过使用并行计算工具箱™自动并行运行计算来加速代码。
要执行并行超参数优化,请使用“HyperparameterOptimizationOptions”、结构(UseParallel,真的)
类调用中的名称-值参数fitcknn
函数。
有关并行超参数优化的更多信息,请参见并行贝叶斯优化.
有关并行计算的一般信息,请参见运行MATLAB函数与自动并行支持(并行计算工具箱).
GPU数组
通过使用并行计算工具箱™在图形处理单元(GPU)上运行来加速代码。
使用注意事项和限制:
默认情况下,
fitcknn
采用穷举最近邻搜索算法gpuArray
输入参数。不能指定名称-值参数
“NSMethod”
作为“kdtree”
.不能指定名称-值参数
“距离”
作为函数句柄。不能指定名称-值参数
“IncludeTies”
作为真正的
.fitcknn
如果适用以下任何一种,则适合GPU上的模型:输入参数
X
是一个gpuArray
对象。输入参数
资源描述
包含gpuArray
预测变量。
有关更多信息,请参见在图形处理器上运行MATLAB函数(并行计算工具箱).
版本历史
在R2014a中介绍
MATLAB命令
你点击了一个对应于这个MATLAB命令的链接:
在MATLAB命令窗口中输入命令来运行该命令。Web浏览器不支持MATLAB命令。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。