赞
踩
用于分类问题,例如:花的分类,消费特诊分类
用于分类问题,例如:花的分类,消费特诊分类
从上图中,我们可以看到,A,B,C,D,E是五个在图中点。而灰色的点是我们的种子点,也就是我们用来找点群的点。有两个种子点,所以K=2。
然后,K-Means的算法如下:
随机在图中取K(这里K=2)个种子点。
然后对图中的所有点求到这K个种子点的距离,假如点Pi离种子点Si最近,那么Pi属于Si点群。(上图中,我们可以看到A,B属于上面的种子点,C,D,E属于下面中部的种子点)
接下来,我们要移动种子点到属于他的“点群”的中心。(见图上的第三步)
然后重复第2)和第3)步,直到,种子点没有移动(我们可以看到图中的第四步上面的种子点聚合了A,B,C,下面的种子点聚合了D,E)。
一个非常快速的,拍脑袋的方法是将样本量除以2再开方出来的值作为K值,具体公式为:
Elbow Method :Elbow意思是手肘,如下图左所示,此种方法适用于 K 值相对较小的情况,当选择的k值小于真正的时,k每增加1,cost值就会大幅的减小;当选择的k值大于真正的K时, k每增加1,cost值的变化就不会那么明显。这样,正确的k值就会在这个转折点,类似elbow的地方。 如下图:
通过画K与cost function的关系曲线图,如左图所示,肘部的值(cost function开始时下降很快,在肘部开始平缓了)做为K值,K=3。并不是所有的问题都可以通过画肘部图来解决,有的问题如右边的那个图,肘点位置不明显(肘点可以是3,4,5),这时就无法确定K值了。故肘部图是可以尝试的一种方法,但是并不是对所有的问题都能画出如左边那么好的图来确定K值。
Elbow Method公式:
数据:consumption_data.xls
链接:https://pan.baidu.com/s/1y8iP7X6mTqiiTGeDtd84vQ
提取码:qm9p
inputfile = 'consumption_data.xls'; % 销量及其他属性数据
%% 读取数据
[num,txt]=xlsread(inputfile);
data = num(:,2:end); %读取excel第2至最后一列
data = zscore(data); %数据标准化
k = 3; % 聚类的类别
iteration =500 ; % 聚类最大循环次数
distance = 'sqEuclidean'; % 距离函数
%% 调用kmeans算法
opts = statset('MaxIter',iteration);
[IDX,C,sumd,D]=kmeans(data,k,'distance',distance,'Options',opts);
上述k选取为3,所以适用r,b,y三种颜色
%% 绘制三维图
xlabel("R");
ylabel("F");
zlabel("M");
%plot3(data(:,1),data(:,2),data(:,3),".",'Color','r');
plot3(data(IDX==1,1),data(IDX==1,2),data(IDX==1,3),'r.','MarkerSize',12)
hold on
plot3(data(IDX==2,1),data(IDX==2,2),data(IDX==2,3),'b.','MarkerSize',12)
hold on;
plot3(data(IDX==3,1),data(IDX==3,2),data(IDX==3,3),'y.','MarkerSize',12)
hold on;
plot3(C(:,1),C(:,2),C(:,3),"o",'Color','b');
%% 打印结果
for i=1:k
disp(['第' num2str(i) '组聚类中心为:']);
disp(C(i,:));
end
%% 使用K-Means算法聚类消费行为特征数据 clear ; % 参数初始化 inputfile = 'consumption_data.xls'; % 销量及其他属性数据 k = 3; % 聚类的类别 iteration =500 ; % 聚类最大循环次数 distance = 'sqEuclidean'; % 距离函数 %% 读取数据 [num,txt]=xlsread(inputfile); data = num(:,2:end); %读取excel第2至最后一列 data = zscore(data); %数据标准化 %% 调用kmeans算法 opts = statset('MaxIter',iteration); [IDX,C,sumd,D]=kmeans(data,k,'distance',distance,'Options',opts); %% 绘制三维图 xlabel("R"); ylabel("F"); zlabel("M"); %plot3(data(:,1),data(:,2),data(:,3),".",'Color','r'); plot3(data(IDX==1,1),data(IDX==1,2),data(IDX==1,3),'r.','MarkerSize',12) hold on plot3(data(IDX==2,1),data(IDX==2,2),data(IDX==2,3),'b.','MarkerSize',12) hold on; plot3(data(IDX==3,1),data(IDX==3,2),data(IDX==3,3),'y.','MarkerSize',12) hold on; plot3(C(:,1),C(:,2),C(:,3),"bo",'Color','b','MarkerSize',15); %% 打印结果 for i=1:k disp(['第' num2str(i) '组聚类中心为:']); disp(C(i,:)); end
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。