Python实现K均值聚类算法分析

6 下载量 22 浏览量 更新于2024-08-03 收藏 286KB DOCX 举报
"西南交通大学的机器学习实验10聚焦于聚类算法,特别是k-means算法的实践。实验目标是理解无监督学习中的聚类任务,掌握k-means算法的基本原理和实现步骤。实验要求包括编写Python代码实现k-means算法,对特定数据集进行聚类,同时观察不同聚类数(k值)对结果的影响,以及损失值(簇内平方误差指标)随k值变化的曲线。实验环境中使用了Python、numpy和matplotlib库。提供的实验代码包含了数据读取、k-means算法的实现、损失值记录及可视化部分。" 在本次实验中,聚类是一种无监督学习方法,用于发现数据的内在结构或模式,而无需预先知道类别信息。k-means是最常见的聚类算法之一,其工作原理如下: 1. **初始化**:首先,从数据集中随机选择k个样本点作为初始聚类中心(或质心)。 2. **分配阶段**:计算每个数据点到所有聚类中心的距离,然后将其分配给最近的聚类中心所在的类。 3. **更新阶段**:重新计算每个类的聚类中心,通常是取该类所有点的均值。 4. **迭代**:重复分配和更新步骤,直到聚类中心不再显著移动或达到预设的最大迭代次数(如实验中的100次)。 实验要求编程实现k-means算法,对名为"experiment_10_training_set.csv"的数据集进行聚类。实验过程中,需要尝试不同的k值,记录每次迭代的损失值(簇内平方误差),并绘制聚类结果图,用不同颜色区分不同类别的数据点。此外,还应绘制loss值随k值变化的曲线图,以评估不同聚类数量下的模型性能。 实验代码中,`kmeans_clustering`函数实现了k-means算法的核心逻辑。首先,通过`np.random.choice`随机选择k个初始质心,接着在`for`循环中执行迭代过程。在每次迭代中,利用`cdist`计算所有数据点与质心之间的距离,然后通过`np.argmin`找到最近的质心并更新标签。接着,根据每个类别的数据点重新计算质心。损失值通过计算所有数据点到其最近质心距离的平方和得到,并被添加到`loss_list`中以备后用。最后,使用matplotlib库绘制聚类结果图和损失值曲线。 在实际应用中,k-means算法的选择依赖于数据的特性,比如数据的分布、维数以及聚类的数量。k值的选择通常需要根据业务需求或者通过肘部法则(Elbow Method)等方法来确定。在这个实验中,通过观察不同k值下的簇内平方误差指标和损失值曲线,可以评估最佳的聚类数量,这有助于理解数据集的内在结构。