1.基本思想
K-Means聚类是一种无监督学习算法,其基本思想是将数据集划分为K个簇,每个簇内的样本点彼此之间的距离尽量小,而不同簇之间的距离尽量大。具体实现时,首先需要指定簇的数量K,然后在数据集中随机选择K个样本点作为初始的聚类中心,然后根据每个样本点到聚类中心的距离将其分配给离其最近的簇,再根据每个簇内的样本点计算新的聚类中心,直到簇的划分不再发生变化或达到最大迭代次数为止。K-Means聚类算法最终得到的结果是将数据集划分为K个簇,并且每个样本点都被分配到了其中一个簇中。
2.数据集介绍
鸢尾花(Iris)数据集是一个经典的数据集,用于机器学习和统计学习中的分类和聚类问题。该数据集包含了三种不同类型的鸢尾花(山鸢尾、变色鸢尾和维吉尼亚鸢尾)的测量数据,每种花各有50个样本。每个样本包含四个特征,即萼片长度、萼片宽度、花瓣长度和花瓣宽度,以及它所属的鸢尾花类型。
该数据集最早由英国统计学家和生物学家Ronald Fisher在1936年的一篇论文中介绍,并一直被广泛用于分类和聚类问题的研究中。由于其简单性和广泛应用性,鸢尾花数据集已成为了机器学习和统计学习中的标准数据集之一。
本文采用的数据是.xlsx格式,前四列为样本的特征值,最后一列为样本的标签,标签值为1,2,3
3.文件结构
iris.xlsx % 鸢尾花数据集,具体格式参考第2部分
Main.m % 主函数
4.详细代码及注释
% 清空变量
warning off % 关闭报警信息
close all % 关闭开启的图窗
clear % 清空变量
clc % 清空命令行
% 读取数据
data = readtable('iris.xlsx');
X = table2array(data(:, 1:4));
% 设置 K-Means 参数
k = 3; % 聚类数
max_iter = 100; % 最大迭代次数
% 运行 K-Means
[idx, C] = kmeans(X, k, 'MaxIter', max_iter);
% 可视化聚类结果
figure
gscatter(X(:,1), X(:,2), idx)
hold on
plot(C(:,1), C(:,2), 'kx', 'MarkerSize', 15, 'LineWidth', 3)
legend({'Cluster 1', 'Cluster 2', 'Cluster 3', 'Cluster Centers'})
title('K-Means Clustering of Iris Dataset')
xlabel('Sepal Length')
ylabel('Sepal Width')