Red de conocimiento informático - Aprendizaje de código fuente - Clasificador de texto (basado en el algoritmo KNN), el mejor lenguaje es Matlab, conjunto de datos de prueba. . . .

Clasificador de texto (basado en el algoritmo KNN), el mejor lenguaje es Matlab, conjunto de datos de prueba. . . .

function [ccr,pgroupt]=knnt(x,group,K,dist,xt,groupt)

%#

%# 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

%# 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,

%# Capítulo 23, págs. 395-397, Elsevier Science Publishers B. V.,

%# Á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

%#

%#

%# 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