Algoritmo del diccionario MATLAB
#
# OBJETIVO: usar
# K más cercano Método vecino
#
#Principio: KNN es un método de clasificación supervisado, determinista y no paramétrico
#. Utiliza la regla de la mayoría para
# asignar nuevos objetos a una clase.
#Supongamos que el número de objetos en cada clase
# también es similar.
#Sin suposiciones sobre la distribución de datos
#Matriz de varianza-covarianza para cada clase.
#En los siguientes casos, no hay límite en el número de variables
#Usa distancia euclidiana.
#Sin embargo, cuando se utiliza el coeficiente de correlación
#El número de variables debe ser mayor que 1.
# Referencias: Massart D. L., Vandeginste B. G. M., Deming S. N.
# Michotte Y. and Kaufman L., Chemometrics: A Textbook,
p>
#Capítulo 23, págs. 395-397, Elsevier Science Publisher B. V.,
#Amsterdam 1988.
#
# ENTRADA: x: (mxn) matriz de datos de m objetos y n variables,
# Contiene varias categorías de muestras (conjunto de entrenamiento)
# grupo: (MX 1) etiqueta de
#conjunto de entrenamiento
# K: número entero, número de vecinos más cercanos
# dist : entero,
# = 1, distancia euclidiana
# = 2, coeficiente de correlación, (número de variables gt1)
# XT: (mtxn) Datos matriz que contiene objetos mt y n variables
#(conjunto de prueba o desconocido)
# groupt: (MTX 1) Vector de columna que marca objetos mt
p># Conjunto de prueba
#- gt; Si el nuevo objeto es desconocido, ingrese [].
#
#Salida: ccr: escalar, tasa de clasificación correcta
# pgroupt: vector de fila, etiqueta de clase prevista del conjunto de prueba
# 0 significa que el objeto no pertenece a ninguna categoría
#Categoría
#
#Subrutina: sortlab.m: Clasificar vector de etiqueta de grupo
p>#
#Autor: Wu Wen
# Copyright de chemo AC (c) 1997
# FABI, Universidad Libre de Bruselas
#Laarbeeklaan 103 1090 Jette
#
#Versión: 1.1 (28/02/1998)
#
#Test: Andrea Candolfi
#
función [ccr, pgroupt]=knnt(x,group,K,dist,xt,groupt);
p>Si nargin==5, groupt =[]; porcentaje final del objeto desconocido
Distancia = variable de cambio de porcentaje de distancia clara
if tamaño(grupo, 1) >1,
group = group ';Cambiar vector de columna a vector de fila
groupt = groupt ';Cambiar vector de columna a vector de fila
End; p>
[m, n] = tamaño (x); porcentaje del tamaño del conjunto de entrenamiento
Si distancia == 2 ampn lt2, error ('El número de variables debe ser gt1'), fin viene Verifique el número de variables cuando use el coeficiente de correlación
[mt, n] = size(XT porcentaje del tamaño del conjunto de prueba
dis = zero(mt, m); porcentaje del valor de distancia inicial (matriz cero)
Calcular la distancia para cada objeto del conjunto de prueba
Para i=1: mt
Para cada objeto del conjunto de entrenamiento y cada j = 1 entre objetos del conjunto de prueba: m
Si distancia==1
dis(i,j)=(xt(i,:)-x(j,: )*( xt(i,:)-x(j,:)'; distancia euclidiana
Otros
r=corrcoef(xt(i,:)', x(j,:) ; Matriz de coeficientes de correlación
r=r(1, 2); Coeficiente de correlación
dis(i, j)= 1-r * 1 - Potencia del coeficiente de correlación
r=r(1, 2); p>
Fin
Fin
Fin
Porcentaje de vecinos más cercanos encontrados
lab=zeros (1, mt); porcentaje del valor inicial del laboratorio
Para cada objeto de prueba, I = 1: mt
[a, b]=sort(dis(i,) ; Distancia de clasificación
b=b(find(a lt= a(K))); encontrar índice del vecino más cercano
b = grupo(b); objeto vecino más cercano
[ng, l group] = sort lab(b); Cuente el número de objetos de cada clase en el vecino más cercano
a = find(ng = = max(ng)); objeto
Si longitud(a) = = 1 solo hay una clase
lab(I) = lgroup(a); etiqueta de clase
Otro
p>lab(I)= 0; más de una clase
Fin
Fin
Calcular tasa de éxito
if ~isempty(groupt)
dif = groupt-lab; etiquetas de categorías previstas y etiquetas de categorías conocidas
Diferencia porcentual entre ticks
CCR = sum(dif = = 0)/mt; porcentaje de tasa de éxito
Fin
pgroupt = vector de salida de laboratorio
p>