Red de conocimiento informático - Aprendizaje de programación - Implementación del algoritmo K-MEANS

Implementación del algoritmo K-MEANS

Agregue una implementación de Matlab:

función [cid, nr, centres] = cskmeans(x, k, nc)

CSKMEANS Agrupación de K-Means - General acercarse.

HMEANS se utiliza para encontrar la partición inicial y luego cada partición. p> Esto implementa un algoritmo K-means más general, donde

HMEANS se utiliza para encontrar la partición inicial y luego examina cada

observación para mejorar aún más la minimización

Suma de cuadrados dentro de un grupo.

[CID, NR, CENTERS] = CSKMEANS(X, K, NC) realiza una agrupación de K-medias utilizando los datos proporcionados en X

Agrupación: X es una matriz de datos n x d,

donde cada fila representa una observación. K representa

el número de clústeres necesarios. NC es una matriz k x d que representa los centros del grupo inicial. Si no se especifica NC, no se especifica ningún centro de clúster inicial

. Si no se especifica NC,

los centros se seleccionarán aleatoriamente a partir de las observaciones: CID proporciona un conjunto de n índices que representan la membresía del grupo

de cada punto. > miembro de cada punto. NR es el número de observaciones en cada grupo

. CENTROS es una matriz en la que cada fila

corresponde a un centro de clúster.

Véase también CSHMEANS

W. L. y A. R. Martinez, 15/9/01

Caja de herramientas de estadística computacional

Advertencia desactivada

CSHMEANS

es una matriz en la que cada fila

corresponde a un centro de clúster. advertencia desactivada

[n, d] = size(x);

if nargin lt; 3

Luego seleccione algunas observaciones como centros de conglomerados.

ind = ceil(n*rand(1, k));

Agregaremos algo de ruido para hacerlo más interesante.

nc = x(ind,:) randn(k, d);

end

Establecer almacenamiento

Entero 1,. ....

cid = zeros(1,n);

Establezca un valor diferente para iniciar el ciclo.

oldcid = ones(1,n);

Números en cada grupo.

nr = zeros(1,k);

Establece el número máximo de iteraciones.

maxiter = 100;

iter = 1;

mientras ~ isequal(cid, oldcid) amp; Ejecute el algoritmo hmeans

Para cada punto, encuentre la distancia a todos los centros del grupo

para i = 1: n

dist = sum(( repmat(x(i,:),k,1)-nc).^2,2);

[m,ind] = min(dist Asígnalo al centro de clases del clúster

cid(i) = ind;

end

Buscar nuevo centro de clúster

para i = 1:k

Encuentra todos los puntos en el grupo

ind = find(cid==i);

Encuentra el punto central

nc (i,:) = media (x(ind,:));

Encuentra el número en cada grupo;

nr(i) = longitud(ind) ;

end

iter = iter 1;

end

Ahora verifique cada observación para ver si se puede reducir aún más el error.

Recorre todos los puntos.

maxiter = 2;

iter = 1;

move = 1;

mientras iter lt; 0

move = 0;

Recorre todos los puntos.

for i = 1:n

Encuentra la distancia a todos los centros de los conglomerados

dist = sum((repmat (x(i,:), k, 1)-nc).^2, 2);

r = cid(i) Este es el ID del clúster de x

nr, nr 1;

<); p>dadj = nr./(nr 1).*dist'; todas las distancias ajustadas

[m, ind] = min(dadj); p>

if ind ~= r Si no, mueve x

cid(i) = ind

ic = find(cid == ind);

nc(ind,:) = media(x(ic,:));

mover = 1;

fin

fin

iter = iter 1;

fin

centros = nc;

if movimiento == 0

disp(' No se movieron puntos después del procedimiento de agrupación inicial. ')

If move == 0

disp('No se movieron puntos después del procedimiento de agrupación inicial.')

else

disp('Algunos puntos se movieron después del proceso de agrupación inicial.')

end

advertencia activada