Python sklearn中的K-Means聚类如何使用

发布时间:2022-12-28 15:10:35 作者:iii
来源:亿速云 阅读:167

Python sklearn中的K-Means聚类如何使用

K-Means聚类是一种常用的无监督学习算法,用于将数据集划分为K个簇。每个簇由相似的数据点组成,而不同簇之间的数据点差异较大。Python的scikit-learn库(简称sklearn)提供了简单易用的K-Means聚类实现。本文将详细介绍如何在Python中使用sklearn进行K-Means聚类,并探讨其应用场景、参数设置以及结果分析。

1. K-Means聚类简介

K-Means聚类是一种基于距离的聚类算法,其目标是将数据集划分为K个簇,使得每个簇内的数据点尽可能相似,而不同簇之间的数据点尽可能不同。算法的基本步骤如下:

  1. 初始化:随机选择K个数据点作为初始的簇中心(质心)。
  2. 分配:将每个数据点分配到距离最近的簇中心所在的簇。
  3. 更新:重新计算每个簇的中心(质心)。
  4. 迭代:重复步骤2和步骤3,直到簇中心不再发生变化或达到最大迭代次数。

K-Means聚类算法的优点是简单、高效,适用于大规模数据集。然而,它也有一些局限性,例如对初始簇中心的选择敏感,且需要预先指定簇的数量K。

2. 安装scikit-learn

在使用sklearn进行K-Means聚类之前,首先需要确保已经安装了scikit-learn库。如果尚未安装,可以通过以下命令进行安装:

pip install scikit-learn

3. 使用sklearn进行K-Means聚类

3.1 导入必要的库

首先,我们需要导入一些必要的Python库,包括numpymatplotlibsklearn中的相关模块。

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

3.2 生成示例数据

为了演示K-Means聚类的使用,我们可以使用sklearn.datasets模块中的make_blobs函数生成一个简单的二维数据集。该函数可以生成具有指定簇数和簇中心的数据集。

# 生成示例数据
n_samples = 300
n_features = 2
n_clusters = 3
random_state = 42

X, y = make_blobs(n_samples=n_samples, n_features=n_features, centers=n_clusters, random_state=random_state)

# 可视化生成的数据
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', s=50)
plt.title("Generated Data")
plt.show()

3.3 创建K-Means模型

接下来,我们可以使用sklearn.cluster模块中的KMeans类来创建一个K-Means聚类模型。在创建模型时,我们需要指定簇的数量n_clusters,以及其他可选参数,如最大迭代次数max_iter和随机种子random_state

# 创建K-Means模型
kmeans = KMeans(n_clusters=n_clusters, max_iter=300, random_state=random_state)

3.4 拟合模型

创建模型后,我们可以使用fit方法将模型拟合到数据上。拟合过程中,K-Means算法会迭代地更新簇中心,直到收敛或达到最大迭代次数。

# 拟合模型
kmeans.fit(X)

3.5 获取聚类结果

拟合完成后,我们可以通过labels_属性获取每个数据点的簇标签,通过cluster_centers_属性获取每个簇的中心坐标。

# 获取聚类结果
labels = kmeans.labels_
centers = kmeans.cluster_centers_

# 可视化聚类结果
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis', s=50)
plt.scatter(centers[:, 0], centers[:, 1], c='red', marker='X', s=200, alpha=0.75)
plt.title("K-Means Clustering Result")
plt.show()

3.6 评估聚类效果

为了评估K-Means聚类的效果,我们可以使用inertia_属性来获取簇内误差平方和(SSE),即每个数据点到其所属簇中心的距离平方和。SSE越小,表示聚类效果越好。

# 评估聚类效果
inertia = kmeans.inertia_
print(f"Inertia (SSE): {inertia}")

此外,我们还可以使用silhouette_score来评估聚类的质量。轮廓系数(Silhouette Coefficient)是一种衡量聚类效果的指标,其值介于-1和1之间,值越大表示聚类效果越好。

from sklearn.metrics import silhouette_score

# 计算轮廓系数
silhouette_avg = silhouette_score(X, labels)
print(f"Silhouette Score: {silhouette_avg}")

4. K-Means聚类的参数调优

在实际应用中,选择合适的K值(簇数)对K-Means聚类的效果至关重要。以下是一些常用的方法来选择K值:

4.1 肘部法(Elbow Method)

肘部法是一种通过绘制SSE随K值变化的曲线来选择K值的方法。随着K值的增加,SSE会逐渐减小,但当K值增加到一定程度时,SSE的下降速度会明显减缓,形成一个“肘部”。这个肘部对应的K值通常是一个合理的选择。

# 使用肘部法选择K值
inertia_list = []
K_range = range(1, 10)

for k in K_range:
    kmeans = KMeans(n_clusters=k, random_state=random_state)
    kmeans.fit(X)
    inertia_list.append(kmeans.inertia_)

# 绘制肘部法曲线
plt.plot(K_range, inertia_list, marker='o')
plt.xlabel('Number of clusters (K)')
plt.ylabel('Inertia (SSE)')
plt.title('Elbow Method')
plt.show()

4.2 轮廓系数法

轮廓系数法通过计算不同K值下的轮廓系数来选择K值。选择使轮廓系数最大的K值通常可以得到较好的聚类效果。

# 使用轮廓系数法选择K值
silhouette_scores = []
K_range = range(2, 10)

for k in K_range:
    kmeans = KMeans(n_clusters=k, random_state=random_state)
    kmeans.fit(X)
    score = silhouette_score(X, kmeans.labels_)
    silhouette_scores.append(score)

# 绘制轮廓系数曲线
plt.plot(K_range, silhouette_scores, marker='o')
plt.xlabel('Number of clusters (K)')
plt.ylabel('Silhouette Score')
plt.title('Silhouette Score Method')
plt.show()

5. K-Means聚类的应用场景

K-Means聚类广泛应用于各种领域,包括但不限于:

6. 总结

本文详细介绍了如何在Python中使用sklearn进行K-Means聚类。我们从K-Means聚类的基本原理出发,逐步讲解了数据的生成、模型的创建与拟合、聚类结果的获取与评估,以及如何通过肘部法和轮廓系数法选择合适的K值。最后,我们还探讨了K-Means聚类在不同领域的应用场景。

通过本文的学习,读者应该能够掌握K-Means聚类的基本使用方法,并能够在实际项目中应用该算法进行数据分析和挖掘。希望本文对您有所帮助!

推荐阅读:
  1. python socket 聊天室实例代码详解
  2. 如何在python中使用dict()

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python k-means sklearn

上一篇:Android中的线程和线程池有什么作用

下一篇:SpringBoot怎么使用FTP操作文件

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》