导航:首页 > 源码编译 > kmeans聚类算法matlab

kmeans聚类算法matlab

发布时间:2023-03-15 11:03:39

① matlab 聚类算法silhouette

~的意思的无视这个项,仅生成h。

snapnaw,拍摄图像快照以包括在发布文档中。代码中没有涉及发布文档,所以没有显示。

参考网页网页链接

② 怎么用Matlab计算聚类算法的正确率问题

我把K-mediods的matlab代码贴出来,你好好学习一下
function label = kmedoids( data,k,start_data )
% kmedoids k中心点算法函数
% data 待聚类的数据集,每一行是一个样本数据点
% k 聚类个数
% start_data 聚类初始中心值,每一行为一个中心点,有cluster_n行
% class_idx 聚类结果,每个样本点标记的类别
% 初始化变量
n = length(data);
dist_temp1 = zeros(n,k);
dist_temp2 = zeros(n,k);
last = zeros(n,1);
a = 0;
b = 0;
if nargin==3
centroid = start_data;
else
centroid = data(randsample(n,k),:);
end
for a = 1:k
temp1 = ones(n,1)*centroid(a,:);
dist_temp1(:,a) = sum((data-temp1).^2,2);
end
[~,label] = min(dist_temp1,[],2);
while any(label~=last)
for a = 1:k
temp2 = ones(numel(data(label==a)),1);
temp3 = data(label==a);
for b = 1:n
temp4 = temp2*data(b,:);
temp5 = sum((temp3-temp4).^2,2);
dist_temp2(b,a) = sum(temp5,1);
end
end
[~,centry_indx] = min(dist_temp2,[],1);
last = label;
centroid = data(centry_indx,:);
for a = 1:k
temp1 = ones(n,1)*centroid(a,:);
dist_temp1(:,a) = sum((data-temp1).^2,2);
end
[~,label] = min(dist_temp1,[],2);
end
end

③ 怎样用matlab作聚类分析啊求操作T_T T_T

展示如何使用MATLAB进行聚类分析
分别运用分层聚类、K均值聚类以及高斯混合模型来进行分析,然后比较三者的结果
生成随机二维分布图形,三个中心
% 使用高斯分布(正态分布)
% 随机生成3个中心以及标准差
s = rng(5,'v5normal');
mu = round((rand(3,2)-0.5)*19)+1;
sigma = round(rand(3,2)*40)/10+1;
X = [mvnrnd(mu(1,:),sigma(1,:),200); ...
mvnrnd(mu(2,:),sigma(2,:),300); ...
mvnrnd(mu(3,:),sigma(3,:),400)];
% 作图
P1 = figure;clf;
scatter(X(:,1),X(:,2),10,'ro');
title('研究样本散点分布图')

K均值聚类
% 距离用传统欧式距离,分成两类
[cidx2,cmeans2,sumd2,D2] = kmeans(X,2,'dist','sqEuclidean');
P2 = figure;clf;
[silh2,h2] = silhouette(X,cidx2,'sqeuclidean');
从轮廓图上面看,第二类结果比较好,但是第一类有部分数据表现不佳。有相当部分的点落在0.8以下。

分层聚类

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',[]);

可以选择dendrogram显示的结点数目,这里选择20 。结果显示可能可以分成三类

重新调用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

运用高斯混合分布模型进行聚类分析
分别用分布图、热能图和概率图展示结果 等高线

% 等高线
options = statset('Display','off');
gm = gmdistribution.fit(X,3,'Options',options);
P6 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezcontour(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
hold off
P7 = figure;clf
scatter(X(:,1),X(:,2),10,'ro');
hold on
ezsurf(@(x,y) pdf(gm,[x,y]),[-15 15],[-15 10]);
hold off
view(33,24)

热能图
cluster1 = (cidx3 == 1);
cluster3 = (cidx3 == 2);
% 通过观察,K均值方法的第二类是gm的第三类
cluster2 = (cidx3 == 3);
% 计算分类概率
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*')
legend('第 1 类','第 2 类','第 3 类','Location','NW')
clrmap = jet(80); colormap(clrmap(9:72,:))
ylabel(colorbar,'Component 1 Posterior Probability')
view(-45,20);
% 第三类点部分概率值较低,可能需要其他数据来进行分析。

% 概率图
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'},'location','NW');
ylabel('Cluster Membership Score');
xlabel('Point Ranking');

通过AIC准则寻找最优的分类数
高斯混合模型法的最大好处是给出分类好坏的标准
AIC = zeros(1,4);
NlogL = AIC;
GM = cell(1,4);
for k = 1:4
GM{k} = gmdistribution.fit(X,k);
AIC(k)= GM{k}.AIC;
NlogL(k) = GM{k}.NlogL;
end
[minAIC,numComponents] = min(AIC);
按AIC准则给出的最优分类数为: 3 对应的AIC值为: 8647.63

后记
(1)pluskid指出K均值算法的初值对结果很重要,但是在运行时还没有发现类似的结果。也许Mathworks对该算法进行过优化。有时间会仔细研究下代码,将结果放上来。
分享:

56
喜欢
4
赠金笔
阅读(21209)┊ 评论 (4)┊ 收藏(1) ┊转载原文 ┊ 喜欢▼ ┊打印┊举报

前一篇:[转载]拉普拉斯矩阵
后一篇:[转载]用matlab做聚类分析

④ 怎样用matlab实现多维K-means聚类算法

直接用kmeans函数。。。
idx = kmeans(X,k)
idx = kmeans(X,k,Name,Value)
[idx,C] = kmeans(___)
[idx,C,sumd] = kmeans(___)
[idx,C,sumd,D] = kmeans(___)
idx = kmeans(X,k) performs k-means clustering to partition the observations of the n-by-p data matrix X into k clusters, and returns an n-by-1 vector (idx) containing cluster indices of each observation. Rows of X correspond to points and columns correspond to variables.
By default, kmeans uses the squared Euclidean distance measure and the k-means++ algorithm for cluster center initialization.
example
idx = kmeans(X,k,Name,Value) returns the cluster indices with additional options specified by one or more Name,Value pair arguments.
For example, specify the cosine distance, the number of times to repeat the clustering using new initial values, or to use parallel computing.
example
[idx,C] = kmeans(___) returns the k cluster centroid locations in the k-by-p matrix C.
example
[idx,C,sumd] = kmeans(___) returns the within-cluster sums of point-to-centroid distances in the k-by-1 vector sumd.
example
[idx,C,sumd,D] = kmeans(___) returns distances from each point to every centroid in the n-by-k matrix D.

⑤ Matlab FCM聚类和kmeans聚类有什么区别

K均值聚类算法即是HCM(普通硬-C均值聚类算法),它是一种硬性划分的方法,结果要么是1要么是0,没有其他情况,具有“非此即彼”的性质。里面的隶属度矩阵是U。
FCM是把HCM算法推广到模糊情形,用在模糊性的分类问题上,给了隶属度一个权重。隶属度矩阵用U的m次方表示。

阅读全文

与kmeans聚类算法matlab相关的资料

热点内容
xp自动备份指定文件夹 浏览:660
我的世界服务器如何让世界平坦 浏览:167
服务器和电脑如何共享 浏览:685
程序员早期症状 浏览:568
学小学生编程哪里学 浏览:947
单片机控制与设计论文 浏览:775
破解加密视频违法嘛 浏览:242
pythonforandroid下载 浏览:235
进光遇显示服务器繁忙怎么办 浏览:643
安卓手机如何改成苹果xr 浏览:519
华为服务器为什么在山里 浏览:274
黑马程序员基础测试题 浏览:265
网易服务器如何ban物品指令 浏览:817
安卓微信不更新了怎么办 浏览:155
专业程序员什么水平 浏览:879
如何查看服务器硬盘剩余空间 浏览:574
cdda算法 浏览:412
javawebserver 浏览:68
安卓手机怎么看视频区域限制 浏览:156
php获取二级域名 浏览:471