Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

fitcknn

Clasificador de vecinos más cercanok

Descripción

Mdl = fitcknn(Tbl,ResponseVarName) devuelve un modelo de clasificación de vecino sin nombre basado en las variables de entrada (también conocidas como predictores, entidades o atributos) en la tabla y la salida (respuesta).kTblTbl.ResponseVarName

Mdl = fitcknn(Tbl,formula) devuelve un modelo de clasificación de vecino sin nombre en función de las variables de entrada de la tabla. es un modelo explicativo de la respuesta y un subconjunto de variables predictoras en .kTblFórmulaTbl

Mdl = fitcknn(Tbl,Y) devuelve un modelo de clasificación de vecinos más cercano basado en las variables predictoras de la tabla y la matriz de respuestas.kTblY

ejemplo

Mdl = fitcknn(X,Y) devuelve un modelo de clasificación de vecino sin nombre basado en los datos del predictor y la respuesta.kXY

ejemplo

Mdl = fitcknn(___,Name,Value) se ajusta a un modelo con opciones adicionales especificadas por uno o varios argumentos de par nombre-valor, utilizando cualquiera de las sintaxis anteriores. Por ejemplo, puede especificar el algoritmo de desempate, la métrica de distancia o los pesos de observación.

Ejemplos

contraer todo

Entrene a un clasificador de vecinos más cercano para los datos de iris de Fisher, donde, el número de vecinos más cercanos en los predictores, es 5.kk

Cargue los datos del iris de Fisher.

load fisheriris X = meas; Y = species;

es una matriz numérica que contiene cuatro medidas de pétalos para 150 iris. es una matriz de células de vectores de caracteres que contiene las especies de iris correspondientes.XY

Entrena a un clasificador de vecinos 5 más cercano. Estandarizar los datos del predictor no categórico.

Mdl = fitcknn(X,Y,'NumNeighbors',5,'Standardize',1)
Mdl =    ClassificationKNN              ResponseName: 'Y'     CategoricalPredictors: []                ClassNames: {'setosa'  'versicolor'  'virginica'}            ScoreTransform: 'none'           NumObservations: 150                  Distance: 'euclidean'              NumNeighbors: 5     Properties, Methods  

es un clasificador entrenado, y algunas de sus propiedades aparecen en la ventana de comandos.MdlClassificationKNN

Para acceder a las propiedades de , utilice la notación de puntos.Mdl

Mdl.ClassNames
ans = 3x1 cell array
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

Mdl.Prior
ans = 1×3

    0.3333    0.3333    0.3333

contiene las probabilidades anteriores de la clase, que puede especificar mediante el argumento de par nombre-valor en .Mdl.Prior'Prior'fitcknn El orden de las probabilidades anteriores de la clase corresponde al orden de las clases en .Mdl.ClassNames De forma predeterminada, las probabilidades anteriores son las respectivas frecuencias relativas de las clases en los datos.

También puede restablecer las probabilidades anteriores después del entrenamiento. Por ejemplo, establezca las probabilidades anteriores en 0,5, 0,2 y 0,3, respectivamente.

Mdl.Prior = [0.5 0.2 0.3];

Puede pasar a etiquetar nuevas medidas o validar cruzadamente el clasificador.Mdlpredictcrossval

Cargue el conjunto de datos de iris de Fisher.

load fisheriris X = meas; Y = species;

es una matriz numérica que contiene cuatro medidas de pétalos para 150 iris. es una matriz de células de vectores de caracteres que contiene las especies de iris correspondientes.XY

Entrena a un clasificador de vecinos más cercanos usando la métrica Minkowski. Para utilizar la métrica Minkowski, debe utilizar un buscador exhaustivo. Es una buena práctica estandarizar los datos de predictores no categóricos.

Mdl = fitcknn(X,Y,'NumNeighbors',3,...     'NSMethod','exhaustive','Distance','minkowski',...     'Standardize',1);

es clasificador.MdlClassificationKNN

Puede examinar las propiedades haciendo doble clic en la ventana Espacio de trabajo.MdlMdl Se abrirá el Editor de variables.

Entrene a un clasificador de vecinos más cercano utilizando la distancia chi-cuadrada.k

Cargue el conjunto de datos de iris de Fisher.

load fisheriris X = meas;    % Predictors Y = species; % Response

La distancia chi-cuadrada entre los puntos -dimensionales y esjxz

<math display="block">
<mrow>
<mi>χ</mi>
<mo stretchy="false">(</mo>
<mi>x</mi>
<mo>,</mo>
<mi>z</mi>
<mo stretchy="false">)</mo>
<mo>=</mo>
<msqrt>
<mrow>
<mstyle displaystyle="true" scriptlevel="0">
<mrow>
<munderover>
<mrow>
<mo></mo>
</mrow>
<mrow>
<mi>j</mi>
<mo>=</mo>
<mn>1</mn>
</mrow>
<mrow>
<mi>J</mi>
</mrow>
</munderover>
<msub>
<mrow>
<mi>w</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
<msup>
<mrow>
<mo>(</mo>
<msub>
<mrow>
<mi>x</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
<mo>-</mo>
<msub>
<mrow>
<mi>z</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
<mo>)</mo>
</mrow>
<mrow>
<mn>2</mn>
</mrow>
</msup>
</mrow>
</mstyle>
</mrow>
</msqrt>
<mo>,</mo>
</mrow>
</math>

Dónde

<math display="block">
<mrow>
<msub>
<mrow>
<mi>w</mi>
</mrow>
<mrow>
<mi>j</mi>
</mrow>
</msub>
</mrow>
</math>
es un peso asociado a la dimensión .j

Especifique la función de distancia chi-cuadrada. La función de distancia debe:

  • Tome una fila de , por ejemplo, , y la matriz .XxZ

  • Compárese con cada fila de .xZ

  • Devolver un vector de longitudD

    <math display="block">
    <mrow>
    <msub>
    <mrow>
    <mi>n</mi>
    </mrow>
    <mrow>
    <mi>z</mi>
    </mrow>
    </msub>
    </mrow>
    </math>
    Dónde
    <math display="block">
    <mrow>
    <msub>
    <mrow>
    <mi>n</mi>
    </mrow>
    <mrow>
    <mi>z</mi>
    </mrow>
    </msub>
    </mrow>
    </math>
    es el número de filas de .Z Cada elemento de es la distancia entre la observación correspondiente a y las observaciones correspondientes a cada fila de .DxZ

chiSqrDist = @(x,Z,wt)sqrt((bsxfun(@minus,x,Z).^2)*wt);

En este ejemplo se utilizan ponderaciones arbitrarias para la ilustración.

Entrena a un clasificador de vecinos más cercano. Es una buena práctica estandarizar los datos de predictores no categóricos.

k = 3; w = [0.3; 0.3; 0.2; 0.2]; KNNMdl = fitcknn(X,Y,'Distance',@(x,Z)chiSqrDist(x,Z,w),...     'NumNeighbors',k,'Standardize',1);

es clasificador.KNNMdlClassificationKNN

Valide cruzadamente el clasificador KNN utilizando la validación cruzada predeterminada de 10 veces. Examine el error de clasificación.

rng(1); % For reproducibility CVKNNMdl = crossval(KNNMdl); classError = kfoldLoss(CVKNNMdl)
classError = 0.0600 

es clasificador.CVKNNMdlClassificationPartitionedModel El error de clasificación de 10 veces es del 4%.

Compare el clasificador con uno que utilice un esquema de ponderación diferente.

w2 = [0.2; 0.2; 0.3; 0.3]; CVKNNMdl2 = fitcknn(X,Y,'Distance',@(x,Z)chiSqrDist(x,Z,w2),...     'NumNeighbors',k,'KFold',10,'Standardize',1); classError2 = kfoldLoss(CVKNNMdl2)
classError2 = 0.0400 

El segundo esquema de ponderación produce un clasificador que tiene un mejor rendimiento fuera de la muestra.

En este ejemplo se muestra cómo optimizar los hiperparámetros automáticamente mediante .fitcknn En el ejemplo se utilizan los datos del iris de Fisher.

Cargue los datos.

load fisheriris X = meas; Y = species;

Busque hiperparámetros que minimicen la pérdida de validación cruzada cinco veces mediante la optimización automática de hiperparámetros.

Para reproducibilidad, establezca la semilla aleatoria y utilice la función de adquisición.'expected-improvement-plus'

rng(1) Mdl = fitcknn(X,Y,'OptimizeHyperparameters','auto',...     'HyperparameterOptimizationOptions',...     struct('AcquisitionFunctionName','expected-improvement-plus'))
|=====================================================================================================| | Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | NumNeighbors |     Distance | |      | result |             | runtime     | (observed)  | (estim.)    |              |              | |=====================================================================================================| |    1 | Best   |    0.026667 |      1.3083 |    0.026667 |    0.026667 |           30 |       cosine | 
|    2 | Accept |        0.04 |      0.3831 |    0.026667 |    0.027197 |            2 |    chebychev | 
|    3 | Accept |     0.19333 |     0.18118 |    0.026667 |    0.030324 |            1 |      hamming | 
|    4 | Accept |     0.33333 |     0.18304 |    0.026667 |    0.033313 |           31 |     spearman | 
|    5 | Best   |        0.02 |     0.34416 |        0.02 |    0.020648 |            6 |       cosine | 
|    6 | Accept |    0.073333 |     0.17335 |        0.02 |    0.023082 |            1 |  correlation | 
|    7 | Accept |        0.06 |    0.096134 |        0.02 |    0.020875 |            2 |    cityblock | 
|    8 | Accept |        0.04 |    0.088269 |        0.02 |    0.020622 |            1 |    euclidean | 
|    9 | Accept |        0.24 |     0.54995 |        0.02 |    0.020562 |           74 |  mahalanobis | 
|   10 | Accept |        0.04 |     0.23643 |        0.02 |    0.020649 |            1 |    minkowski | 
|   11 | Accept |    0.053333 |     0.25507 |        0.02 |    0.020722 |            1 |   seuclidean | 
|   12 | Accept |     0.19333 |    0.082379 |        0.02 |    0.020701 |            1 |      jaccard | 
|   13 | Accept |        0.04 |    0.088889 |        0.02 |    0.029203 |            1 |       cosine | 
|   14 | Accept |        0.04 |     0.24764 |        0.02 |    0.031888 |           75 |       cosine | 
|   15 | Accept |        0.04 |     0.18948 |        0.02 |    0.020076 |            1 |       cosine | 
|   16 | Accept |    0.093333 |     0.16943 |        0.02 |    0.020073 |           75 |    euclidean | 
|   17 | Accept |    0.093333 |     0.16942 |        0.02 |     0.02007 |           75 |    minkowski | 
|   18 | Accept |         0.1 |    0.098829 |        0.02 |    0.020061 |           75 |    chebychev | 
|   19 | Accept |     0.15333 |     0.11362 |        0.02 |    0.020044 |           75 |   seuclidean | 
|   20 | Accept |         0.1 |     0.19065 |        0.02 |    0.020044 |           75 |    cityblock | 
|=====================================================================================================| | Iter | Eval   | Objective   | Objective   | BestSoFar   | BestSoFar   | NumNeighbors |     Distance | |      | result |             | runtime     | (observed)  | (estim.)    |              |              | |=====================================================================================================| |   21 | Accept |    0.033333 |     0.12891 |        0.02 |    0.020046 |           75 |  correlation | 
|   22 | Accept |    0.033333 |    0.091456 |        0.02 |     0.02656 |            9 |       cosine | 
|   23 | Accept |    0.033333 |     0.18298 |        0.02 |     0.02854 |            9 |       cosine | 
|   24 | Accept |        0.02 |     0.09311 |        0.02 |    0.028607 |            1 |    chebychev | 
|   25 | Accept |        0.02 |     0.13392 |        0.02 |    0.022264 |            1 |    chebychev | 
|   26 | Accept |        0.02 |     0.10476 |        0.02 |    0.021439 |            1 |    chebychev | 
|   27 | Accept |        0.02 |     0.20871 |        0.02 |    0.020999 |            1 |    chebychev | 
|   28 | Accept |     0.66667 |     0.12634 |        0.02 |    0.020008 |           75 |      hamming | 
|   29 | Accept |        0.04 |     0.21571 |        0.02 |    0.020008 |           12 |  correlation | 
|   30 | Best   |    0.013333 |     0.17671 |    0.013333 |    0.013351 |            6 |    euclidean | 

__________________________________________________________ Optimization completed. MaxObjectiveEvaluations of 30 reached. Total function evaluations: 30 Total elapsed time: 72.0891 seconds. Total objective function evaluation time: 6.612  Best observed feasible point:     NumNeighbors    Distance      ____________    _________           6          euclidean  Observed objective function value = 0.013333 Estimated objective function value = 0.013351 Function evaluation time = 0.17671  Best estimated feasible point (according to models):     NumNeighbors    Distance      ____________    _________           6          euclidean  Estimated objective function value = 0.013351 Estimated function evaluation time = 0.17408 
Mdl =    ClassificationKNN                          ResponseName: 'Y'                 CategoricalPredictors: []                            ClassNames: {'setosa'  'versicolor'  'virginica'}                        ScoreTransform: 'none'                       NumObservations: 150     HyperparameterOptimizationResults: [1x1 BayesianOptimization]                              Distance: 'euclidean'                          NumNeighbors: 6     Properties, Methods  

Argumentos de entrada

contraer todo

Datos de ejemplo utilizados para entrenar el modelo, especificados como una tabla. Cada fila de corresponde a una observación y cada columna corresponde a una variable predictora.Tbl Opcionalmente, puede contener una columna adicional para la variable de respuesta.Tbl No se permiten variables de varias columnas y matrices de celdas distintas de las matrices de celdas de vectores de caracteres.

Si contiene la variable de respuesta y desea utilizar todas las variables restantes como predictores, especifique la variable de respuesta mediante .TblTblResponseVarName

Si contiene la variable de respuesta y desea utilizar solo un subconjunto de las variables restantes como predictores, especifique una fórmula mediante .TblTblFórmula

Si no contiene la variable de respuesta, especifique una variable de respuesta mediante .TblY La longitud de la variable de respuesta y el número de filas deben ser iguales.Tbl

Tipos de datos: table

Nombre de la variable de respuesta, especificado como el nombre de una variable en .Tbl

Debe especificar como vector de caracteres o escalar de cadena.ResponseVarName Por ejemplo, si la variable de respuesta se almacena como , especifice como .YTbl.Y'Y' De lo contrario, el software trata todas las columnas de , incluidos , como predictores al entrenar el modelo.TblY

La variable de respuesta debe ser una matriz categórica, de carácter o de cadena, un vector lógico o numérico o una matriz de celdas de vectores de caracteres. Si es una matriz de caracteres, cada elemento de la variable de respuesta debe corresponder a una fila de la matriz.Y

Se recomienda especificar el orden de las clases mediante el argumento de par nombre-valor.ClassNames

Tipos de datos: char | string

Modelo explicativo de la variable de respuesta y un subconjunto de las variables predictoras, especificadas como vector de caracteres o escalar de cadena en el formulario.'Y~X1+X2+X3' En este formulario, representa la variable de respuesta y , , y representa las variables predictoras.YX1X2X3

Para especificar un subconjunto de variables como predictores para entrenar el modelo, utilice una fórmula.Tbl Si especifica una fórmula, el software no utiliza ninguna variable que no aparezca en .TblFórmula

Los nombres de variable de la fórmula deben ser ambos nombres de variable en ( ) como identificadores válidos.TblTbl.Properties.VariableNamesMATLAB®

Puede verificar los nombres de las variables mediante la función.Tblisvarname El código siguiente devuelve logical ( ) para cada variable que tiene un nombre de variable válido.1true Si los nombres de variable en no son válidos, a continuación, convertirlos mediante la función.

cellfun(@isvarname,Tbl.Properties.VariableNames)
Tblmatlab.lang.makeValidName
Tbl.Properties.VariableNames = matlab.lang.makeValidName(Tbl.Properties.VariableNames);

Tipos de datos: char | string

Etiquetas de clase, especificadas como una matriz categórica, de carácter o de cadena, un vector lógico o numérico, o una matriz de celdas de vectores de caracteres. Cada fila de representa la clasificación de la fila correspondiente de .YX

El software considera que faltan valores , (vector de caracteres vacíos), (cadena vacía) y valores.NaN''""<missing><undefined>Y Por lo tanto, el software no entrena utilizando observaciones con una respuesta faltante.

Tipos de datos: categorical | char | string | logical | single | double | cell

Datos del predictor, especificados como matriz numérica.

Cada fila corresponde a una observación (también conocida como instancia o ejemplo) y cada columna corresponde a una variable predictora (también conocida como entidad).

La longitud y el número de filas de debe ser igual.YX

Para especificar los nombres de los predictores en el orden de su aparición en , utilice el argumento de par nombre-valor.XPredictorNames

Tipos de datos: double | single

Argumentos de par nombre-valor

Especifique pares opcionales separados por comas de argumentos. es el nombre del argumento y es el valor correspondiente. deben aparecer entre comillas.Name,ValueNameValueName Puede especificar varios argumentos de par de nombre y valor en cualquier orden como .Name1,Value1,...,NameN,ValueN

Ejemplo: especifica un clasificador para los tres vecinos más cercanos utilizando el método de búsqueda de vecino más cercano y la métrica Minkowski.'NumNeighbors',3,'NSMethod','exhaustive','Distance','minkowski'

Nota

No puede utilizar ningún argumento de par nombre-valor de validación cruzada junto con el argumento de par nombre-valor.'OptimizeHyperparameters' Puede modificar la validación cruzada solo mediante el argumento de par nombre-valor.'OptimizeHyperparameters''HyperparameterOptimizationOptions'

Parámetros del modelo

contraer todo

Algoritmo de desempate utilizado por el predict método si varias clases tienen el mismo costo más pequeño, especificado como el par separado por comas que consta de y uno de los siguientes:'BreakTies'

  • — Utilice el índice más pequeño entre los grupos atados.'smallest'

  • — Utilice la clase con el vecino más cercano entre los grupos empatados.'nearest'

  • — Utilice un desempate aleatorio entre los grupos empatados.'random'

De forma predeterminada, los vínculos se producen cuando varias clases tienen el mismo número de puntos más cercanos entre los vecinos más cercanos.K

Ejemplo: 'BreakTies','nearest'

Número máximo de puntos de datos en el nodo hoja del árbol d, especificado como el par separado por comas que consta de y un valor entero positivo.k'BucketSize' Este argumento es significativo solo cuando es .NSMethod'kdtree'

Ejemplo: 'BucketSize',40

Tipos de datos: single | double

Indicador categórico, especificado como el par separado por comas que consta de y uno de los siguientes:'CategoricalPredictors'

  • — Todos los predictores son categóricos.'all'

  • — Ningún predictor es categórico.[]

Los datos del predictor para fitcknn debe ser todo continuo o todo categórico.

  • Si los datos del predictor están en una tabla ( ),Tbl fitcknn supone que una variable es categórica si es un vector lógico, vector categórico, matriz de caracteres, matriz de cadenas o matriz de celdas de vectores de caracteres. Si incluye valores continuos y categóricos, debe especificar el valor deTbl'CategoricalPredictors' fitcknn puede determinar cómo tratar todos los predictores, ya sea como variables continuas o categóricas.

  • Si los datos del predictor son una matriz ( ),X fitcknn asume que todos los predictores son continuos. Para identificar todos los predictores como categóricos, especifique como .X'CategoricalPredictors''all'

Cuando se establece en , el valor predeterminado es .CategoricalPredictors'all'Distance'hamming'

Ejemplo: 'CategoricalPredictors','all'

Nombres de clases que se usan para el entrenamiento, especificados como el par separado por comas que consta de y una matriz categórica, de carácter o de cadena, un vector lógico o numérico, o una matriz de celdas de vectores de caracteres. debe tener el mismo tipo de datos que .'ClassNames'ClassNamesY

Si es una matriz de caracteres, cada elemento debe corresponder a uno de la matriz.ClassNamesFila

Utilícelo para:ClassNames

  • Ordene las clases durante el entrenamiento.

  • Especifique el orden de cualquier dimensión de argumento de entrada o salida que corresponda al orden de clases. Por ejemplo, se utiliza para especificar el orden de las dimensiones o el orden de columna de las puntuaciones de clasificación devueltas por .ClassNamesCostpredict

  • Seleccione un subconjunto de clases para el entrenamiento. Por ejemplo, supongamos que el conjunto de todos los nombres de clase distintos en es .Y{'a','b','c'} Para entrenar el modelo mediante observaciones de clases y solo, especifique .'a''c''ClassNames',{'a','c'}

El valor predeterminado para es el conjunto de todos los nombres de clase distintos en .ClassNamesY

Ejemplo: 'ClassNames',{'b','g'}

Tipos de datos: categorical | char | string | logical | single | double | cell

Coste de la clasificación incorrecta de un punto, especificado como el par separado por comas que consta de y uno de los siguientes:'Cost'

  • Matriz cuadrada, donde está el costo de clasificar un punto en clase si su clase verdadera es (es decir, las filas corresponden a la clase verdadera y las columnas corresponden a la clase predicha).Cost(i,j)ji Para especificar el orden de clases para las filas y columnas correspondientes de , especifique además el argumento de par nombre-valor.CostClassNames

  • Estructura que tiene dos campos: que contiene los nombres de grupo como una variable del mismo tipo que , y que contiene la matriz de coste.SS.ClassNamesYS.ClassificationCosts

El valor predeterminado es if , y if .Cost(i,j)=1i~=jCost(i,j)=0i=j

Tipos de datos: single | double | struct

Matriz de covarianza, especificada como el par separado por comas que consta de y una matriz definida positiva de valores escalares que representan la matriz de covarianza al calcular la distancia Mahalanobis.'Cov' Este argumento solo es válido cuando es .'Distance''mahalanobis'

No se puede especificar simultáneamente y cualquiera de o .'Standardize''Scale''Cov'

Tipos de datos: single | double

Métrica de distancia, especificada como el par separado por comas que consta de un nombre de métrica de distancia válido o un identificador de función.'Distance' Los nombres de métricas de distancia permitidos dependen de su elección de un método de buscador de vecinos (consulte ).NSMethod

NSMethodNombres de métricas de distancia
exhaustiveCualquier métrica de distancia deExhaustiveSearcher
kdtreeO'cityblock''chebychev''euclidean''minkowski'

Esta tabla incluye métricas de distancia válidas de .ExhaustiveSearcher

Nombres de métricas de distanciaDescripción
'cityblock'Distancia del bloque de la ciudad.
'chebychev'Distancia de Chebychev (diferencia máxima de coordenadas).
'correlation'Uno menos la correlación lineal de la muestra entre observaciones (tratadas como secuencias de valores).
'cosine'Uno menos el coseno del ángulo incluido entre las observaciones (tratados como vectores).
'euclidean'Distancia euclidiana.
'hamming'Distancia de hamming, porcentaje de coordenadas que difieren.
'jaccard'Uno menos el coeficiente Jaccard, el porcentaje de coordenadas distintas de cero que difieren.
'mahalanobis'Distancia Mahalanobis, calculada utilizando una matriz de covarianza definida positiva.C El valor predeterminado de es la matriz de covarianza de ejemplo de , calculado por .CXnancov(X) Para especificar un valor diferente para , utilice el argumento de par nombre-valor.C'Cov'
'minkowski'Distancia de Minkowski. El exponente predeterminado es .2 Para especificar un exponente diferente, utilice el argumento de par nombre-valor.'Exponent'
'seuclidean'Distancia euclidiana estandarizada. Cada diferencia de coordenadas entre y un punto de consulta se escala, lo que significa dividido por un valor de escala.XS El valor predeterminado de es la desviación estándar calculada desde , .SXS = nanstd(X) Para especificar otro valor para , utilice el argumento de par nombre-valor.SScale
'spearman'Uno menos la correlación de rango de Spearman de la muestra entre las observaciones (tratadas como secuencias de valores).
@distfun

Mango de función de distancia. distfun tiene la forma donde

function D2 = distfun(ZI,ZJ) % calculation of  distance ...

  • es un vector -por- que contiene una fila de o .ZI1NXY

  • es una matriz -por- que contiene varias filas de o .ZJM2NXY

  • es un vector -por- de distancias, y es la distancia entre las observaciones y .D2M21D2(k)ZIZJ(k,:)

Si especifica como , la métrica de distancia predeterminada es .CategoricalPredictors'all''hamming' De lo contrario, la métrica de distancia predeterminada es .'euclidean'

Para obtener definiciones, consulte .Métricas de distancia

Ejemplo: 'Distance','minkowski'

Tipos de datos: char | string | function_handle

Función de ponderación de distancia, especificada como el par separado por comas que consta de un identificador de función o uno de los valores de esta tabla.'DistanceWeight'

ValorDescripción
'equal'Sin ponderación
'inverse'El peso es de 1/distancia
'squaredinverse'El peso es de 1/distancia2
@fcnfcn es una función que acepta una matriz de distancias no negativas y devuelve una matriz del mismo tamaño que contiene pesos de distancia no negativos. Por ejemplo, es equivalente a .'squaredinverse'@(d)d.^(-2)

Ejemplo: 'DistanceWeight','inverse'

Tipos de datos: char | string | function_handle

Exponente de distancia Minkowski, especificado como el par separado por comas que consta de y un valor escalar positivo.'Exponent' Este argumento solo es válido cuando es .'Distance''minkowski'

Ejemplo: 'Exponent',3

Tipos de datos: single | double

Marca de inclusión de empate, especificada como el par separado por comas que consta de y un valor lógico que indica si'IncludeTies' predict incluye todos los vecinos cuyos valores de distancia son iguales a la distancia más pequeña.K Si es , incluye todos estos vecinos.IncludeTiestruepredict De lo contrario, utiliza exactamente vecinos.predictK

Ejemplo: 'IncludeTies',true

Tipos de datos: logical

Método de búsqueda de vecino más cercano, especificado como el par separado por comas que consta de y o .'NSMethod''kdtree''exhaustive'

  • : crea y utiliza un árbol d para encontrar los vecinos más cercanos. es válido cuando la métrica de distancia es una de las siguientes:'kdtree'k'kdtree'

    • 'euclidean'

    • 'cityblock'

    • 'minkowski'

    • 'chebychev'

  • : utiliza el algoritmo de búsqueda exhaustivo.'exhaustive' Al predecir la clase de un nuevo punto, el software calcula los valores de distancia de todos los puntos para buscar los vecinos más cercanos.xnewXxnew

El valor predeterminado es cuando tiene o menos columnas, no es dispersa y la métrica de distancia es un tipo; Lo contrario.'kdtree'X10X'kdtree''exhaustive'

Ejemplo: 'NSMethod','exhaustive'

Número de vecinos más cercanos para buscar para clasificar cada punto al predecir, especificado como el par separado por comas que consta de y un valor entero positivo.X'NumNeighbors'

Ejemplo: 'NumNeighbors',3

Tipos de datos: single | double

Nombres de variables predictoras, especificados como el par separado por comas que consta de y una matriz de cadenas de nombres únicos o matriz de celdas de vectores de caracteres únicos.'PredictorNames' La funcionalidad de depende de la forma en que proporcione los datos de entrenamiento.'PredictorNames'

  • Si proporciona y , entonces puede utilizar para dar las variables predictoras en los nombres.XY'PredictorNames'X

    • El orden de los nombres en debe corresponder al orden de columna de .PredictorNamesX Es decir, es el nombre de , es el nombre de , y así sucesivamente.PredictorNames{1}X(:,1)PredictorNames{2}X(:,2) Además, y debe ser igual.size(X,2)numel(PredictorNames)

    • De forma predeterminada, es .PredictorNames{'x1','x2',...}

  • Si proporciona , entonces puede utilizar para elegir qué variables predictoras utilizar en el entrenamiento.Tbl'PredictorNames' Es decir fitcknn utiliza sólo las variables predictoras en y la variable de respuesta en el entrenamiento.PredictorNames

    • debe ser un subconjunto de y no puede incluir el nombre de la variable de respuesta.PredictorNamesTbl.Properties.VariableNames

    • De forma predeterminada, contiene los nombres de todas las variables predictoras.PredictorNames

    • Es una buena práctica especificar los predictores para el entrenamiento usando uno o solo.'PredictorNames'Fórmula

Ejemplo: 'PredictorNames',{'SepalLength','SepalWidth','PetalLength','PetalWidth'}

Tipos de datos: string | cell

Probabilidades anteriores para cada clase, especificadas como el par separado por comas que consta de y un valor en esta tabla.'Prior'

ValorDescripción
'empirical'Las probabilidades anteriores de la clase son las frecuencias relativas de la clase en .Y
'uniform'Todas las probabilidades anteriores de clase son iguales a 1/ , donde está el número de clases.KK
vector numéricoCada elemento es una probabilidad previa de clase. Ordene los elementos según o especifique el orden utilizando el argumento de par nombre-valor.Mdl.ClassNamesClassNames El software normaliza los elementos de tal forma que sume a .1
Estructura

Una estructura con dos campos:S

  • contiene los nombres de clase como una variable del mismo tipo que .S.ClassNamesY

  • contiene un vector de las probabilidades anteriores correspondientes.S.ClassProbs El software normaliza los elementos de tal forma que sume a .1

Si establece valores para ambos y , las ponderaciones se vuelven a normalizar para sumar el valor de la probabilidad anterior en la clase respectiva.WeightsPrior

Ejemplo: 'Prior','uniform'

Tipos de datos: char | string | single | double | struct

Nombre de la variable de respuesta, especificado como el par separado por comas que consta de un vector de caracteres o un escalar de cadena.'ResponseName'

  • Si proporciona , puede usar para especificar un nombre para la variable de respuesta.Y'ResponseName'

  • Si suministra o , entonces no puede utilizar .ResponseVarNameFórmula'ResponseName'

Ejemplo: 'ResponseName','response'

Tipos de datos: char | string

Escala de distancia, especificada como el par separado por comas que consta de y un vector que contiene valores escalares no negativos con longitud igual al número de columnas en .'Scale'X Cada diferencia de coordenadas entre y un punto de consulta se escala mediante el elemento correspondiente de .XScale Este argumento solo es válido cuando es .'Distance''seuclidean'

No se puede especificar simultáneamente y cualquiera de o .'Standardize''Scale''Cov'

Tipos de datos: single | double

Transformación de puntuación, especificada como el par separado por comas que consta de un vector de caracteres, un escalar de cadena o un identificador de función.'ScoreTransform'

En esta tabla se resumen los vectores de caracteres disponibles y los escalares de cadena.

ValorDescripción
'doublelogit'1/(1 +e–2x)
'invlogit'log( / (1 – ))xx
'ismax'Establece la puntuación de la clase con la puntuación más alta en , y establece las puntuaciones de todas las demás clases en10
'logit'1/(1 +ex)
O'none''identity'(sin transformación)x
'sign'–1 para <0 0 para 0 0 para 0 1 para > 0x
x
x
'symmetric'2 – 1x
'symmetricismax'Establece la puntuación de la clase con la puntuación más alta en , y establece las puntuaciones de todas las demás clases en1–1
'symmetriclogit'2/(1 +ex) – 1

Para una función o una función que defina, utilice su identificador de función para la transformación de puntuación.MATLAB El identificador de función debe aceptar una matriz (las puntuaciones originales) y devolver una matriz del mismo tamaño (las puntuaciones transformadas).

Ejemplo: 'ScoreTransform','logit'

Tipos de datos: char | string | function_handle

Marcar para estandarizar los predictores, especificados como el par separado por comas que consta de y ( ) o .'Standardize'true1false(0)

Si establece , el software centra y escala cada columna de los datos del predictor ( ) por la media de columna y la desviación estándar, respectivamente.'Standardize',trueX

El software no estandariza los predictores categóricos, y produce un error si todos los predictores son categóricos.

No se puede especificar simultáneamente y cualquiera de o .'Standardize',1'Scale''Cov'

Es una buena práctica estandarizar los datos del predictor.

Ejemplo: 'Standardize',true

Tipos de datos: logical

Pesos de observación, especificados como el par separado por comas que consta de un vector numérico de valores positivos o el nombre de una variable en .'Weights'Tbl El software sopesa las observaciones en cada fila de o con el valor correspondiente en .XTblWeights El tamaño de debe ser igual al número de filas de o .WeightsXTbl

Si especifica los datos de entrada como una tabla , puede ser el nombre de una variable que contenga un vector numérico.TblWeightsTbl En este caso, debe especificar como vector de caracteres o escalar de cadena.Weights Por ejemplo, si el vector de ponderaciones se almacena como , especifice como .WTbl.W'W' De lo contrario, el software trata todas las columnas de , incluidos , como predictores o la respuesta al entrenar el modelo.TblW

El software se normaliza para sumar hasta el valor de la probabilidad anterior en la clase respectiva.Weights

De forma predeterminada, esWeights ones(n,1)Dónde n es el número de observaciones en o .XTbl

Tipos de datos: double | single | char | string

Opciones de validación cruzada

contraer todo

Marca de validación cruzada, especificada como el par separado por comas que consta de y o .'Crossval''on''off'

Si especifica , el software implementa 10 veces la validación cruzada.'on'

Para invalidar esta configuración de validación cruzada, utilice uno de estos argumentos de par nombre-valor: , , o .CVPartitionHoldoutKFoldLeaveout Para crear un modelo validado entre referencias cruzadas, puede usar un argumento de par nombre-valor de validación cruzada a la vez.

Alternativamente, valide más adelante pasando aMdl crossval.

Ejemplo: 'CrossVal','on'

Partición de validación cruzada, especificada como el par separado por comas que consta de y un objeto de partición creado por .'CVPartition'cvpartitioncvpartition El objeto de partición especifica el tipo de validación cruzada y la indexación de los conjuntos de entrenamiento y validación.

Para crear un modelo validado entre referencias cruzadas, puede utilizar uno de estos cuatro argumentos de par nombre-valor solo: , , , o .CVPartitionHoldoutKFoldLeaveout

Ejemplo: Supongamos que crea una partición aleatoria para la validación cruzada de 5 veces en 500 observaciones mediante .cvp = cvpartition(500,'KFold',5) A continuación, puede especificar el modelo validado entre cruces mediante .'CVPartition',cvp

Fracción de los datos utilizados para la validación de retención, especificada como el par separado por comas que consta de y un valor escalar en el intervalo (0,1).'Holdout' Si usted especifica, después el software completa estos pasos:'Holdout',p

  1. Seleccione y reserve aleatoriamente % de los datos como datos de validación y entrene el modelo con el resto de los datos.p*100

  2. Almacene el modelo compacto y entrenado en la propiedad del modelo validado de forma cruzada.Trained

Para crear un modelo validado entre referencias cruzadas, puede utilizar uno de estos cuatro argumentos de par nombre-valor solo: , , , o .CVPartitionHoldoutKFoldLeaveout

Ejemplo: 'Holdout',0.1

Tipos de datos: double | single

Número de pliegues que se van a utilizar en un modelo validado por cruz, especificado como el par separado por comas que consta de y un valor entero positivo mayor que 1.'KFold' Si usted especifica, después el software completa estos pasos:'KFold',k

  1. Particione aleatoriamente los datos en conjuntos.k

  2. Para cada conjunto, reserve el conjunto como datos de validación y entrene el modelo con el otro k – 1 Establece.

  3. Almacene los modelos compactos y entrenados en las celdas de un vector de celda -by-1 en la propiedad del modelo validado cruzadamente.kkTrained

Para crear un modelo validado entre referencias cruzadas, puede utilizar uno de estos cuatro argumentos de par nombre-valor solo: , , , o .CVPartitionHoldoutKFoldLeaveout

Ejemplo: 'KFold',5

Tipos de datos: single | double

Deje el indicador de validación cruzada uno-out, especificado como el par separado por comas que consta de y o .'Leaveout''on''off' Si especifica , entonces, para cada una de las observaciones (donde está el número de observaciones excluyendo las observaciones faltantes, especificadas en la propiedad del modelo), el software completa estos pasos:'Leaveout','on'nnNumObservations

  1. Reserve la observación como datos de validación y entrene el modelo utilizando las otras observaciones – 1.n

  2. Almacene los modelos compactos y entrenados en las celdas de un vector de celda -by-1 en la propiedad del modelo validado cruzadamente.nnTrained

Para crear un modelo validado entre referencias cruzadas, puede utilizar uno de estos cuatro argumentos de par nombre-valor solo: , , , o .CVPartitionHoldoutKFoldLeaveout

Ejemplo: 'Leaveout','on'

Opciones de optimización de hiperparámetros

contraer todo

Parámetros para optimizar, especificados como el par separado por comas que consta de y uno de los siguientes:'OptimizeHyperparameters'

  • — No optimizar.'none'

  • — Utilice .'auto'{'Distance','NumNeighbors'}

  • — Optimizar todos los parámetros elegibles.'all'

  • Matriz de cadenas o matriz de celdas de nombres de parámetros elegibles.

  • Vector de objetos, normalmente la salida de .optimizableVariablehyperparameters

La optimización intenta minimizar la pérdida de validación cruzada (error) para variar los parámetros.fitcknn Para obtener información sobre la pérdida de validación cruzada (aunque en un contexto diferente), consulte .Classification Loss Para controlar el tipo de validación cruzada y otros aspectos de la optimización, utilice el par nombre-valor.HyperparameterOptimizationOptions

Nota

los valores reemplazan los valores que establezca utilizando otros argumentos de par nombre-valor.'OptimizeHyperparameters' Por ejemplo, establecer para hacer que se apliquen los valores.'OptimizeHyperparameters''auto''auto'

Los parámetros elegibles para son:fitcknn

  • — búsquedas entre , , , , , , , , , y .Distancefitcknn'cityblock''chebychev''correlation''cosine''euclidean''hamming''jaccard''mahalanobis''minkowski''seuclidean''spearman'

  • — búsquedas entre , , y .DistanceWeightfitcknn'equal''inverse''squaredinverse'

  • — busca entre valores reales positivos, por defecto en el rango .Exponentfitcknn[0.5,3]

  • — busca entre valores enteros positivos, de forma predeterminada escalado de registros en el rango .NumNeighborsfitcknn[1, max(2,round(NumObservations/2))]

  • — busca entre los valores y .Standardizefitcknn'true''false'

Establezca parámetros no predeterminados pasando un vector de objetos que tengan valores no predeterminados.optimizableVariable Por ejemplo,

load fisheriris params = hyperparameters('fitcknn',meas,species); params(1).Range = [1,20];

Pase como el valor de .paramsOptimizeHyperparameters

De forma predeterminada, la visualización iterativa aparece en la línea de comandoy los trazados aparecen según el número de hiperparámetros de la optimización. Para la optimización y las gráficas, la función objetivo es log(1 + cross-validation loss) para la regresión y la tasa de clasificación errónea para la clasificación. Para controlar la visualización iterativa, establezca el campo del argumento de par nombre-valor.Verbose'HyperparameterOptimizationOptions' Para controlar los trazados, establezca el campo del argumento de par nombre-valor.ShowPlots'HyperparameterOptimizationOptions'

Para obtener un ejemplo, consulte .Optimizar clasificador KNN ajustado

Ejemplo: 'auto'

Opciones para la optimización, especificadas como el par separado por comas que consta de y una estructura.'HyperparameterOptimizationOptions' Este argumento modifica el efecto del argumento de par nombre-valor.OptimizeHyperparameters Todos los campos de la estructura son opcionales.

Nombre del campoValoresPredeterminado
Optimizer
  • — Utilice la optimización bayesiana.'bayesopt' Internamente, esta configuración llama a .bayesopt

  • — Utilice la búsqueda de cuadrícula con valores por dimensión.'gridsearch'NumGridDivisions

  • — Buscar al azar entre puntos.'randomsearch'MaxObjectiveEvaluations

búsquedas en un orden aleatorio, utilizando muestreo uniforme sin reemplazo de la cuadrícula.'gridsearch' Después de la optimización, puede obtener una tabla en orden de cuadrícula mediante el comando .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'

Las funciones de adquisición cuyos nombres incluyen no producen resultados reproducibles porque la optimización depende del tiempo de ejecución de la función objetivo.per-second Las funciones de adquisición cuyos nombres incluyen modifican su comportamiento cuando están sobreexplotando un área.plus Para obtener más información, consulte .Acquisition Function Types

'expected-improvement-per-second-plus'
MaxObjectiveEvaluationsNúmero máximo de evaluaciones de funciones objetivas.para o , y toda la cuadrícula para30'bayesopt''randomsearch''gridsearch'
MaxTime

Límite de tiempo, especificado como un real positivo. El límite de tiempo es en segundos, medido por y .tictoc El tiempo de ejecución puede superar porque no interrumpe las evaluaciones de funciones.MaxTimeMaxTime

Inf
NumGridDivisionsPara , el número de valores en cada dimensión.'gridsearch' El valor puede ser un vector de enteros positivos que dan el número de valores para cada dimensión o un escalar que se aplica a todas las dimensiones. Este campo se omite para las variables categóricas.10
ShowPlotsValor lógico que indica si se deben mostrar trazados. Si , este campo traza el mejor valor de función objetivo con respecto al número de iteración.true Si hay uno o dos parámetros de optimización, y si es , también se traza un modelo de la función objetivo con los parámetros.Optimizer'bayesopt'ShowPlotstrue
SaveIntermediateResultsValor lógico que indica si se deben guardar los resultados cuando es .Optimizer'bayesopt' Si , este campo sobrescribe una variable de área de trabajo denominada en cada iteración.true'BayesoptResults' La variable es un objeto.BayesianOptimizationfalse
Verbose

Visualice en la línea de comandos.

  • — Sin visualización iterativa0

  • — Visualización iterativa1

  • — Pantalla iterativa con información adicional2

Para obtener más información, consulte el argumento de par nombre-valor.bayesoptVerbose

1
UseParallelValor lógico que indica si se debe ejecutar la optimización bayesiana en paralelo, lo que requiere .Parallel Computing Toolbox™ Debido a la no reproducibilidad de la sincronización paralela, la optimización bayesiana paralela no produce necesariamente resultados reproducibles. Para obtener más información, consulte .Parallel Bayesian Optimizationfalse
Repartition

Valor lógico que indica si se debe volver a particionar la validación cruzada en cada iteración. Si , el optimizador utiliza una sola partición para la optimización.false

por lo general da los resultados más robustos porque esta configuración tiene en cuenta el ruido de partición.true Sin embargo, para obtener buenos resultados, se requiere al menos el doble de evaluaciones de funciones.true

false
No utilice más de uno de los tres nombres de campo siguientes.
CVPartitionUn objeto, tal como lo creó .cvpartitioncvpartitionsi no especifica ningún campo de validación cruzada'Kfold',5
HoldoutUn escalar en el rango que representa la fracción de retención.(0,1)
KfoldUn entero mayor que 1.

Ejemplo: 'HyperparameterOptimizationOptions',struct('MaxObjectiveEvaluations',60)

Tipos de datos: struct

Argumentos de salida

contraer todo

Modelo de clasificación de vecinos entrenados - más cercano, devuelto como un objeto de modelo o un objeto de modelo validado entre cruzadas.kClassificationKNNClassificationPartitionedModel

Si establece cualquiera de los argumentos de par nombre-valor , , , o , a continuación, es un objeto de modelo validado entre sí.KFoldHoldoutCrossValCVPartitionMdlClassificationPartitionedModel De lo contrario, es un objeto de modelo.MdlClassificationKNN

Para hacer referencia a las propiedades de , utilice la notación de puntos.Mdl Por ejemplo, para mostrar la métrica de distancia en la ventana de comandos, escriba .Mdl.Distance

Más acerca de

contraer todo

Predicción

predice la clasificación de un punto utilizando un procedimiento equivalente a esto:ClassificationKNNxnew

  1. Encuentre los puntos del conjunto de entrenamiento más cercano a .NumNeighborsXxnew

  2. Busque los valores de respuesta a los puntos más cercanos.NumNeighborsY

  3. Asigne la etiqueta de clasificación que tenga la mayor probabilidad posterior entre los valores de .ynewY

Para obtener más información, consulte elPosterior Probability predict Documentación.

Sugerencias

Después de entrenar un modelo, puede generar código C/C++ que predice las etiquetas para los nuevos datos. La generación de código C/C++ requiere MATLAB Coder™. Para obtener más información, consulte .Introduction to Code Generation

Algoritmos

  • o s indicar observaciones faltantes.NaNs<undefined> A continuación se describe el comportamiento de cuándo el conjunto de datos o las ponderaciones contienen observaciones que faltan.fitcknn

    • Si falta algún valor o cualquier peso, quita esos valores de , las ponderaciones y las filas correspondientes de los datos.YfitcknnYX El software vuelve a normalizar los pesos a sumar a .1

    • Si especifica estandarizar los predictores ( ) o la distancia euclidiana estandarizada ( ) sin una escala, elimina las observaciones que faltan de los predictores individuales antes de calcular la media y la desviación estándar.'Standardize',1'Distance','seuclidean'fitcknn En otras palabras, el software implementa y en cada predictor.nanmeannanstd

    • Si especifica la distancia De Mahalanobis ( ) sin su matriz de covarianza, elimina las filas que contienen al menos un valor que falta.'Distance','mahalanbois'fitcknnX En otras palabras, el software se implementa en la matriz predictora.nancovX

  • Supongamos que ha establecido .'Standardize',1

    • Si también especifica o , entonces el software tiene en cuenta los pesos de observación.PriorWeights Específicamente, la media ponderada del predictor esj

      x¯j=Bjwkxjk

      y la desviación estándar ponderada es

      sj=Bjwk(xjkx¯j),

      Dónde Bj es el conjunto de índices para los quek Xjk Y Wk no faltan.

    • Si también establece o , no puede especificar o .'Distance','mahalanobis''Distance','seuclidean'ScaleCov En su lugar, el software:

      1. Calcula las medias y las desviaciones estándar de cada predictor

      2. Estandariza los datos utilizando los resultados del paso 1

      3. Calcula los valores de los parámetros de distancia utilizando sus respectivos valores predeterminados.

  • Si especifica y de o , entonces las escalas de software observadas distancias por las desviaciones estándar ponderadas.ScalePriorWeights

  • Si especifica y de o , el software aplica la matriz de covarianza ponderada a las distancias.CovPriorWeights En otras palabras,

    Cov=Bwj(Bwj)2Bwj2Bwj(xjx¯)(xjx¯),

    ¿dónde está el conjunto de índices para los que la observaciónBj Xj no tiene valores que faltan y Wj no falta.

Alternativas

Aunque puede entrenar un clasificador KNN multiclase, puede reducir un problema de aprendizaje multiclase a una serie de alumnos binarios KNN que utilizan .fitcknnfitcecoc

Capacidades ampliadas

Introducido en R2014a