Análisis estadístico de Matlab: modelo de algoritmo de agrupamiento

Análisis estadístico: modelos de algoritmos de agrupamiento

análisis de distancia

inserte la descripción de la imagen aquí

estandarización de datos

La distancia euclidiana está relacionada con la dimensión, por lo que a veces es necesario preprocesar los datos,
como la estandarización.
El comando en MATLAB es zscore, el formato de llamada

Z = zscore(X)
输入X表示N行p列的原始观测矩阵,行为个体,列为指标。

输出Z为X的标准化矩阵:
Z = (X–ones(N,1)*mean(X)) ./(ones(N,1)* std(X))mean(X)为行向量,表示各个指标的均值估计,
std(X)表示指标的标准差估计。./表示对应元素相除,
ones(N,1)表示元素全为1的行向量,向量的长度为N。

Agrupamiento de K-medias

El flujo del algoritmo de agrupamiento de K-means:

  1. Especifique el valor K del número de grupos que se dividirán (el número de clases)
  2. Seleccionar aleatoriamente K objetos de datos como centros de conglomerados iniciales (no necesariamente nuestros puntos de muestra)
  3. Calcule la distancia desde cada uno de los objetos de datos restantes hasta los centros de clúster iniciales K y clasifique los objetos de datos en la clase de clúster donde se encuentra el centro más cercano;
  4. Ajuste la nueva clase y vuelva a calcular el centro de la nueva clase;
  5. Repita los pasos 3 y 4 para ver si el centro converge (sin cambios).Si converge o alcanza el número de iteraciones, detenga el ciclo;
  6. Finalizar.

Características de agrupamiento de K-medias

inserte la descripción de la imagen aquí

Algoritmo de agrupamiento K-means++

inserte la descripción de la imagen aquí

uso del programa SPSS

inserte la descripción de la imagen aquí

código

%% 
% K-means 算法MATLAB实现
%-------------------------------------------------------------
%{
    
    
利用Matlab软件中的命令: kmeans,可以实现k-means聚类
对于要处理的数据 构造矩阵,矩阵X的每一行为每个个体的实际数据,每一列都是不同的指标
如果提供的数据不是按照规范模式,需要进行矩阵转置
x=y';     %矩阵x的行为个体,列为指标  
[a,b]=kmeans(x,2)  %分为2类,输出:  a为聚类的结果,b为聚类重心, 每一行表示一个类的重心
使用kmeans进行处理 
%}
%% 数据准备和初始化
clc
clear
load kdata.mat


[a,b]=kmeans(x,3);  %%分为3类输出
x1=x(find(a==1),:)   %提取第1类里的样品
x2=x(find(a==2),:)   %提取第2类里的样品
x3=x(find(a==3),:)   %提取第3类里的样品
sd1=std(x1)
sd2=std(x2)  
sd3=std(x3)  % 分别计算第1类和第2类第3类的标准差
plot(x(a==1,1),x(a==1,2),'r.',x(a==2,1),x(a==2,2),'b.',x(a==3,1),x(a==3,2),'g.','MarkerSize',10)  %作出聚类的散点图
title('k-means聚类分析散点图');

inserte la descripción de la imagen aquí

Análisis de conglomerados – Análisis de pedigrí

Para estudiar la implementación de la agrupación en clústeres de MATLAB, los pasos de implementación son aproximadamente los siguientes:

  1. Ingrese la matriz de datos, preste atención al significado real de filas y columnas;
  2. Calcule la distancia entre cada muestra (¿fila? ¿columna?)
    Distancia euclidiana: d=pdist(A) % Preste atención para calcular la distancia entre cada fila en A;
    distancia absoluta: d= pdist(A,'cityblock');
    Distancia Mingshi : d=pdist(A,'minkowski',r); % r debe llenarse con un número real específico;
    distancia ponderada de varianza: d= pdist(A,'seuclid');
    Distancia de Mahalanobis: d= pdist(A,' mahal');
    Nota: La salida del comando anterior es un vector de fila
  3. Elija diferentes distancias entre clases para agrupar
  4. Hacer un mapa de conglomerados genealógicos
  5. De acuerdo con el número de categorías, genera los resultados de la agrupación
Trate de usar los datos de la encuesta para realizar un análisis de conglomerados en 16 regiones.

El siguiente cuadro es el resumen de los datos de la encuesta por muestreo de los gastos de los agricultores en 16 regiones de mi país en 1982. Cada región ha investigado seis indicadores que reflejan el gasto medio de consumo vivo per cápita.

Diagrama de conglomerados de pedigrí
a=load('ho2.txt');%导入数据

d1=pdist(a);% 此时计算出各行之间的欧氏距离,

z1=linkage(d1);

z2=linkage(d1,'complete');

z3=linkage(d1,'average');

z4=linkage(d1,'centroid');

z5=linkage(d1,'ward');

R=[cophenet(z1,d1),cophenet(z2,d1),cophenet(z3,d1),cophenet(z4,d1),cophenet(z5,d1)]

H= dendrogram(z3)

T=cluster(z3,4)  %cluster 创建聚类,并作出谱系图

set(get(gca, 'Title'), 'String', '聚类分析-谱系聚类图');

diagrama de dispersión de análisis de conglomerados k-medias
[a,b]=kmeans(x,4);  %%分为4类输出
x1=x(find(a==1),:)   %提取第1类里的样品
x2=x(find(a==2),:)   %提取第2类里的样品
x3=x(find(a==3),:)   %提取第3类里的样品
x4=x(find(a==4),:)   %提取第3类里的样品
sd1=std(x1)
sd2=std(x2)  
sd3=std(x3)  % 分别计算第1类和第2类第3类的标准差
sd4=std(x4)  % 分别计算第1类和第2类第3类的标准差
plot(x(a==1,1),x(a==1,2),'r.',x(a==2,1),x(a==2,2),'b.',x(a==3,1),x(a==3,2),'g.',x(a==4,1),x(a==4,2),'y.','MarkerSize',15)  %作出聚类的散点图
title('k-means聚类分析散点图');

inserte la descripción de la imagen aquí

linkage函数
调用格式:Z=linkage(Y,‘method’)
输入值说明:Y为pdist函数返回的M*(M-1)/2个元素的行向量,用‘method’参数指定的算法计算系统聚类树。
method:可取值如下:
‘single’:最短距离法(默认);
‘complete’:最长距离法;
‘average’:未加权平均距离法;
‘weighted’: 加权平均法;
‘centroid’:质心距离法;
‘median’:加权质心距离法;
‘ward’:内平方距离法(最小方差算法)
返回值说明:Z为一个包含聚类树信息的(m-1)×3的矩阵,其中前两列为索引标识,表示哪两个序号的样本可以聚为同一类,第三列为这两个样本之间的距离。另外,除了M个样本以外,对于每次新产生的类,依次用M+1、M+2、…来标识

Supongo que te gusta

Origin blog.csdn.net/weixin_43599390/article/details/131358191
Recomendado
Clasificación