MATLAB仿真及其简单应用

    技术2022-07-10  128

    聚类分析作为一种常用方法,其主要流程分为以下几步。 1.将数据展示在面板上

    % 随机生成5个中心以及标准差 s = rng(5,'v5normal'); zhong = round((rand(5,2)-0.5)*40); yi= round(rand(5,2)*30)/6; X = [mvnrnd(mu(1,:),sigma(1,:),200); mvnrnd(mu(2,:),sigma(2,:),300); mvnrnd(mu(3,:),sigma(3,:),400); mvnrnd(mu(4,:),sigma(4,:),500); mvnrnd(mu(5,:),sigma(5,:),600)]; % 作图 P1 = figure;clf; scatter(X(:,1),X(:,2),10,'r');

    2.利用不同的算法进行带入分析 1 高斯混合聚类代码

    % options = statset('Display','off'); gm = gmdistribution.fit(X,3,'Options',options); P1 = figure;clf scatter(X(:,1),X(:,2),10,'ro'); hold on ezcontour(@(x,y) pdf(gm,[x,y]),[-30 30],[-25 20]); hold off P2 = figure;clf scatter(X(:,1),X(:,2),20,'ro'); hold on ezsurf(@(x,y) pdf(gm,[x,y]),[-30 30],[-25 20]); hold off view(25,40) cluster1 = (cidx3 == 1); cluster2 = (cidx3 == 2); cluster3 = (cidx3 == 3); cluster4 = (cidx3 == 4); cluster5 = (cidx3 == 5); % 计算分类概率 P = posterior(gm,X); P8 = figure;clf plot3(X(cluster1,1),X(cluster1,2),P(cluster1,1),'r.') grid on;hold on plot3(X(cluster2,1),X(cluster2,2),P(cluster2,2),'bo') plot3(X(cluster3,1),X(cluster3,2),P(cluster3,3),'g*') plot3(X(cluster4,1),X(cluster4,2),P(cluster4,4),'g-') plot3(X(cluster5,1),X(cluster5,2),P(cluster5,5),'r*') legend(' 1 类',' 2 类',' 3 类',' 4 类',' 5 类''Location','NW') clrmap = jet(80); colormap(clrmap(9:72,:)) ylabel(colorbar,'Component 1 Posterior Probability') view(-50,30); % 概率图 P9 = figure;clf [~,order] = sort(P(:,1)); plot(1:size(X,1),P(order,1),'r-',1:size(X,1),P(order,2),'b-',1:size(X,1),P(order,3),'y-'); legend({'Cluster 1 Score' 'Cluster 2 Score' 'Cluster 3 Score''Cluster 4 Score''Cluster 5 Score'},'location','NW'); ylabel('Cluster Membership Score'); xlabel('Point Ranking');

    2 K均值聚类算法

    [cidx3,cmeans3,sumd3,D3] = kmeans(X,3,'dist','sqEuclidean'); P4 = figure;clf; [silh3,h3] = silhouette(X,cidx3,'sqeuclidean'); P5 = figure;clf ptsymb = {'bo','ro','go',',mo','c+'}; MarkFace = {[0 0 1],[.8 0 0],[0 .5 0]}; hold on for i =1:3 clust = find(cidx3 == i); plot(X(clust,1),X(clust,2),ptsymb{i},'MarkerSize',3,'MarkerFace',MarkFace{i},'MarkerEdgeColor','black'); plot(cmeans3(i,1),cmeans3(i,2),ptsymb{i},'MarkerSize',10,'MarkerFace',MarkFace{i}); end hold off

    3 分层聚类算法代码 又叫系统聚类,基本思路是将多个样本各作为一类,计算样本两两之间的距离,合并距离最近的两类成新的一类,然后再计算距离,再合并,直到只有一类为止。层次聚类可以处理分类数据和定量数据,但处理速度相对较慢,通常情况下需要结合相关结果进行主观判断聚类类别数量。

    eucD = pdist(X,'euclidean'); clustTreeEuc = linkage(eucD,'average'); cophenet(clustTreeEuc,eucD); P3 = figure;clf; [h,nodes] =? dendrogram(clustTreeEuc,20); set(gca,'TickDir','out','TickLength',[.002 0],'XTickLabel',[]);
    Processed: 0.014, SQL: 9