主要内容

fitcknn

适合k-最近邻分类器

描述

Mdl= fitcknn (资源描述ResponseVarName返回一个k-最近邻分类模型基于表中的输入变量(也称为预测因子、特征或属性)资源描述输出(响应)资源描述。ResponseVarName

Mdl= fitcknn (资源描述公式返回一个k-基于表中输入变量的最近邻分类模型资源描述公式是否有响应的解释模型和预测变量的子集资源描述

Mdl= fitcknn (资源描述Y返回一个k-基于表中预测变量的最近邻分类模型资源描述和响应数组Y

例子

Mdl= fitcknn (XY返回一个k-基于预测器数据的最近邻分类模型X和响应Y

例子

Mdl= fitcknn (___名称,值使用前面任何一种语法,用一个或多个名称-值对参数指定的附加选项拟合模型。例如,您可以指定绑定打破算法、距离度量或观察权重。

例子

全部折叠

训练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];

你可以通过Mdl预测标记新的测量或crossval交叉验证分类器。

加载费雪的虹膜数据集。

负载fisheririsX = meas;Y =物种;

X是一个数字矩阵,包含150个鸢尾花的四个花瓣测量值。Y是包含相应虹膜种类的特征向量的单元格数组。

使用闵可夫斯基度量训练一个3近邻分类器。要使用闵可夫斯基度量,必须使用穷尽式搜索器。标准化非分类预测器数据是一个很好的实践。

Mdl = fitcknn(X,Y,“NumNeighbors”3,...“NSMethod”“详尽”“距离”闵可夫斯基的...“标准化”1);

Mdl是一个ClassificationKNN分类器。

你可以检查的性质Mdl通过双击Mdl在工作区窗口中。这将打开变量编辑器。

训练k-使用卡方距离的最近邻分类器。

加载费雪的虹膜数据集。

负载fisheririsX = meas;%预测Y =物种;%响应

之间的卡方距离j维点x而且z

χ x z j 1 J w j x j - z j 2

在哪里 w j 重量与尺寸有关吗j

指定卡方距离函数。距离函数必须:

  • 取一排X,例如,x,和矩阵Z

  • 比较x每一行Z

  • 返回一个向量D的长度 n z ,在那里 n z 的行数是多少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分类器。10倍的分类误差为4%。

将该分类器与使用不同加权方案的分类器进行比较。

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

第二种加权方案产生的分类器具有更好的样本外性能。

这个例子展示了如何使用自动优化超参数fitcknn.本例使用Fisher虹膜数据。

加载数据。

负载fisheririsX = meas;Y =物种;

通过使用自动超参数优化,找到最小化5倍交叉验证损失的超参数。

为了重现性,设置随机种子并使用“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.54254 | 0.026667 | 0.026667 | 30 |余弦| | 2 |接受| 0.04 | 0.26232 | 0.026667 | 0.027197 | 2 | chebychev | | 3 |接受| 0.19333 | 0.15759 | 0.026667 | 0.030324 | 1 |汉明| | 4 |接受| 0.33333 | 0.13789 | 0.026667 | 0.033313 | | 31日斯皮尔曼| | 5 |的| 0.02 | 0.12 | 0.02 | 0.020648 | 6 |余弦| | 6 |接受| 0.073333 | 0.090568 | 0.02 | 0.023082 | 1 |相关| | | 7日接受| 0.06 | 0.1765 | 0.02 | 0.020875 | 2 | cityblock | | |接受8 | 0.04 | 0.09667 | 0.02 | 0.020622 | 1 |欧几里得| | | 9日接受| 0.24 | 0.18413 | 0.02 | 0.020562 | 74 | mahalanobis | | 10 | | 0.04 | 0.12729| 0.02 | 0.020649 | 1 |闵可夫斯基| | | 11日接受| 0.053333 | 0.14621 | 0.02 | 0.020722 | 1 | seuclidean | | | 12日接受| 0.19333 | 0.089278 | 0.02 | 0.020701 | 1 | jaccard | | | 13日接受| 0.04 | 0.097394 | 0.02 | 0.029203 | 1 | cos | | | 14日接受| 0.04 | 0.090084 | 0.02 | 0.031888 | 75 |余弦| | 15 |接受| 0.04 | 0.092301 | 0.02 | 0.020076 | 1 | cos | | | 16日接受| 0.093333 | 0.18574 | 0.02 | 0.020073 | 75 |欧几里得| | | 17日接受| 0.093333 | 0.098888 | 0.02 | 0.02007 |18 75 |闵可夫斯基| | |接受| 0.1 | 0.10177 | 0.02 | 0.020061 | 75 | chebychev | | | 19日接受| 0.15333 | 0.091498 | 0.02 | 0.020044 | 75 | seuclidean | | |接受20 | 0.1 | 0.12453 | 0.02 | 0.020044 | 75 | cityblock  | |=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | NumNeighbors距离| | | | |结果运行时| |(观察)| (estim) | | ||=====================================================================================================| | 21日|接受| 0.033333 | 0.12905 | 0.02 | 0.020046 | 75 |相关| | | 22日接受| 0.033333 | 0.17091 | 0.02 | 0.02656 | 9 |余弦| | | 23日接受| 0.033333 | 0.28665 | 0.02 | 0.02854 | 9 |余弦| | | 24日接受| 0.02 | 0.12217 | 0.02 | 0.028607 | 1 | chebychev | | | 25日接受| 0.02 | 0.11392 | 0.02 | 0.022264 | 1 | chebychev | | | 26日接受| 0.02 | 0.092565 | 0.02 | 0.021439 | 1| chebychev | | 27 | Accept | 0.02 | 0.098058 | 0.02 | 0.020999 | 1 | chebychev | | 28 | Accept | 0.66667 | 0.21811 | 0.02 | 0.020008 | 75 | hamming | | 29 | Accept | 0.04 | 0.17081 | 0.02 | 0.020008 | 12 | correlation | | 30 | Best | 0.013333 | 0.14369 | 0.013333 | 0.013351 |欧几里得|

图中包含一个轴。标题为Min目标vs.函数计算数量的轴包含2个类型为line的对象。这些对象代表最小观测目标,估计最小目标。

图中包含一个轴。目标函数模型的轴包含直线、曲面、轮廓等5个对象。这些对象代表观测点,模型均值,下一个点,模型最小可行。

__________________________________________________________ 优化完成。最大目标达到30个。总函数评估:30总运行时间:61.4049秒总目标函数评估时间:4.5591最佳观测可行点:NumNeighbors Distance ____________ _________ 6 euclidean观测目标函数值= 0.013333估计目标函数值= 0.013351函数评估时间= 0.14369最佳估计可行点(根据模型):NumNeighbors Distance ____________ _________ 6欧几里得估计目标函数值= 0.013351估计函数评估时间= 0.14301
Mdl = ClassificationKNN ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150 HyperparameterOptimizationResults: [1x1 BayesianOptimization] Distance: 'euclidean' NumNeighbors: 6 Properties, Methods

输入参数

全部折叠

用于训练模型的示例数据,指定为表。每行资源描述对应一个观测值,每一列对应一个预测变量。可选地,资源描述可以为响应变量包含一个额外的列。不允许使用字符向量的单元格数组以外的多列变量和单元格数组。

  • 如果资源描述包含响应变量,您希望在中使用所有剩余变量资源描述作为预测器,然后通过使用指定响应变量ResponseVarName

  • 如果资源描述包含响应变量,并且您希望仅在中使用其余变量的子集资源描述作为预测器,然后通过使用指定一个公式公式

  • 如果资源描述不包含响应变量,然后通过使用Y.响应变量的长度和其中的行数资源描述必须是相等的。

数据类型:表格

响应变量名,指定为中的变量名资源描述

您必须指定ResponseVarName作为字符向量或字符串标量。例如,如果响应变量Y存储为资源描述。Y,然后指定为“Y”.否则,软件处理的所有列资源描述,包括Y,作为训练模型时的预测因子。

响应变量必须是类别、字符或字符串数组;向量:逻辑或数字向量;或者是字符向量的单元格数组。如果Y是字符数组,则响应变量的每个元素必须对应于数组中的一行。

类指定类的顺序是一个很好的实践一会名称-值参数。

数据类型:字符|字符串

响应变量和预测变量子集的解释模型,在表单中指定为字符向量或字符串标量“Y ~ x1 + x2 + x3”.在这种形式下,Y表示响应变量,和x1x2,x3表示预测变量。

中指定变量的子集资源描述使用公式作为训练模型的预测因子。如果您指定了一个公式,那么该软件不使用任何变量资源描述没有出现在公式

公式中的变量名必须同时为资源描述Tbl.Properties.VariableNames)和有效的MATLAB®标识符。中的变量名可以验证资源描述通过使用isvarname函数。变量名无效,则可以使用matlab.lang.makeValidName函数。

数据类型:字符|字符串

类标签,指定为类别、字符或字符串数组、逻辑或数字向量或字符向量的单元格数组。每行Y的对应行的分类X

软件考虑(空字符向量),""(空字符串),< >失踪,<定义>Y丢失的值。因此,该软件不会使用缺少响应的观察进行训练。

数据类型:分类|字符|字符串|逻辑|||细胞

预测器数据,指定为数值矩阵。

每行对应一个观察结果(也称为实例或示例),每列对应一个预测变量(也称为特征)。

的长度Y的行数X必须是相等的。

中出现的顺序指定预测符的名称X,使用PredictorNames名称-值对参数。

数据类型:|

名称-值对参数

的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:“NumNeighbors”3“NSMethod”、“穷举”,“距离”,“闵可夫斯基”使用最近邻搜索方法和闵可夫斯基度量为三个最近邻指定分类器。

请注意

方法时,不能使用任何交叉验证名称-值对参数“OptimizeHyperparameters”名称-值对参数。您可以修改交叉验证“OptimizeHyperparameters”只有使用“HyperparameterOptimizationOptions”名称-值对参数。

模型参数

全部折叠

所使用的抢断算法预测方法,如果多个类具有相同的最小代价,则指定为由逗号分隔的对组成“BreakTies”和以下其中之一:

  • “最小”—使用绑定组中最小的索引。

  • “最近的”—使用绑定组中最近的类。

  • “随机”-在打平的组中使用随机的决胜局。

缺省情况下,当多个类之间具有相同数量的最近点时,就会发生联系K最近的邻居。

例子:“BreakTies”,“最近”

的叶节点中的最大数据点数kD-tree,指定为逗号分隔的对,由“BucketSize”一个正整数值。这个论点只有在NSMethod“kdtree”

例子:“BucketSize”,40岁

数据类型:|

类别预测器标志,指定为逗号分隔的对,由“CategoricalPredictors”和以下其中之一:

  • “所有”-所有预测因素都是绝对的。

  • []-没有绝对的预测因素。

预测数据fitcknn必须是全部连续的或全部直言的。

  • 如果预测器数据在一个表中(资源描述),fitcknn如果一个变量是逻辑向量、分类向量、字符数组、字符串数组或字符向量的单元格数组,则假定该变量是分类的。如果资源描述的值,则必须指定的值“CategoricalPredictors”fitcknn可以确定如何处理所有预测变量,作为连续变量或分类变量。

  • 如果预测器数据为矩阵(X),fitcknn假设所有预测因子都是连续的。识别所有的预测因子X如分类,指定“CategoricalPredictors”作为“所有”

当你设置CategoricalPredictors“所有”,默认距离“汉明”

例子:“CategoricalPredictors”、“所有”

用于训练的类名,指定为类别、字符或字符串数组;向量:逻辑或数字向量;或者是字符向量的单元格数组。一会必须具有与响应变量相同的数据类型资源描述Y

如果一会是字符数组,则每个元素必须对应数组中的一行。

使用一会:

  • 在培训期间指定课程的顺序。

  • 指定与类顺序对应的任何输入或输出参数维度的顺序。例如,使用一会指定…尺寸的顺序成本或返回的分类分数的列顺序预测

  • 选择用于培训的类的子集。例如,假设集合中所有不同的类名Y{' a ', ' b ', ' c '}.用课堂上的观察来训练模型“一个”而且“c”只是,指定“类名”,{' a ', ' c '}

的默认值一会响应变量中所有不同类名的集合在吗资源描述Y

例子:“类名”,{' b ', ' g '}

数据类型:分类|字符|字符串|逻辑|||细胞

点错误分类的代价,用逗号分隔的对表示,由“成本”和以下其中之一:

  • 方阵,其中成本(i, j)将一个点分类的成本是多少j如果它真正的阶级是(即行对应真实的类,列对应预测的类)。的相应行和列的类顺序成本,另外指定一会名称-值对参数。

  • 结构年代有两个字段的:S.ClassNames将组名作为相同类型的变量包含Y,S.ClassificationCosts包含成本矩阵。

默认为成本(i, j) = 1如果我~ = j,成本(i, j) = 0如果我=我

数据类型:||结构体

协方差矩阵,以逗号分隔的对组成“浸”在计算马氏距离时,用标量值的正定矩阵表示协方差矩阵。这个论点只有在“距离”“mahalanobis”

你不能同时指定“标准化”任意一个“规模”“浸”

数据类型:|

距离度量,指定为逗号分隔的对,由“距离”和有效的距离度量名称或函数句柄。允许的距离度量名称取决于您选择的邻居搜索器方法(请参阅NSMethod).

NSMethod 距离度量名称
详尽的 的任何距离度量ExhaustiveSearcher
kdtree “cityblock”“chebychev”“欧几里得”,或闵可夫斯基的

该表包括有效的距离度量ExhaustiveSearcher

距离度量名称 描述
“cityblock” 城市街区距离。
“chebychev” 切比雪夫距离(最大坐标差)。
“相关” 1减去观测值之间的样本线性相关(被视为值序列)。
的余弦 1减去观测值之间夹角的余弦(作为向量处理)。
“欧几里得” 欧氏距离。
“汉明” 汉明距离,不同坐标的百分比。
“jaccard” 1减去杰卡德系数,非零坐标的百分比不同。
“mahalanobis” 马氏距离,用正定协方差矩阵计算C.的默认值C样本协方差矩阵是X,按X (X, omitrows).指定不同的值C,使用“浸”名称-值对参数。
闵可夫斯基的 闵可夫斯基距离。默认指数为2.要指定不同的指数,请使用“指数”名称-值对参数。
“seuclidean” 标准化欧氏距离。各坐标之间的差X查询点被缩放,即除以一个缩放值年代.的默认值年代标准差是从哪里计算出来的XS = std(X,'omitnan').为指定另一个值年代,使用规模名称-值对参数。
“枪兵” 1减去观测值之间的样本斯皮尔曼秩相关(被视为值序列)。
@distfun

距离函数句柄。distfun有形式

函数D2 = distfun(ZI,ZJ)距离计算%...
在哪里

  • 是一个1——- - - - - -N包含一行的向量XY

  • ZJ是一个平方米——- - - - - -N矩阵包含多行XY

  • D2是一个平方米——- - - - - -1距离向量,和D2 (k)观测值之间的距离是多少而且ZJ (k,:)

如果你指定CategoricalPredictors作为“所有”,则默认距离度量为“汉明”.否则,默认的距离度量为“欧几里得”

有关定义,请参见距离度量

例子:“距离”,“闵可夫斯基”

数据类型:字符|字符串|function_handle

距离加权函数,指定为由逗号分隔的对组成“DistanceWeight”一个函数句柄或者这个表中的一个值。

价值 描述
“平等” 没有权重
“逆” 重量是1/距离
“squaredinverse” 重量是1/距离2
@fcn fcn是一个函数,它接受非负距离的矩阵,并返回包含非负距离权重的相同大小的矩阵。例如,“squaredinverse”等于@ (d) d。^ (2)

例子:“DistanceWeight”、“逆”

数据类型:字符|字符串|function_handle

闵可夫斯基距离指数,指定为逗号分隔的对,由“指数”一个正标量。这个论点只有在“距离”闵可夫斯基的

例子:“指数”,3

数据类型:|

领带包含标志,指定为由逗号分隔的对组成“IncludeTies”和表示是否的逻辑值预测包含距离值等于的所有邻居K最小距离。如果IncludeTies真正的预测包括所有这些邻居。否则,预测使用完全K邻居。

例子:“IncludeTies”,真的

数据类型:逻辑

最近邻搜索方法,指定为逗号分隔的对,由“NSMethod”而且“kdtree”“详尽”

  • “kdtree”—创建并使用kd-树来寻找最近的邻居。“kdtree”当距离度量是下列之一时有效:

    • “欧几里得”

    • “cityblock”

    • 闵可夫斯基的

    • “chebychev”

  • “详尽”—使用穷举搜索算法。在预测一个新点的类时xnew,软件计算所有点的距离值Xxnew寻找最近的邻居。

默认为“kdtree”X10或者少列,X不是疏还是个gpuArray,距离度规为a“kdtree”类型;否则,“详尽”

例子:“NSMethod”、“详尽”

中最近邻居的个数X在预测时查找用于分类的每个点,指定为逗号分隔的对,由“NumNeighbors”一个正整数值。

例子:“NumNeighbors”,3

数据类型:|

预测器变量名,指定为唯一名称的字符串数组或唯一字符向量的单元格数组。的功能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
结构

一个结构年代有两个字段:

  • S.ClassNames作为相同类型的变量包含类名Y

  • S.ClassProbs包含相应先验概率的向量。软件将元素规范化,使它们的和为1

如果你同时设置两个值权重而且之前时,将权重重新规整,使其加起来等于相应类别中的先验概率值。

例子:“前”、“制服”

数据类型:字符|字符串|||结构体

响应变量名,指定为字符向量或字符串标量。

  • 如果你提供Y,那么你就可以使用了“ResponseName”为响应变量指定名称。

  • 如果你提供ResponseVarName公式,那么你就不能用了“ResponseName”

例子:“ResponseName”、“响应”

数据类型:字符|字符串

距离刻度,指定为逗号分隔的对,由“规模”和包含非负标量值的向量,其长度等于中的列数X.各坐标之间的差X的对应元素对查询点进行缩放规模.这个论点只有在“距离”“seuclidean”

你不能同时指定“标准化”任意一个“规模”“浸”

数据类型:|

分数转换,指定为字符向量、字符串标量或函数句柄。

该表总结了可用的字符向量和字符串标量。

价值 描述
“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任意一个“规模”“浸”

将预测数据标准化是一个很好的实践。

例子:“标准化”,真的

数据类型:逻辑

观察权重,由逗号分隔的对组成“重量”和一个数值向量的正值或变量的名称资源描述.软件对每一行的观察结果进行加权X资源描述中对应的值权重.的大小权重必须等于的行数X资源描述

如果将输入数据指定为表资源描述,然后权重可以是变量名中的资源描述它包含一个数值向量。在这种情况下,您必须指定权重作为字符向量或字符串标量。例如,如果权重向量W存储为资源描述。W,然后指定为' W '.否则,软件处理的所有列资源描述,包括W,作为预测因子或训练模型时的响应。

软件规范化权重求和为各类的先验概率值。

默认情况下,权重(n, 1),在那里n观察的数量在吗X资源描述

数据类型:||字符|字符串

交叉验证选项

全部折叠

交叉验证标志,指定为逗号分隔的对,由“Crossval”而且“上”“关闭”

如果你指定“上”,然后软件实现10倍交叉验证。

若要重写此交叉验证设置,请使用以下名称-值对参数之一:CVPartition坚持KFold,或Leaveout.要创建交叉验证的模型,一次只能使用一个交叉验证的名称-值对参数。

或者,交叉验证Mdl稍后使用crossval方法。

例子:“Crossval”,“上”

交叉验证分区,指定为cvpartition创建的分区对象cvpartition.分区对象指定交叉验证的类型以及训练集和验证集的索引。

要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition坚持KFold,或Leaveout

例子:假设您创建一个随机分区,对500个观察结果进行5次交叉验证,使用cvp = cvpartition(500,'KFold',5).然后,您可以通过使用指定交叉验证的模型“CVPartition”,本量利

用于拒绝验证的数据的百分比,指定为范围(0,1)中的标量值。如果你指定‘坚持’,p,然后软件完成以下步骤:

  1. 随机选择并保留p * 100%的数据作为验证数据,并使用其余数据训练模型。

  2. 将紧凑的、训练过的模型存储在训练有素的交叉验证模型的属性。

要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition坚持KFold,或Leaveout

例子:“坚持”,0.1

数据类型:|

交叉验证模型中使用的折叠数,指定为大于1的正整数值。如果你指定KFold, k,然后软件完成以下步骤:

  1. 将数据随机划分为k集。

  2. 对于每个集合,保留该集合作为验证数据,并使用另一个集合训练模型k- 1集。

  3. 存储k紧凑,训练有素的模型k的-by-1单元格向量训练有素的交叉验证模型的属性。

要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition坚持KFold,或Leaveout

例子:“KFold”,5

数据类型:|

省略一个交叉验证标志,指定为“上”“关闭”.如果你指定“Leaveout”,“上”,然后对每个的n观察(n(不包括遗漏的观测数据)的观测数据数目是否已列明NumObservations属性的模型),软件完成这些步骤:

  1. 保留一个观察数据作为验证数据,并使用另一个数据训练模型n- 1次观察。

  2. 存储n紧凑,训练有素的模型在一个n的-by-1单元格向量训练有素的交叉验证模型的属性。

要创建交叉验证的模型,您只能指定以下四个名称-值参数中的一个:CVPartition坚持KFold,或Leaveout

例子:“Leaveout”,“上”

超参数优化选项

全部折叠

参数进行优化,指定为由逗号分隔的对组成“OptimizeHyperparameters”和以下其中之一:

  • “没有”-不要优化。

  • “汽车”——使用{‘距离’,‘NumNeighbors}

  • “所有”-优化所有符合条件的参数。

  • 符合条件的参数名的字符串数组或单元格数组。

  • 向量的optimizableVariable对象的输出hyperparameters

优化尝试最小化交叉验证损失(错误)fitcknn通过改变参数。有关交叉验证丢失的信息(尽管是在不同的上下文中),请参见分类损失.若要控制交叉验证类型和优化的其他方面,请使用HyperparameterOptimizationOptions名称-值对。

请注意

“OptimizeHyperparameters”值覆盖使用其他名称-值对参数设置的任何值。例如,设置“OptimizeHyperparameters”“汽车”导致“汽车”要应用的值。

符合条件的参数fitcknn是:

  • 距离- - - - - -fitcknn搜索中“cityblock”“chebychev”“相关”的余弦“欧几里得”“汉明”“jaccard”“mahalanobis”闵可夫斯基的“seuclidean”,“枪兵”

  • DistanceWeight- - - - - -fitcknn搜索中“平等”“逆”,“squaredinverse”

  • 指数- - - - - -fitcknn默认情况下,搜索范围内的正实数(0.5, 3)

  • NumNeighbors- - - - - -fitcknn在正整数值中搜索,默认情况下在范围内按对数缩放[1,马克斯(2轮(NumObservations / 2)))

  • 标准化- - - - - -fitcknn在值之间搜索“真正的”而且“假”

通过传递的向量来设置非默认参数optimizableVariable具有非默认值的对象。例如,

负载fisheririsParams =超参数(“fitcknn”量,物种);参数(1)。Range = [1,20];

通过参数个数作为价值OptimizeHyperparameters

默认情况下,在命令行上出现迭代显示,并根据优化中的超参数数量显示图形。对于优化和绘图,目标函数为Log(1 +交叉验证损失)用于回归和分类的误分类率。要控制迭代显示,请设置详细的字段“HyperparameterOptimizationOptions”名称-值对参数。为了控制情节,设置ShowPlots字段“HyperparameterOptimizationOptions”名称-值对参数。

有关示例,请参见优化拟合KNN分类器

例子:“汽车”

用于优化的选项,指定为逗号分隔的对,由“HyperparameterOptimizationOptions”还有一个结构。的效果OptimizeHyperparameters名称-值对参数。结构中的所有字段都是可选的。

字段名 默认的
优化器
  • “bayesopt”-使用贝叶斯优化。在内部,此设置调用bayesopt

  • “gridsearch”-使用网格搜索NumGridDivisions每个维度的值。

  • “randomsearch”-在其中随机搜索MaxObjectiveEvaluations点。

“gridsearch”以随机顺序进行搜索,使用统一抽样而不从网格中替换。优化后,可以使用命令获取网格顺序的表sortrows (Mdl.HyperparameterOptimizationResults)

“bayesopt”
AcquisitionFunctionName

  • “expected-improvement-per-second-plus”

  • “expected-improvement”

  • “expected-improvement-plus”

  • “expected-improvement-per-second”

  • “lower-confidence-bound”

  • “probability-of-improvement”

名称包括的获取函数每秒不能产生可重复的结果,因为优化依赖于目标函数的运行时间。名称包括的获取函数+当他们过度开发一个区域时,修改他们的行为。详情请参见采集函数类型

“expected-improvement-per-second-plus”
MaxObjectiveEvaluations 目标函数求值的最大个数。 30.“bayesopt”“randomsearch”,而整个电网为“gridsearch”
MaxTime

时间限制,指定为正实数。时间限制以秒为单位,由抽搐而且toc.运行时可能超过MaxTime因为MaxTime不中断函数求值。

NumGridDivisions “gridsearch”,表示每个维度中值的数量。该值可以是一个正整数向量,给出每个维度的值的数量,也可以是一个适用于所有维度的标量。对于分类变量,该字段将被忽略。 10
ShowPlots 指示是否显示图的逻辑值。如果真正的,该字段根据迭代次数绘制最佳目标函数值。如果有一个或两个优化参数,如果优化器“bayesopt”,然后ShowPlots还绘制了目标函数对参数的模型。 真正的
SaveIntermediateResults 时是否保存结果的逻辑值优化器“bayesopt”.如果真正的,此字段将覆盖名为“BayesoptResults”在每次迭代中。变量是aBayesianOptimization对象。
详细的

显示到命令行。

  • 0-无迭代显示

  • 1-迭代显示

  • 2-带有额外信息的迭代显示

详细信息请参见bayesopt详细的名称-值对参数。

1
UseParallel 指示是否并行运行贝叶斯优化的逻辑值,这需要并行计算工具箱™。由于并行计时的不可再现性,并行贝叶斯优化不一定产生可再现的结果。详细信息请参见并行贝叶斯优化
重新分区

指示是否在每次迭代中重新划分交叉验证的逻辑值。如果,优化器使用单个分区进行优化。

真正的通常会给出最健壮的结果,因为此设置考虑了分区噪声。然而,为了获得好的结果,真正的需要至少两倍的函数求值。

使用以下三个字段名中的一个。
CVPartition 一个cvpartition对象创建的cvpartition “Kfold”,5如果您没有指定任何交叉验证字段
坚持 范围内的标量(0,1)表示抵抗分数。
Kfold 大于1的整数。

例子:“HyperparameterOptimizationOptions”、结构(MaxObjectiveEvaluations, 60)

数据类型:结构体

输出参数

全部折叠

训练有素的k-最近邻分类模型,返回为aClassificationKNN模型对象或ClassificationPartitionedModel交叉验证的模型对象。

如果您设置了任何名称-值对参数KFold坚持CrossVal,或CVPartition,然后Mdl是一个ClassificationPartitionedModel交叉验证的模型对象。否则,Mdl是一个ClassificationKNN模型对象。

引用Mdl,使用点表示法。例如,要在命令窗口中显示距离度量,请输入Mdl。D我年代tance

更多关于

全部折叠

预测

ClassificationKNN预测一个点的分类xnew使用与此等价的程序:

  1. 找到NumNeighbors训练集中的点X最接近xnew

  2. 找到NumNeighbors响应值Y到那些最近的点。

  3. 分配分类标签ynew的值中后验概率最大Y

详细信息请参见后验概率预测文档。

提示

在训练模型之后,您可以生成C/ c++代码来预测新数据的标签。生成C/ c++代码需要MATLAB编码器™.详细信息请参见代码生成简介

算法

  • nan<定义>S表示缺失的观测值。下面描述的行为fitcknn当数据集或权重包含缺失观测值时。

    • 如果有任何值Y或者是少了一些重量fitcknn将这些值从Y的权重,以及对应的行X从数据来看。该软件重新规格化权重求和1

    • 如果指定标准化预测器(“标准化”,1)或标准化欧氏距离(“距离”、“seuclidean”),那么就不用秤了fitcknn在计算平均值和标准偏差之前,从单个预测器中删除缺失的观察值。换句话说,由软件实现的意思是而且性病“omitnan”每个预测器的选项。

    • 如果指定马氏距离(“距离”、“mahalanbois”)而不考虑协方差矩阵,则fitcknn删除X包含至少一个缺失值的。换句话说,由软件实现“omitrows”预测矩阵的选项X

  • 假设你设“标准化”,1

    • 如果你还指定之前权重,则软件考虑观测权值。具体来说,是预测器的加权平均值j

      x ¯ j B j w k x j k

      加权标准差是

      年代 j B j w k x j k x ¯ j

      在哪里Bj是指数的集合吗kxjk而且wk都不缺。

    • 如果你也设置“距离”、“mahalanobis”“距离”、“seuclidean”,那么你就不能指定规模.相反,软件:

      1. 计算每个预测器的平均值和标准差

      2. 使用步骤1的结果对数据进行标准化

      3. 使用各自的默认值计算距离参数值。

  • 如果你指定规模任意一个之前权重,然后软件用加权标准差对观测距离进行缩放。

  • 如果你指定任意一个之前权重,然后软件将加权协方差矩阵应用于距离。换句话说,

    C o v B w j B w j 2 B w j 2 B w j x j x ¯ x j x ¯

    在哪里B是指数的集合吗j因为观察到xj没有任何缺失的值和wj不是失踪。

选择

虽然fitcknn可以训练一个多类KNN分类器,你可以将一个多类学习问题简化为一系列KNN二元学习器使用fitcecoc

扩展功能

在R2014a中引入