Red de conocimiento informático - Conocimiento de Internet de las cosas - ¿Cómo escribir un programa en Matlab para el algoritmo de agrupamiento en clústeres K-means?

¿Cómo escribir un programa en Matlab para el algoritmo de agrupamiento en clústeres K-means?

En el análisis de conglomerados, el algoritmo de agrupamiento de K-means (algoritmo k-means

) es un método básico de clasificación no supervisada, también llamado algoritmo de C-means. Su idea básica es: actualizar el valor de a través del método de iteración. centro de cada grupo uno por uno hasta obtener el mejor resultado de agrupamiento.

Suponiendo que el conjunto de muestras se divide en c categorías, el algoritmo es el siguiente:

(1) Seleccione adecuadamente los centros iniciales de c categorías;

(2) En las iteraciones de In k, para cualquier muestra, la distancia a c centros será la distancia más corta entre la muestra y el centro de la clase.

(3) Utilice métodos como la media para actualizar el centro de la clase;

Esta es la primera vez que usamos el método C-mean para actualizar el centro de esta clase.

(4) Para todos los centros de clúster c, si el valor permanece sin cambios después de actualizar utilizando el método de iteración en (2) (3), la iteración finaliza; de lo contrario, la iteración continúa.

El siguiente es un programa escrito por el autor para dividir dos categorías, que se pueden llamar como una función.

Función

[samp1, samp2]=kmeans(samp);

Como llamada a función, elimina los caracteres de comentario

samp=[11.1506

6.7222

2.3139

5.9018

11.0827

5.7459

13.2174

13.8243

4.8005

0.9370

12.3576];

Muestra set

[l0

l]=size(samp);

Utilice la media para dividir las muestras en dos categorías y luego utilice la media de cada una. categoría como centro del clúster

th0=mean(samp);n1=0;n2=0;c1=0.0;c1=double(c1);c2=c1;for

i=1:lif

muestra(i)lt;th0

c1=c1 muestra(i);n1=n1 1;elsec2=c2 muestra(i);n2=n2 1; endendc1=c1/n1;c2 =c2/n2;

Centro de agrupamiento inicial t=0; cl1=c1; cl2=c2;

c11=c1;

Centro de agrupación while

t==0samp1=zeros(1,l);

samp2=samp1; p>

i=1:lif

abs(muestra(i)-c11)lt; abs(muestra(i)-c22)

muestra1(n1)=muestra (i);

cl1=cl1 muestra(i); n1=n1 1;

c11=cl1/n1; elsesamp2(n2)=muestra(i); >

cl2 =cl2 muestra(i);n2=n2 1;

c22=cl2/n2;endendif

c11==c1

amp ;amp;

p>

c22==c2t=1; endcl1=c11; cl2=c22;

c1=c11; p>end

samp1, samp2 son los resultados de la agrupación.

Lo que se utiliza aquí es la media del valor central inicial, que también se puede determinar empíricamente según la naturaleza del problema, o el conjunto de muestras se divide aleatoriamente en c categorías y la media de cada categoría. se calcula.

El algoritmo k-means necesita conocer el número de categorías de antemano, lo cual es su defecto.