Clasificador de texto (basado en el algoritmo KNN), el mejor lenguaje es Matlab, conjunto de datos de prueba. . . .
%#
%# Propósito: Usar el método K Vecino más cercano para probar el objeto de conjunto de prueba u objetos desconocidos para clasificación
%#
%#
%# Principio: KNN es un método supervisado, determinista y no paramétrico p >
%# Método de clasificación. Utiliza la regla de la mayoría para asignar nuevos objetos a una categoría.
%# Supongamos que el número de objetos en cada categoría es similar.
%# Supongamos que hay el mismo número de objetos en cada clase.
%# No se hacen suposiciones sobre la distribución de datos y
%# la matriz de varianza-covarianza para cada categoría.
%# Cuando se usa la distancia euclidiana, no hay límite en el número de variables
%# Cuando se usa la distancia euclidiana, no hay límite en el número de variables
%#.
%# Sin embargo, cuando se utilizan coeficientes de correlación,
%# no hay límite en el número de variables que se pueden utilizar en cada categoría de coeficientes de correlación.
%# Sin embargo, cuando se utilizan coeficientes de correlación,
%# el número de variables debe ser mayor que 1.
%# Referencia: Massart D. L., Vandeginste B. G. M., Deming S. N.,
%# Michotte Y. y Kaufman L., Quimiometría: un libro de texto,
%# Ámsterdam, 1988.
%#
%# ENTRADA: x: (mxn) matriz de datos con m objetos y n variables,
%# que contiene muestras de varias clases (entrenamiento set)
%# grupo: (mx1) vector de columna que etiqueta los m objetos del conjunto de entrenamiento
%#
%# K: dist: entero,
%# = 1, distancia euclidiana
%# = 1, y la distancia entre m objetos y n variables,
%# contiene muestras de múltiples categorías (conjunto de entrenamiento
%#)
%# = 2, coeficiente de correlación, (No.1)
%# xt: (mtxn) matriz de datos, que contiene objetos mt y n variables
%# (conjunto de prueba u objetos desconocidos)
%# groupt: (mtx1) vector de columna, etiquetas del conjunto de prueba objetos mt
%#
%# --> 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 está clasificado en ningún
p>
%# Clase
%#
%#
%# Subrutina: sortlab.m: Ordenar vectores de etiquetas de grupo en clases p>
%#
%#
%# Autor: Wu Wen
%#
%#
%#
%# Autor: Wu Wen
%#
%# Autor: Wu Wen
%# Copyright(c) 1997 para ChemoAc
%# FABI, Vrije Universiteit Brussel
%# Laarbeeklaan 103 1090 Jette
%#
%# VERSIÓN: 1.1 (28/02/1998)
%#
%# PRUEBA: Andrea Candolfi
%#
function [ccr,pgroupt]=knnt(x, group,K,dist,xt,groupt);
if nargin==5, groupt=[]; p>distance=dist; clear dist % cambiar variable
if size(group,1)>1,
group=group'; p>
groupt=group'; % Cambiar vector de columna a vector de fila
groupt=groupt' % Cambiar vector de columna a vector de fila
end;
[m ,n]=size(x); % tamaño del conjunto de entrenamiento
if distancia==2 & n<2, error('El número de variables debe > 1'),end % Número de variables a comprobar cuando se utiliza el coeficiente de correlación
[mt,n]=size(xt); tamaño del conjunto de prueba
dis=zeros(mt,m % valor de distancia inicial (cero);
matriz)
% Calcular la distancia para cada objeto del conjunto de prueba
para i=1:mt
para j=1:m % para cada objeto del conjunto de entrenamiento y la distancia entre cada objeto del conjunto de prueba
if distancia==1
dis(i,j)=(xt(i,:)-x(j,:) )*( xt(i,:)-x(j,:))'; % distancia euclidiana
else
r=corrcoef(xt(i, :)', x(j,:)'); % matriz de coeficiente de correlación
r=r(1,2 % coeficiente de correlación
dis(i,j)= 1-r*); r; 1 - el poder del coeficiente de correlación
< el poder del coeficiente de correlación
end
end
end
end
end
end
fin p>
% Buscar vecinos más cercanos
lab=zeros(1,mt % valor inicial de lab
para i=1: mt % cada objeto de prueba
[a,b]=sort(dis(i,:)); % Ordenar la distancia
b=b(find(a<=a(K)) % Encontrar la índice de vecino más cercano
b=group(b); % Encuentra los objetos vecinos más cercanos
[ng,lgroup]=sortlab(b); el vecino más cercano
a=find(ng==max(ng) % Encuentra la clase con el mayor número de objetos
si length(a)==1 % Allí es solo una clase
lab(i)=lgroup(a); % etiqueta de clase
else
lab(i)=0; class
end
end
% Tasa de éxito del cálculo
if ~isempty(groupt)
dif= groupt-lab; % de etiqueta de categoría prevista es la misma que ya Conozca la diferencia entre etiquetas de categoría
ccr=sum (dif==0)/mt % tasa de éxito
end
pgroupt=lab; % Vector de salida