主要内容

fitcknn

合身k最近的邻居分类器

描述

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

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

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

例子

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

例子

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

例子

全部折叠

训练k用于费舍尔的虹膜数据的最终邻居分类器,在哪里k,预测器中最近邻居的数量为5。

载入费雪的虹膜数据。

负载fisheririsX =量;Y =物种;

X是一个数字矩阵,包含四个花瓣测量150鸢尾。Y是包含相应虹膜种类的字符向量的细胞阵列。

火车5最接近的邻分类器。标准化非相似的预测器数据。

Mdl=Fitchnn(X,Y,“NumNeighbors”,5,'标准化'1)
Mdl = ClassificationKNN ResponseName: 'Y' CategoricalPredictors: [] ClassNames: {'setosa' 'versicolor' 'virginica'} ScoreTransform: 'none' NumObservations: 150距离:'euclidean' NumNeighbors: 5属性,方法

Mdl他是一个训练有素的人分类KNN分类器,它的一些属性出现在命令窗口中。

的属性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。Prior = [0.5 0.2 0.3];

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

载入费雪的虹膜数据集。

负载fisheririsX =量;Y =物种;

X是一个数字矩阵,包含四个花瓣测量150鸢尾。Y是包含相应虹膜种类的字符向量的细胞阵列。

使用Minkowski度量训练3-最近邻分类器。要使用Minkowski度量,必须使用穷举搜索器。标准化非分类预测数据是一种很好的做法。

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

Mdl是一个分类KNN分类器。

的属性Mdl通过双击Mdl在工作区窗口中。这将打开变量编辑器。

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

载入费雪的虹膜数据集。

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

卡方距离j维点xz

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

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

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

  • takeX,例如,x,矩阵Z

  • 比较x每一行Z

  • 返回一个向量D的长度 n z , 在哪里 n z 是行的行数Z.的每个元素D观察到的距离是否对应x每一行对应的观测值Z

Chisqrdist = @(x,z,wt)sqrt((bsxfun(@ minus,x,z)。^ 2)* wt);

本例使用任意权重进行说明。

训练一个3-最近邻分类器。标准化非分类预测数据是一个很好的实践。

k=3;w=[0.3;0.3;0.2;0.2];KNNMdl=fitchnn(X,Y,“距离”@ (x, Z) chiSqrDist (x, Z, w),...“NumNeighbors”K'标准化'1);

KNNMdl是一个分类KNN分类器。

使用默认的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”K“KFold”10'标准化'1);classError2 = kfoldLoss (CVKNNMdl2)
classError2 = 0.0400

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

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

加载数据。

负载fisheririsX =量;Y =物种;

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

为了重现性,设置随机种子并使用'预期改善加'采集功能。

rng(1) Mdl = fitcknn(X,Y,“OptimizeHyperparameters”“汽车”...“HyperparameterOptimizationOptions”...结构(“AcquisitionFunctionName”'预期改善加'))
|=====================================================================================================| | Iter | Eval客观客观| | | BestSoFar | BestSoFar | NumNeighbors距离| | | | |结果运行时| | | (estim(观察) .) | | | |=====================================================================================================||1|Best | 0.026667 | 1.9856 | 0.026667 | 0.026667 | 30 | cosine | | 2 | Accept | 0.04 | 0.5286 | 0.026667 | 0.027197 | 2 | chebychev | | 3 | Accept | 0.19333 | 0.36738 | 0.026667 | 0.030324 | 1 | hamming | | 4 | Accept | 0.33333 | 0.35378 | 0.026667 | 0.033313 | 31 | spearman | | 5 | Best | 0.02 | 0.58534 | 0.02 | 0.020648 | 6 | cosine | | 6 | Accept | 0.073333 | 0.20681 | 0.02 | 0.023082 | 1 | correlation | | 7 | Accept | 0.06 | 0.32763 | 0.02 | 0.020875 | 2 | cityblock | | 8 | Accept | 0.04 | 0.19611 | 0.02 | 0.020622 | 1 | euclidean | | 9 | Accept | 0.24 | 0.3244 | 0.02 | 0.020562 | 74 | mahalanobis | | 10 | Accept | 0.04 | 0.38552 | 0.02 | 0.020649 | 1 | minkowski | | 11 | Accept | 0.053333 | 0.31676 | 0.02 | 0.020722 | 1 | seuclidean | | 12 | Accept | 0.19333 | 0.34392 | 0.02 | 0.020701 | 1 | jaccard | | 13 | Accept | 0.04 | 0.24665 | 0.02 | 0.029203 | 1 | cosine | | 14 | Accept | 0.04 | 0.14708 | 0.02 | 0.031888 | 75 | cosine | | 15 | Accept | 0.04 | 0.20535 | 0.02 | 0.020076 | 1 | cosine | | 16 | Accept | 0.093333 | 0.31971 | 0.02 | 0.020073 | 75 | euclidean | | 17 | Accept | 0.093333 | 0.24077 | 0.02 | 0.02007 | 75 | minkowski | | 18 | Accept | 0.1 | 0.13832 | 0.02 | 0.020061 | 75 | chebychev | | 19 | Accept | 0.15333 | 0.19798 | 0.02 | 0.020044 | 75 | seuclidean | | 20 | Accept | 0.1 | 0.25624 | 0.02 | 0.020044 | 75 | cityblock | |=====================================================================================================| | Iter | Eval | Objective | Objective | BestSoFar | BestSoFar | NumNeighbors | Distance | | | result | | runtime | (observed) | (estim.) | | | |=====================================================================================================| | 21 | Accept | 0.033333 | 0.22756 | 0.02 | 0.020046 | 75 | correlation | | 22 | Accept | 0.033333 | 0.23851 | 0.02 | 0.02656 | 9 | cosine | | 23 | Accept | 0.033333 | 0.32822 | 0.02 | 0.02854 | 9 | cosine | | 24 | Accept | 0.02 | 0.22818 | 0.02 | 0.028607 | 1 | chebychev | | 25 | Accept | 0.02 | 0.25634 | 0.02 | 0.022264 | 1 | chebychev | | 26 | Accept | 0.02 | 0.16229 | 0.02 | 0.021439 | 1 | chebychev | | 27 | Accept | 0.02 | 0.19182 | 0.02 | 0.020999 | 1 | chebychev | | 28 | Accept | 0.66667 | 0.45625 | 0.02 | 0.020008 | 75 | hamming | | 29 | Accept | 0.04 | 0.37585 | 0.02 | 0.020008 | 12 | correlation | | 30 | Best | 0.013333 | 0.29335 | 0.013333 | 0.013351 | 6 | euclidean |

图中包含一个轴对象。标题为Min objective vs. Number of function evaluated的axis对象包含2个类型为line的对象。这些对象代表最小观测目标、最小估计目标。

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

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

输入参数

全部折叠

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

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

  • 如果资源描述包含响应变量,并且只想仅使用剩余变量的子集资源描述作为预测器,然后通过使用公式

  • 如果资源描述不包含响应变量,则使用Y.响应变量的长度和输入的行数资源描述必须是相等的。

数据类型:表格

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

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

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

方法指定类的顺序是一种好的实践一会名称-值参数。

数据类型:char|一串

响应变量的解释模型和预测变量的子集,指定为表单中的字符向量或字符串标量“y〜x1 + x2 + x3”.在本表格中,Y表示响应变量,和x1x2,x3表示预测变量。

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

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

数据类型:char|一串

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

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

数据类型:分类|char|一串|逻辑||双倍的|细胞

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

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

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

以它们的外观顺序指定预测器的名称X,可以使用PredictorNames名称-值对的论点。

数据类型:双倍的|

名称-值参数

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

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

请注意

属性中不能同时使用任何交叉验证的名称-值参数“OptimizeHyperparameters”名称-值参数。可以为。修改交叉验证“OptimizeHyperparameters”只有使用“HyperparameterOptimizationOptions”名称-值参数。

模型参数

全部折叠

决胜算法所使用的预测方法,如果多个类具有相同的最小开销,则指定为由“布朗蒂丝”以及以下其中之一:

  • “最小的”—在绑定组之间使用最小的索引。

  • “最近的”- 将课程与最近的邻居一起使用,在绑定组中。

  • '随机的'-在平局组中使用随机的平局决胜局。

默认情况下,当多个类在这些类中具有相同数量的最近点时,会发生连接K最近的邻居。

例子:'Breakties','最近'

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

例子:“BucketSize”,40岁

数据类型:|双倍的

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

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

  • []-没有明确的预测指标。

预测数据fitcknn要么是连续的,要么是绝对的。

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

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

当您设置分类预测器“所有”,默认值距离“汉明”

例子:“CategoricalPredictors”、“所有”

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

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

使用一会:

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

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

  • 选择用于培训的类的子集。例如,假设集合中所有不同的类名Y[“a”、“b”、“c”].使用课程的观测训练模型“一种”“C”仅限,指定“类名”,(“a”、“c”)

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

例子:“类名”,(“b”,“g”)

数据类型:分类|char|一串|逻辑||双倍的|细胞

一个点的错误分类代价,指定为逗号分隔对组成“成本”以及以下其中之一:

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

  • 结构年代有两个领域:S.ClassNames将组名作为与Y,S.ClassificationCosts包含代价矩阵。

默认值是成本(i, j) = 1如果我〜= j,成本(i, j) = 0如果我=我

数据类型:|双倍的|结构体

协方差矩阵,指定为逗号分隔对组成“Cov”以及计算马氏距离时表示协方差矩阵的标量值的正定矩阵。此参数仅在以下情况下有效“距离”“马哈拉诺比斯”

您不能同时指定'标准化'而他们中的任何一个“规模”“Cov”

数据类型:|双倍的

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

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

此表包括以下各项的有效距离度量:ExhaustiveSearcher

距离指标名称 描述
“城市街区” 城市街区的距离。
“chebychev” 切比切夫距离(最大坐标差)。
“相关” 一减去观察值之间的样本线性相关性(作为值的序列处理)。
'余弦' 1减去观测值之间夹角的余弦值(作为向量处理)。
“欧几里得” 欧氏距离。
“汉明” 汉明距离,坐标差的百分比。
“jaccard” 1减去雅卡尔系数,非零坐标差的百分比。
“马哈拉诺比斯” 马氏距离,用正定协方差矩阵计算C.默认值C样本协方差矩阵是X,由X (X, omitrows).指定一个不同的值C,可以使用“Cov”名称-值对的论点。
闵可夫斯基的 闵可夫斯基距离。默认指数为2.要指定不同的指数,请使用“指数”名称-值对的论点。
“seuclidean” 标准化欧几里德距离。每个坐标之间的差异X查询点被缩放,也就是除以一个缩放值年代.默认值年代标准偏差是从XS =性病(X, omitnan).为指定另一个值年代,可以使用规模名称-值对的论点。
“斯皮尔曼” 1减去观察值之间的样本斯皮尔曼等级相关性(作为值的序列处理)。
distfun

距离函数处理。distfun有形式

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

  • Zi.是一个1-经过-N包含一行的向量XY

  • ZJ.是一个平方米-经过-N的多行矩阵XY

  • D2是一个平方米-经过-1距离矢量,和D2 (k)观察距离是多少Zi.ZJ (k,:)

如果您指定分类预测器作为“所有”,则默认距离度量为“汉明”.否则,默认距离度量为“欧几里得”

定义,请参阅距离指标

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

数据类型:char|一串|function_handle

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

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

例子:'timutialweight','逆'

数据类型:char|一串|function_handle

闵可夫斯基距离指数,指定为逗号分隔对,由“指数”和一个正标量值。此参数仅在以下情况下有效“距离”闵可夫斯基的

例子:“指数”,3

数据类型:|双倍的

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

例子:“包含”,没错

数据类型:逻辑

最近邻搜索方法,指定为逗号分隔对,由'nsmethod'“kdtree”“详尽”

  • “kdtree”-创建和使用kd树来寻找最近的邻居。“kdtree”当距离度量为以下情况之一时,为有效:

    • “欧几里得”

    • “城市街区”

    • 闵可夫斯基的

    • “chebychev”

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

默认值是“kdtree”什么时候X10或更少的列,X是不是稀疏还是一种gpuArray,距离度规是a“kdtree”类型;否则,“详尽”

例子:“NSMethod”、“详尽”

最近的邻居的数量X要查找以便在预测时对每个点进行分类,指定为逗号分隔对,由“NumNeighbors”和一个正整数。

例子:“NumNeighbors”,3

数据类型:|双倍的

预测器变量名,指定为具有惟一名称的字符串数组或具有惟一字符向量的单元格数组。的功能PredictorNames这取决于你提供培训数据的方式。

  • 如果你提供XY,则可以使用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

如果你为两者都设置了值权重之前时,权重被重归一化,使其与所属类的先验概率值相加。

例子:“优先”,“制服”

数据类型:char|一串||双倍的|结构体

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

  • 如果你提供Y,则可以使用ResponseName为响应变量指定名称。

  • 如果你提供ResponseVarName公式,则不能使用ResponseName

例子:“ResponseName”、“反应”

数据类型:char|一串

距离比例尺,指定为逗号分隔对,由“规模”以及包含非负标量值的向量,其长度等于列数X.每个坐标差X而一个查询点是由对应的元素缩放的规模.此参数仅在以下情况下有效“距离”“seuclidean”

您不能同时指定'标准化'而他们中的任何一个“规模”“Cov”

数据类型:|双倍的

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

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

价值 描述
“doublelogit” 1 / (1 +e–2x
“invlogit” 日志(x/ (1 –x))
“ismax” 将得分最高的类的分数设置为1,并将所有其他类的分数设置为0
“分对数” 1 / (1 +e- - - - - -x
“没有”“身份” x(转换)
“标志” –1人x< 0
0代表x= 0
1为x> 0
“对称” 2x- 1
“symmetricismax” 将分数最大的班级的分数设置为1,并将所有其他班级的分数设置为-1
“symmetriclogit” 2 / (1 +e- - - - - -x) - 1

对于MATLAB函数或您定义的函数,使用其函数句柄进行分数变换。函数句柄必须接受一个矩阵(原始分数)并返回相同大小的矩阵(转换后的分数)。

例子:“ScoreTransform”、“分对数”

数据类型:char|一串|function_handle

标记来标准化预测器,指定为逗号分隔对,由'标准化'真正的1)或(0)

如果你设置“标准化”,真的,然后软件中心和缩放预测数据的每一列(X)通过柱式和标准偏差分别。

软件没有标准化分类预测值,如果所有预测值都是分类的,则会抛出错误。

您不能同时指定'标准化',1而他们中的任何一个“规模”“Cov”

良好的做法是为了标准化预测器数据。

例子:“标准化”,真的

数据类型:逻辑

观察权重,指定为逗号分隔的配对组成'重量'和一个正数的数字向量或变量名资源描述.该软件对每一行的观察结果进行权衡X资源描述对应的值在权重.的大小权重必须等于X资源描述

如果您将输入数据指定为表资源描述,然后权重可以是变量的名称资源描述包含数字矢量。在这种情况下,您必须指定权重作为字符向量或字符串标量。例如,如果W存储为待定,然后将其指定为' W '.否则,软件将对所有列进行处理资源描述, 包含W,作为预测器或训练模型时的反应。

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

默认情况下,权重(n1), 在哪里n观察的次数在吗X资源描述

数据类型:双倍的||char|一串

交叉验证选项

全部折叠

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

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

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

另外,交叉验证Mdl后来使用这件事crossval方法。

例子:“Crossval”,“on”

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

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

例子:假设您使用以下方法创建了一个随机分区,用于对500个观测数据进行5倍交叉验证本量利= 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

数据类型:|双倍的

省略一交叉验证标志,指定为“上”“关闭”如果you specify“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对对应的超参数进行优化“汽车”选项并忽略HyperParameters的任何指定值。

符合条件的参数fitcknn是:

  • 距离- - - - - -fitcknn搜索中“城市街区”“chebychev”“相关”'余弦'“欧几里得”“汉明”“jaccard”“马哈拉诺比斯”闵可夫斯基的“seuclidean”,“斯皮尔曼”

  • 距离重量级- - - - - -fitcknn搜索中“平等”“逆”,“squaredinverse”

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

  • 纽曼尼斯堡- - - - - -fitcknn在正整数中搜索,默认在范围内按对数缩放[1,马克斯(2轮(NumObservations / 2)))

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

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

负载fisheririsparams = hyperparameters(“fitcknn”量,物种);参数(1)。范围=(1、20);

通过参数个数的价值优化超参数

默认情况下,迭代显示出现在命令行,并根据优化中超参数的数量显示绘图。对于优化和绘图,目标函数为误分类率。若要控制迭代显示,请设置详细的场的“HyperparameterOptimizationOptions”名称-值参数。要控制情节,设置ShowPlots场的“HyperparameterOptimizationOptions”名称-值参数。

例如,请参见优化拟合KNN分类器

例子:“汽车”

优化选项,指定为结构。此参数修改优化超参数名称-值参数。结构中的所有字段都是可选的。

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

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

  • “随机搜索”-随机搜索MaxObjectiveEvaluations点。

“gridsearch”以随机顺序搜索,使用均匀抽样而不从网格中替换。优化之后,您可以使用该命令获得一个按网格顺序排列的表sortrows (Mdl.HyperparameterOptimizationResults)

“bayesopt”
AcquisitionFunctionName

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

  • “expected-improvement”

  • '预期改善加'

  • “expected-improvement-per-second”

  • “较低的信任”

  • “probability-of-improvement”

获取函数的名称包括每秒不会产生可重复的结果,因为优化依赖于目标函数的运行时间。获取函数的名称包括+当他们过度开发一个区域时,调整他们的行为。有关详细信息,请参见获取函数类型

“expected-improvement-per-second-plus”
MaxObjectiveEvaluations 最大客观函数评估数。 30.“bayesopt”“随机搜索”,和整个网格“gridsearch”
MaxTime

时间限制,指定为正实标量。时间限制以秒为单位,用抽搐toc。运行时间可以超过MaxTime因为MaxTime不中断函数计算。

NumGridDivisions “gridsearch”,每个维度中的值数。该值可以是给出每个维度值数的正整数向量,也可以是适用于所有维度的标量。对于分类变量,此字段将被忽略。 10
ShowPlots 指示是否显示绘图的逻辑值。如果真正的,该域根据迭代次数绘制最佳观测目标函数值。如果你使用贝叶斯优化(优化器“bayesopt”),则该域也绘制出最佳估计目标函数值。的最佳观测目标函数值和最佳估计目标函数值对应于BestSoFar(观察)BestSoFar (estim)。列的迭代显示,分别。您可以在属性中找到这些值ObjectiveMinimumTraceEstimatedObjectiveMinimumTraceMdl。HyperparameterOptimizationResults如果the problem includes one or two optimization parameters for Bayesian optimization, thenShowPlots还根据参数绘制目标函数的模型。 真正的
SaveIntermediateResults 表示是否保存结果的逻辑值优化器“bayesopt”如果真正的,此字段将覆盖名为“BayesoptResults”在每次迭代中,变量是一个BayesianOptimization对象。
详细的

在命令行显示:

  • 0-没有迭代显示

  • 1- 迭代显示

  • 2-重复显示额外的信息

具体操作请参见bayesopt详细的名称-值参数和示例使用贝叶斯优化优化分类器

1
UseParallel 逻辑值,指示是否并行运行Bayesian Optimization,这需要并行计算工具箱™。由于并行时序的不可递容性,并行贝叶斯优化不一定会产生可重复的结果。有关详细信息,请参阅平行的贝叶斯优化
再分配

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

那个设定真正的通常给出最强大的结果,因为它需要分区噪声。但是,为了好的结果,真正的需要至少两倍的函数求值。

使用以下三个选项中的任意一个。
CVPartition 一个cvpartition对象,由创建的cvpartition “Kfold”,5如果您没有指定交叉验证字段
坚持 范围内的标量(0,1)代表保持部分
肯福尔德 大于1的整数

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

数据类型:结构体

输出参数

全部折叠

训练有素的k- 最终邻居分类模型,作为一个返回分类KNN模型对象或ClassificationPartitionedModel旨在模型对象。

如果您设置任何名称-值对参数KFold坚持CrossVal,或CVPartition,然后Mdl是一个ClassificationPartitionedModel旨在模型对象。否则,Mdl是一个分类KNN模型对象。

引用Mdl,使用点符号。例如,要在命令窗口显示距离度量,输入Mdl。D我stance

更多关于

全部折叠

预测

分类KNN预测一个点的分类xnew使用等同于此的程序:

  1. 找到纽曼尼斯堡训练集中的点X最接近xnew

  2. 找到纽曼尼斯堡响应值Y到那些最近的点。

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

有关详细信息,请参阅后验概率预测文档。

提示

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

算法

  • 南斯<定义>s表示缺少观测值。以下描述fitcknn当数据集或权重包含缺失的观测值时。

    • 如果有任何价值Y或者任何重量都不见了fitcknnY的权重,以及相应的行X从数据。软件将权重的总和重新归一化1

    • 如果指定标准化预测值('标准化',1)或标准欧几里得距离(“距离”,“修克利丁”)然后就不用体重计了fitcknn在计算平均值和标准偏差之前,从个人预测器中删除缺失的观察。换句话说,软件实现意思性病“奥米南”每个预测器上的选项。

    • 如果您指定Mahalanobis距离(“距离”,“马哈兰博伊斯”)的协方差矩阵,则fitcknn删除行X包含至少一个缺少的值。换句话说,软件实现“omitrows”选项在预测矩阵上X

  • 假设你设置了“标准化”,真的

    • 如果您还指定之前权重名称-值对参数fitcknn使用相应的加权平均值和加权标准差对预测进行标准化。具体地说,fitcknn标准化预测值j使用

      • x j x j μ. j σ. j

        μ. j 1 k w k k w k x j k

        xjk是观察k(行)的预测j(列)。

        σ. j 2 k w k k w k 2 k w k 2 k w k x j k μ. j 2

    • 如果你还设置“距离”、“mahalanobis”“距离”,“修克利丁”,则不能指定规模。相反,软件:

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

      2. 使用步骤1的结果标准化数据。

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

  • 如果您指定规模而他们中的任何一个之前权重,然后用加权标准差对观测距离进行标度。

  • 如果您指定而他们中的任何一个之前权重,则该软件将加权协方差矩阵应用于距离。换句话说,

    C o v k w k k w k 2 k w k 2 j k w k x j k μ. j x j μ. j

选择

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

扩展功能

介绍了R2014a