Day10聚类模型

一、基本思想

将未知的样本,划分为由类似的对象组成的多个类

二、聚类方法

k-means(原型聚类)

实现步骤:

①指定需要划分类的个数k

②随机选择k个数据作为聚类的中心(不一定是样本数据)

③计算其余各点到各个聚类中心点的聚类,然后把它们依次分配到聚类他们最近的聚类中心点所在的簇

④调整新类,并重新计算新类的中心,循环2、3步

⑤看中心是否收敛,如果收敛则结束

matlab代码:

clear all
close all
%导入其自带的数据集fisheriris 
%该数据集总共统计了三种鸢尾花的花萼长、花萼宽、花瓣长和花瓣宽
load fisheriris;             
X;    % 存放所有输入变量,样本集个数n=150, 特征个数m=4
Y;    % 存放输出变量/标签, 一共3类,k=3 

% 数据预处理:中心化处理(消除特征之间的差异)
meanX = ones(size(X,1),1) * mean(X); 
dataX = X - meanX;

% kmeans聚类
% kmeans使用平方欧几里得距离(sqeuclidean)度量和k-means++算法进行聚类中心初始化
cluster_num=3; %自定义分类数
iterations=100;
[index_km,center_km] = kmeans(dataX,cluster_num,'distance','sqeuclidean','maxIter', iterations);
% [index_km,center_km] = kmeans(dataX,cluster_num,'distance','cityblock','maxIter', iterations);

% 可视化,注意:数据集每个样本是4个特征,可视化时仅用了前两个特征!
a=unique(index_km);  % 找出聚类的个数
C=cell(1,length(a)); % 创建元胞数组
% 存放每一类的样本的序号
for i=1:length(a)
   C(1,i)={find(index_km==a(i))};
end

color={'g.','r.','c.','m.','y.','k.'};
for j=1:cluster_num
    data_get=dataX(C{1,j},:);
    scatter(data_get(:,1),data_get(:,2),'*',color{j}) 
    hold on
end
plot(center_km(:,1),center_km(:,2),'kd','LineWidth',2);
hold on
% 计算SC轮廓系数,值介于[-1,1],越大越好
sc_k=mean(silhouette(dataX,index_km));
title_str1=['kmeans',' k=',num2str(cluster_num),'  sc_k=',num2str(sc_k)];
title(title_str1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值