Python 教程

浏览4600
更新时间2025-08-06

K-means

K-means 是一种用于聚类数据点的无监督学习方法。该算法通过最小化每个聚类中的方差,迭代地将数据点划分为 K 个聚类。

在这里,我们将向您展示如何使用肘部方法估计 K 的最佳值,然后使用 K-means 聚类将数据点分组为聚类。

它是如何工作的?

首先,每个数据点被随机分配给一个 K 聚类。然后,我们计算每个聚类的质心(功能上的中心),并将每个数据点重新分配给具有最近质心的聚类。我们重复此过程,直到每个数据点的聚类分配不再更改。

K-means 聚类需要我们选择 K,即我们希望将数据分组的聚类数量。肘部方法允许我们绘制惯性(基于距离的度量)图,并可视化它开始线性减少的点。这个点被称为“肘部”,是基于我们的数据估计 K 的最佳值的一个好方法。

实例

首先,可视化一些数据点:

import matplotlib.pyplot as plt

x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]

plt.scatter(x, y)
plt.show()
运行实例 »

点击 "运行实例" 按钮查看在线实例

结果:

现在我们利用肘部方法来可视化不同 K 值的惯性:

实例

from sklearn.cluster import KMeans

data = list(zip(x, y))
inertias = []

for i in range(1,11):
    kmeans = KMeans(n_clusters=i)
    kmeans.fit(data)
    inertias.append(kmeans.inertia_)

plt.plot(range(1,11), inertias, marker='o')
plt.title('Elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()
运行实例 »

点击 "运行实例" 按钮查看在线实例

结果:

肘部方法显示 2 是 K 的一个好值,因此我们重新训练并可视化结果:

实例

kmeans = KMeans(n_clusters=2)
kmeans.fit(data)

plt.scatter(x, y, c=kmeans.labels_)
plt.show()
运行实例 »

点击 "运行实例" 按钮查看在线实例

结果:

例子解释

导入您需要的模块。

import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

你可以在我们的 Matplotlib 教程 中学习 Matplotlib 模块。

scikit-learn 是一个流行的机器学习库。

创建类似于数据集中两个变量的数组。请注意,尽管我们在这里只使用两个变量,但这种方法适用于任何数量的变量:

x = [4, 5, 10, 4, 3, 11, 14 , 6, 10, 12]
y = [21, 19, 24, 17, 16, 25, 24, 22, 21, 21]

将数据转换为一系列点:

data = list(zip(x, y))
print(data)

结果:

[(4, 21), (5, 19), (10, 24), (4, 17), (3, 16), (11, 25), (14, 24), (6, 22), (10, 21), (12, 21)]

为了找到 K 的最佳值,我们需要在可能值的范围内对数据运行 K-means。我们只有 10 个数据点,因此聚类的最大数量是 10。因此,对于每个范围 (1,11) 中的值 K,我们训练一个 K-means 模型,并在该数量的聚类下绘制惯性:

inertias = []

for i in range(1,11):
    kmeans = KMeans(n_clusters=i)
    kmeans.fit(data)
    inertias.append(kmeans.inertia_)

plt.plot(range(1,11), inertias, marker='o')
plt.title('Elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('Inertia')
plt.show()

结果:

我们可以看到,上述图表中的“肘部”(惯性开始变得更为线性的点)在 K=2。然后我们可以再次拟合我们的 K-means 算法,并绘制分配给数据的不同聚类:

kmeans = KMeans(n_clusters=2)
kmeans.fit(data)

plt.scatter(x, y, c=kmeans.labels_)
plt.show()

结果:

相关视频

更多

免费

php8,我来也
初级php8,我来也

33.5万次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

39.2万次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

30.3万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

64.4万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

40.9万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

76万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

63.7万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.1万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

35.8万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

131.8万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载