利用Python如何实现K-means聚类算法

yizhihongxing

K-means聚类算法是一种常用的无监督学习算法,它可以将数据集划分为多个簇,每个簇内的数据相似度较高,而不同簇之间的数据点相似较低。在本攻略中,我们将介绍如何使用Python实现K-means聚类算法。

步骤1:导入库

在Python实现K-means聚类算法之前,我们需要导入相关的库。在本攻略中,我们将NumPy库和Matplotlib库来处理数据和可视结果。

# 示例1:导入库
import numpy as np
import matplotlib.pyplot as plt

步骤2:生成数据集

在实现K-means聚类算法之前,我们需要一个数据集。本攻略中,我们将使用NumPy库中的random块来生成一个包含100个数据点的二维数据集。

# 示例2:生成数据集
np.random.seed(0)
X = np.random.randn(100, 2)

步骤3:初始化聚中心

在K-means聚类算法中,我们需要初始化聚类中心。在本攻略中,我们将随机选择两个数据点作聚类中心。

# 示例3:初始化聚类中心
k = 2
centers = X[np.random.choice(len(X), k, replace=False)]

步骤4:计算距离并分配簇

在K-means聚类法中,我们需要计算每个数据点与聚类中心的距离,并将其分配到最近的簇中。在本攻略中,我们将使用欧几里得距离来计算距离。

# 示例4:计算距离并分配簇
def assign(X, centers):
    distances = np.sqrt(((X - centers[:, np.newaxis])**2).sum(axis=2))
    return np.argmin(distances, axis=0)

clusters = assign(X, centers)

步骤5:更新聚类中心

在K-means聚类算法中,我们需要更新聚类中,使其成为个簇所有数据点的平均值。在本攻略中,我们将使用NumPy库中的mean()函数来计算平均值。

# 示例5:更新聚类中心
def update_centers(X, clusters):
    return np.array([X[clusters == k].mean(axis=0) for k in range(len(set(clusters)))])

centers = update_centers(X, clusters)

步骤6:迭代计算

在K-means聚类算法中,我们需要迭代计算,直到聚类中心不再变化止。在本攻略中,我们将使用一个while循环来实现代计算。

# 示例6:迭代计算
while True:
    old_clusters = clusters
    clusters = assign(X, centers)
    if np.array_equal(clusters, old_clusters):
        break
    centers = update_centers(X, clusters)

步骤7:可视化结果

在K-means聚类算法中,我们可以使用Matplotlib库来可视化聚类结果。在本攻略中,我们使用不同色的散点图来表示不同簇内的数据点。

# 示例7:可视化结果
plt.scatter(X[clusters == 0, 0], X[clusters == 0, 1], color='red')
plt.scatter(X[clusters == 1, 0], X[clusters == 1, 1], color='blue')
plt(centers[:, 0], centers[:, 1], color='black', marker='x', s=100)
plt.show()

完整代码

# 示例8:完整代码
import numpy as np
import matplotlib.pyplot as plt

# 生成数据集
np.random.seed(0)
X = np.random.randn(100, 2)

# 初始化聚类中心
k = 2
centers = X[np.random.choice(len(X), k, replace=False)]

# 计算距离并分配簇
def assign(X, centers):
    distances = np.sqrt(((X - centers[:, np.newaxis])**2).sum(axis=2))
    return np.argmin(distances, axis=0)

clusters = assign(X, centers)

# 更新聚类中心
def update_centers(X, clusters):
    return np.array([X[clusters == k].mean(axis=0) for k in range(len(set(clusters)))])

centers = update_centers(X, clusters)

# 迭代计算
while True:
    old_clusters = clusters
    clusters = assign(X, centers)
    if np.array_equal(clusters, old_clusters):
        break
    centers = update_centers(X, clusters)

# 可视化结果
plt.scatter(X[clusters == 0, 0], X[clusters == 0, 1], color='red')
plt.scatter(X[clusters == 1, 0], X[clusters == 1, 1], color='blue')
plt.scatter(centers[:, 0], centers[:, 1], color='black', marker='x', s=100)
plt.show()

示例说明

在示例代码,我们首先生成了一个包含100个数据点的二维数据集。接着,我们随选择了两个数据点作为聚类中心,并计算每个数据点与聚类中心的距离,并将其分配到最近的簇中。然后,我们更新聚类中心,使其成为每个簇内所有数据点的平均值。接着,我们使用一个while循环来迭代计算,直聚类中心不再变化为止。最后,我们使用Matplotlib库来可视化聚类结果,其中不同颜色的散点图表示不同簇内的数据点,黑色的叉号表示聚类中心。

在这个示例中,我们使用了NumPy库和Matplotlib库来处理数据和可视化结果。我们还了欧几里得距离来计算距离,并使用mean()函数来计算平均值。我们还使用了while循环来实现迭代计,直到聚类中心不再变化为止。

示例:使用sklearn库实现K-means聚类算法

除了手动实现K-means聚类算法,我们还可以使用sklearn库中KMeans类来实现K-means聚类算法。下面是一个使用sklearn库实现K-means聚类算法的示例代码。

# 示例9:使用sklearn库实现K-means聚类算法
from sklearn.cluster import KMeans

k = 2
model = KMeans(n_clusters=k)
model.fit(X)

plt.scatter(X[model.labels_ == 0, 0], X[model.labels_ == 0, 1], color='red')
plt.scatter(X[model.labels_ == 1, 0], X[model.labels_ == 1, 1], color='blue')
plt.scatter(model.cluster_centers_[:, 0], model.cluster_centers_[:, 1], color='black', marker='x', s=100)
plt.show()

在这个示例中,我们首先创建了一个KMeans对象,并使用fit()方法来训练型。然后,我们使用labels_属性来获取每个数据点所属的簇,并使用cluster_centers_属性来获取聚类中心。最后,我们使用Matplotlib库来可视化聚类结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用Python如何实现K-means聚类算法 - Python技术站

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

相关文章

  • 正则表达式常见的4种匹配模式小结

    正则表达式是一种用于匹配文本的强大工具,它可以用于搜索、替换和验证文本。在正则表达式中,我们可以使用不同的匹配模式来匹配不同的文本。本文将详细介绍正则表达式常见的4种匹配模式。 1. 普通字符匹配 普通字符匹配是最基本的匹配模式,它可以匹配任何单个字符。例如,正则表达式”hello”可以匹配字符串”hello”,但不能匹配”hell”或”heo”。 以下是一…

    python 2023年5月14日
    00
  • Python获取服务器信息的最简单实现方法

    首先,我们可以使用Python的socket模块获取服务器的IP地址和主机名。具体步骤如下: 引入socket模块 import socket 获取主机名和IP地址 hostname = socket.gethostname() ip_address = socket.gethostbyname(hostname) print("主机名:&quot…

    python 2023年6月3日
    00
  • python通过伪装头部数据抵抗反爬虫的实例

    针对反爬虫策略中的一种常见方式——检测头部数据,我们可以通过伪装头部数据来绕过检测,从而实现爬取目标网站的数据。Python中可以使用第三方库requests来实现伪装头部数据,在此给出一个具体的攻略过程: 导入requests库 import requests 设置headers头部信息 在headers中加入我们需要伪装的内容,比如User-Agent和…

    python 2023年6月3日
    00
  • Python实现EXCEL表格的排序功能示例

    下面是Python实现Excel表格的排序功能的完整实例教程,包括两条示例说明。 1. 安装依赖库 在Python中,我们需要用到pandas、xlrd、xlsxwriter这几个库来对Excel表格进行读写和排序。因此,首先需要确保电脑中安装了这几个库。如果尚未安装,则可以通过以下命令来安装: pip install pandas pip install …

    python 2023年5月13日
    00
  • 浅析Python数字类型和字符串类型的内置方法

    标题:浅析Python数字类型和字符串类型的内置方法 1. Python数字类型的内置方法 Python中数字类型包括:整数(int)、浮点数(float)、复数(complex)等。这些数字类型都有一些常用的内置方法。 1.1 整数类型(int) abs(x):返回一个数的绝对值; 示例: abs(-10) # 返回值为10 int(x):将x转换为一个整…

    python 2023年6月3日
    00
  • Python四大模块文件管理介绍

    Python四大模块文件管理介绍 在Python中,文件管理属于非常重要的部分,因为文件操作是我们日常编程中必不可少的部分。文件的读写、创建、删除等操作需要使用到Python的文件管理模块。Python四大模块文件管理介绍的四大模块分别是os、os.path、shutil和glob。下面将进行详细讲解。 1. os模块 os模块是文件管理模块中最灵活、最常用…

    python 2023年6月2日
    00
  • Python中的高级数据结构详解

    下面是详细讲解“Python中的高级数据结构详解”的完整攻略。 1. 什么是高级数据结构 高级数据结构指在基本数据结构的基础上,通过组合、继承、封装等方式形成的更加复杂、高级的数据结构。Python中有多种高级数据结构,例如堆、字典树、红黑树等。 2. Python中的高级数据结构 以下是Python中常用的几种高级数据结构。 2.1 堆 堆是一种特殊树形数…

    python 2023年5月14日
    00
  • Python简单计算文件MD5值的方法示例

    下面我来详细讲解“Python简单计算文件MD5值的方法示例”的完整攻略。 什么是MD5 在介绍如何计算文件的MD5值之前,我们先来了解一下MD5的概念。MD5是一种消息摘要算法,它将任意长度的消息(或文件)作为输入,输出固定长度的128位摘要。MD5算法广泛应用于计算机领域中对文件的完整性验证或者数字签名等用途。 计算文件的MD5值 下面就是利用Pytho…

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