Python如何通过手肘法实现k_means聚类详解

yizhihongxing

Python如何通过手肘法实现k_means聚类详解

什么是 k-Means 聚类

k-Means 是一种常见的聚类算法,它将 n 个数据点分成 k 个集群,使得每个点都属于其所属集群的平均值,又称为质心。一个样本点最终将会归属到距离其最近的质心所属的集群中。这也意味着,如果聚类效果不佳,任意两个聚类之间的距离会非常接近,欠拟合或过拟合。

手肘法

k-Means 聚类中的 k 值如何选取是一个非常重要的问题。可以使用统计机器学习中的手肘法来选择 k 值。

手肘法的基本思路是,对于不同的 k 值,计算各个数据点到其所属聚类中心的距离的平方和,然后选择“肘部”处对应的 k 值作为数据进行聚类的 k 值。

找到“肘部”的方法是,将每个 k 值下的误差值用图表表示。观察图表,对于 k 值,它的错误值在达到某个值之后,将不再显著降低,这个地方就是“肘部”。

代码示例

以下是 Python 代码示例,展示了如何使用 k-Means 聚类和手肘法来完成聚类。

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

# 生成聚类数据
X = np.array([
    [1, 2],
    [1, 4],
    [1, 0],
    [4, 2],
    [4, 4],
    [4, 0]
])

# 用 KMeans 聚类算法进行聚类
wcss = []
for i in range(1, 7):
    kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)

# 分析手肘法
plt.plot(range(1, 7), wcss)
plt.title('The elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()

上面代码示例中,我们生成了一个数据集,其中包含两个特征的六个数据点。我们然后使用 k-Means 聚类算法将其聚类为两个聚类。接着,我们使用手肘法绘制出 k 值区间[1,6]下的错误值变化图,并通过观察图形找到了一个折点,即分界点,这个分别点为 2。

下面的示例中,我采用一个真实的数据集完成 k-Means 聚类,还展示了如何使用手肘法决定 k 值。这个数据集是红酒数据集中的一份子,它包含 13 个特征和 178 个观测值。

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

# 加载数据
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data'
df = pd.read_csv(url, header=None)
X = df.iloc[:, 1:].values

# 使用手肘法选择 k 值
wcss = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)

# 可视化手肘法
plt.plot(range(1, 11), wcss)
plt.title('The elbow method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()

# 使用 k = 3 进行聚类
kmeans = KMeans(n_clusters=3, init='k-means++', max_iter=300, n_init=10, random_state=0)
y_kmeans = kmeans.fit_predict(X)

上述代码示例加载了红酒数据集。然后使用 KMeans 算法计算 k 值区间[1,10]下的误差平方和。根据可视化的手肘法曲线,结果显示最优 k 值。

最终,我们使用 k = 3 对数据集进行聚类。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python如何通过手肘法实现k_means聚类详解 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python实现从web抓取文档的方法

    下面是 Python 实现从 Web 抓取文档的方法的完整攻略: 安装请求库 请求库是 Python 抓取 Web 数据的重要工具,常见的有 requests、urllib 等。在本攻略中我们以 requests 为例,首先需要安装 requests。 安装 requests 的方法有很多,在命令行中可以使用 pip 工具安装: pip install re…

    python 2023年5月14日
    00
  • PyTorch中torch.tensor与torch.Tensor的区别详解

    PyTorch中torch.tensor与torch.Tensor的区别详解 在PyTorch中,有两种不同的Tensor类型,它们分别是torch.tensor与torch.Tensor。这两种Tensor类型总体而言非常相似,用法也十分相似,但在细节与某些用法上有些许差别。本文将对这两种Tensor进行详细的区别与说明,帮助大家更好的理解和使用它们。 1…

    python 2023年5月13日
    00
  • 解决os.path.isdir() 判断文件夹却返回false的问题

    问题描述:在使用 Python 中的 os.path.isdir() 函数,判断一个文件夹是否存在时,有时会遇到返回 false 的问题。例如,存在一个名为 my_folder 的文件夹,但代码执行 os.path.isdir(‘my_folder’) 却返回 false。 该问题的原因是在文件夹的名字中可能存在空格。在使用 os.path.isdir() …

    python 2023年6月2日
    00
  • 利用PyQT5日期控件制作一个小日历

    让我们来详细讲解一下如何利用PyQT5日期控件制作一个小日历。 1. 准备工作 在开始之前,需要确保你已经安装了PyQt5库。如果没有安装,可以通过以下命令在终端中安装: pip install pyqt5 2. 创建PyQt5应用程序 首先,在使用PyQt5创建小日历之前,需要创建一个PyQt5应用程序。可以使用以下代码片段来创建一个基本的PyQt5窗口应…

    python 2023年6月3日
    00
  • 一文让你彻底搞懂Python中__str__和__repr__

    一文让你彻底搞懂Python中__str__和__repr__ 在Python中,__str__和__repr__是两个常用的魔术方法,它们都可以用来返回对象的字符串表示,但是有些细微的区别。 __str__和__repr__的区别 总体来说,__repr__用于开发者调试、测试和错误记录,而__str__用于最终用户展示。 当你需要了解对象的内部细节时,可…

    python 2023年6月2日
    00
  • python素数筛选法浅析

    下面是详细讲解“Python素数筛选法浅析”的完整攻略。 1. 什么是素数筛选法? 素数筛选法是一种用于筛选素数的算法,其基本思想是从小到大枚举每个数,如果这个数是素数,则将其所有的倍数标记为合数,直到枚举完所有的数。 2. Python素数筛选法的实现 下面是Python实现素数筛选法的示例: def sieve_of_eratosthenes(n): &…

    python 2023年5月14日
    00
  • Python实用工具FuckIt.py介绍

    Python实用工具FuckIt.py介绍 简介 FuckIt.py 是一个Python实用工具,用于解决由于Python代码出错而导致的运行异常或崩溃。它试图解释Python代码,除去错误部分,并将修改后的代码(尽可能使其仍然与原代码保持相似)输出到控制台或文件中。因为解释在运行时进行,因此解释器无法检测到代码被修改的情况,但这个过程确实对于定位问题和调试…

    python 2023年5月19日
    00
  • 基于matplotlib中ion()和ioff()的使用详解

    关于“基于matplotlib中ion()和ioff()的使用详解”的完整攻略,我给您提供以下内容供参考。 什么是ion()和ioff() ion()和ioff()是matplotlib中两个类似于开关的函数,用于控制交互模式和非交互模式的切换。 当使用ion()函数时,Matplotlib就启动了交互模式,此时每次plot()后,画面都会自动更新。而使用i…

    python 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部