K-Means聚类算法:从原理到实践



前言

在机器学习和数据挖掘领域,聚类算法是一种重要的无监督学习方法,用于将数据集中的样本划分为若干个簇,使得同一簇内的样本相似度高,而不同簇之间的样本相似度低。K-Means算法是其中最经典且广泛应用的聚类算法之一。本文将详细介绍K-Means算法的原理、实现步骤、优缺点以及实际应用场景。

一、K-Means算法简介

K-Means算法是一种基于距离的聚类算法,由J. MacQueen在1967年提出。其核心思想是通过迭代优化,将数据集划分为K个簇,使得每个簇内的样本点到簇中心的距离最小化。

1.基本概念

  • 簇(Cluster):一组相似的数据点的集合。

  • 簇中心(Centroid):簇内所有数据点的均值,代表该簇的中心位置。

  • 距离度量:通常使用欧氏距离来衡量数据点之间的相似性。

二、K-Means算法步骤

1.K-Means算法分为以下几个步骤:

  • 初始化:随机选择K个数据点作为初始簇中心。
  • 分配数据点:计算每个数据点到K个簇中心的距离,并将其分配到距离最近的簇。
  • 更新簇中心:重新计算每个簇的中心,即簇内所有数据点的均值。
  • 迭代优化:重复步骤2和步骤3,直到簇中心不再发生变化或达到最大迭代次数。

三、K-Means算法的Python实现

处理一个洋酒品牌的数据:

在这里插入图片描述

1.预处理:

import pandas as pd
from sklearn.cluster import KMeans
from sklearn import metrics
import matplotlib.pyplot as plt

#读取文件
beer = pd.read_table('数据/data.txt', sep=' ')
#传入变量(列名)
X = beer[['calories','sodium','alcohol','cost']]

2.分成不同的簇,自动计算轮廓系数得分:

scores = []
for k in range(2,10):
    lables = KMeans(n_clusters=k).fit(X).labels_#从左到右依次计算
    score = metrics.silhouette_score(X, lables)#轮廓系数
    scores.append(score)
print(scores)

3.绘制得分结果:

plt.plot(list(range(2,10)),scores)
plt.xlabel('Number of Clusters Initialized')
plt.ylabel('Sihouette Score')
plt.show()

4.聚类:

km = KMeans(n_clusters=2).fit(X) #K值为2【分为2类】
beer['cluster'] = km.labels_

5.对聚类结果评分:

score = metrics.silhouette_score(X,beer.cluster)#X:数据集,scaled_cluster:聚类结果
print(score)#score:非标准化聚类结果的轮廓系数```

输出结果:

在这里插入图片描述

四、K-Means算法的优缺点

1 优点

  • 简单高效:算法原理简单,易于实现,计算效率高。
  • 可扩展性强:适用于大规模数据集。
  • 广泛应用:可用于图像处理、市场细分、文档分类等多个领域。

2 缺点

  • 需要预设K值:K值的选择对结果影响较大,且通常需要人工指定。
  • 对初始值敏感:初始簇中心的选择可能导致不同的聚类结果。
  • 对噪声和异常值敏感:噪声数据可能影响簇中心的计算。
  • 仅适用于凸数据集:对于非凸形状的数据集,K-Means效果较差。

总结

K-Means算法作为一种经典的聚类算法,因其简单、高效的特点,在实际应用中得到了广泛的使用。然而,它也存在一些局限性,例如对初始值敏感、需要预设K值等。在实际使用中,可以结合其他方法(如K-Means++初始化、肘部法选择K值等)来优化算法的性能。

数据文件发评论区了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值