python实现k-means聚类算法

yizhihongxing

当然,我非常乐意给大家分享一篇关于Python实现K-Means聚类算法的完整攻略。让我们开始吧!

什么是K-Means聚类算法?

K-Means聚类算法是一种无监督学习算法,它根据不同数据点之间的相似性将其归为不同的簇。聚类的目的是将数据点分为具有相似特征的组,从而打破数据的孤岛。

K-Means算法是一个迭代过程,通过在数据集中找到重心,将数据点分配到最近的重心中,并基于分配更新重心,直到簇不再变化为止。根据初始聚类质心的位置,结果可能不同。

实现K-Means聚类算法

下面我们将分步骤讲解如何用Python实现K-Means聚类算法。

步骤1. 导入必要的库

首先,我们需要先导入需要使用的库:numpy、pandas和matplotlib。需要用到numpy中的数组和算法、pandas中的数据提取以及matplotlib提供了绘图工具。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

步骤2. 加载和处理数据

在本示例中,我们将使用一个包含1000个随机分布的二维点的数据集。

X = np.random.rand(1000, 2)

步骤3. 设置聚类数量k

在k-means聚类算法中,聚类板块的数量是必须设置的。在本示例中,我们将选择聚类数量为3。

k = 3

步骤4. 随机生成k个质心

在算法的开始,需要随机生成与聚类数量相等的质心点。这些质心点将用于计算每个数据点与其最近的质心点之间的距离。随机生成较好的质心坐标限制为数据的最小值和最大值之间。

centers = np.random.uniform(low=X.min(), high=X.max(), size=(k, X.shape[1]))

步骤5. 计算每个数据点与质心之间的距离

在k-means算法中,需要计算每个数据点与质心之间的距离。这个距离将用于将数据点分配到其最近的质心。

使用欧氏距离公式计算每个数据点和每个质心之间的距离。

# 计算每个数据点和每个质心之间的距离
distances = np.sqrt(((X - centers[:, np.newaxis])**2).sum(axis=2))

步骤6. 分配每个数据点到距离最近的质心

在k-means算法中,需要分配每个数据点到其最近的质心。我们可以使用np.argmin函数找到每行中的最小值以及该最小值的索引,从而分配每个数据点到最近的质心。

# 分配每个数据点到距离最近的质心
labels = np.argmin(distances, axis=0)

步骤7. 更新质心的位置

在k-means算法中,需要更新质心的位置。新的质心位置是每个簇内所有数据点的均值。

# 计算每个簇的均值并更新质点
for i in range(k):
    centers[i, :] = np.mean(X[labels == i, :], axis=0)

步骤8. 重复以上步骤,直到簇不再变化为止

k-means算法是一个迭代过程,需要重复以上步骤直到簇不再变化为止。

while True:
    # 计算每个数据点和每个质心之间的距离
    distances = np.sqrt(((X - centers[:, np.newaxis])**2).sum(axis=2))

    # 分配每个数据点到距离最近的质心
    new_labels = np.argmin(distances, axis=0)

    # 如果新标签等于旧标签,则停止
    if np.all(new_labels == labels):
        break

    # 更新标签
    labels = new_labels

    # 计算每个簇的均值并更新质点
    for i in range(k):
        centers[i, :] = np.mean(X[labels == i, :], axis=0)

步骤9. 数据可视化

最后,我们用数据可视化的方式检查聚类结果。

# 绘制数据集
plt.scatter(X[:, 0], X[:, 1], s=10)

# 绘制聚类的簇心
for i in range(k):
    plt.scatter(centers[i, 0], centers[i, 1], marker='x', s=100, linewidths=2)

plt.show()

至此,我们已经成功地用Python实现了K-Means聚类算法!

示例1

我们使用Iris数据集演示了如何在Python中使用K-Means算法进行聚类。

from sklearn.cluster import KMeans
from sklearn.datasets import load_iris

iris = load_iris()

k = 3
kmeans = KMeans(n_clusters=k)
kmeans.fit(iris.data)

# 绘制数据集
plt.scatter(iris.data[:, 0], iris.data[:, 1], c=kmeans.labels_)

# 绘制聚类的簇心
centers = kmeans.cluster_centers_
for i in range(k):
    plt.scatter(centers[i, 0], centers[i, 1], marker='x', s=100, linewidths=2)

plt.show()

示例2

下面的示例展示如何使用K-Means算法在黑白图片上提取主要颜色。

import urllib.request
import cv2

url = 'https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Emperor_Penguin_Manchot_empereur.jpg/220px-Emperor_Penguin_Manchot_empereur.jpg'
urllib.request.urlretrieve(url, 'penguin.jpg')

img = cv2.imread('penguin.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = cv2.resize(img, (500, 500))

# Reshape the image to 2D array of pixels
X = img.reshape((-1, 3))

k = 5
kmeans = KMeans(n_clusters=k)
kmeans.fit(X)

# Plot the compressed image
compressed_img = kmeans.cluster_centers_[kmeans.labels_]
compressed_img = compressed_img.reshape(img.shape)

plt.imshow(compressed_img)
plt.show()

在这个示例中,我们加载了一张黑白企鹅图片,调整图片的大小并将其转换为2D的像素数组。然后,我们使用K-Means算法从图像中提取出主要颜色。最后,我们将压缩后的图像可视化,以便查看提取出的主要颜色。

以上就是“Python实现K-Means聚类算法”的完整攻略,希望对大家有所帮助!

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

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

相关文章

  • 超实用的 30 段 Python 案例

    下面是“超实用的 30 段 Python 案例”的完整攻略。 一、前言 这篇文章主要介绍了 30 个 Python 实用案例,旨在提高大家对 Python 的使用,巩固 Python 基础,让大家能够更好的使用 Python 解决问题。 二、案例示例 示例 1:迭代器与生成器 这一部分主要是介绍了 Python 中的生成器和迭代器的使用方式,以及它们的区别和…

    python 2023年5月13日
    00
  • 详解Python PIL以日期时间为名称保存文件

    Python PIL是Python的图像处理库。在处理图像时,经常需要将处理后的图像保存到磁盘上。保存图像时,通常需要为图像命名,根据需求选择合适的文件名能够更好地组织文件,便于管理。下面将详细讲解如何使用Python PIL以日期时间为名称保存文件。 步骤一:安装Python PIL 在Python中使用PIL需要先安装PIL模块。可以使用pip命令进行安…

    python-answer 2023年3月25日
    00
  • 几种实用的pythonic语法实例代码

    下面是几种实用的Pythonic语法示例以及其详细说明: 1. 使用列表推导式 列表推导式是Pythonic语法中常用的一种,可以极大地简化代码,并且使代码更加易读。它的基本形式是这样的: [expression for item in iterable if condition] 其中,expression表示对每个item执行的操作,iterable表示…

    python 2023年5月30日
    00
  • python面试题小结附答案实例代码

    标题 首先应该用一个一级标题(#)来表示文章的主题,例如:“Python面试题小结附答案实例代码分析” 文章简介 其次,可以在一级标题下方写一个文章简介,用一个二级标题(##)来表示,例如: 简介 本文主要对Python面试题做一小结,并给出相应答案和实例代码,帮助大家学习和掌握该领域的知识。 目录 考虑到本文内容较多,应该加一个目录来使读者更方便地找到需要…

    python 2023年5月19日
    00
  • python小程序实现刷票功能详解

    Python小程序实现刷票功能详解 如果你正在寻找一些刷票的Python小程序代码,那么你来到了正确的地方。这篇文章将为你提供一系列的示例和说明,让你了解如何通过Python编写一个简单的刷票程序。 步骤1:选择一个要刷的网站 首先,你需要确定一个要进行刷票的网站。在选择网站时,需要注意选择正规的、合法的,不会侵犯他人利益的网站。否则,你会处于违法和不道德的…

    python 2023年5月23日
    00
  • python读取浮点数和读取文本文件示例

    Python是一种强大的编程语言,具有众多的功能和库。在其中读取浮点数和读取文本文件是常见的操作之一。 读取浮点数 读取单个浮点数 使用Python内置的input()函数可以读取用户输入的字符串,但是默认情况下读取到的都是字符串类型。如果需要读取浮点数,需要进行类型转换。 例如,下面的代码演示了如何通过input()读取一个浮点数并进行计算: num = …

    python 2023年6月5日
    00
  • Python之读取TXT文件的方法小结

    “Python之读取TXT文件的方法小结”是一篇介绍如何在Python中读取TXT文件的文章,下面我们会详细讲解这篇文章的内容。 需要掌握的知识点 在开始介绍如何读取TXT文件之前,我们需要掌握一些基本的知识点。 文件路径 在Python中,我们需要指定要读取的文件的路径。常见的文件路径有两种: 绝对路径:从电脑根目录开始的完整路径。 相对路径:从当前文件所…

    python 2023年6月5日
    00
  • Python json.loads ValueError,需要分隔符

    【问题标题】:Python json.loads ValueError, expecting delimiterPython json.loads ValueError,需要分隔符 【发布时间】:2023-04-06 00:50:01 【问题描述】: 我将一个 postgres 表提取为 json。输出文件包含如下行: {“data”: {“test”: 1…

    Python开发 2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部