搜索
首页后端开发Python教程Python中的k-means聚类模型详解

Python中的k-means聚类模型详解

Jun 10, 2023 am 09:15 AM
pythonk-means聚类模型

Python中的k-means聚类模型详解

聚类分析是一种用于发现数据中相似对象的方法。在数据挖掘、机器学习等领域,聚类分析被广泛应用。k-means聚类是其中一种较为常见的聚类方法。它能够将数据集中的样本划分成k个簇,且每个簇的内部差异最小,而簇间差异最大。本文将详细介绍Python中的k-means聚类模型。

  1. k-means聚类的原理

k-means聚类算法是一种迭代的聚类方法。其核心步骤包括:初始化质心、计算距离、更新质心、判定停止条件等。

首先,需要指定聚类数k。然后随机选择k个数据样本作为初始质心,对于剩下的每个样本,将其分配到与其距离最近的质心所在簇中。接下来,计算每个簇中所有数据点与该簇的质心的距离平方和,作为该簇的误差。然后更新每个簇的质心,将其移到该簇所有样本的中心。重复上述步骤直到误差小于某一阈值或达到迭代次数上限。

  1. Python实现k-means聚类

Python中,sklearn库提供了k-means聚类函数,是使用k-means聚类算法的最简单方法。下面以iris数据集为例,展示如何使用Python实现k-means聚类

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

iris = load_iris()
X = iris.data[:, :2]  # 为了便于可视化,只取前两个特征
y = iris.target

kmeans = KMeans(n_clusters=3)  # 聚成3类
kmeans.fit(X)

centroids = kmeans.cluster_centers_  # 质心
labels = kmeans.labels_  # 样本分类

# 绘制图形
import matplotlib.pyplot as plt

colors = ['red', 'green', 'blue']
for i in range(len(X)):
    plt.scatter(X[i][0], X[i][1], c=colors[labels[i]])
    
for c in centroids:
    plt.scatter(c[0], c[1], marker='x', s=300, linewidths=3, color='black')
    
plt.show()

执行以上代码,即可生成类似以下图像:

图像中,红色、绿色和蓝色点分别代表不同的簇,黑色“x”符号表示每个簇的质心。

  1. 如何选择最优的k值

如何确定最优的k值,是k-means聚类算法中比较困难的问题之一。下面介绍两个常见的方法:手肘法和轮廓系数法。

手肘法:首先,将k值设置为较小的整数,计算每个簇的误差平方和(SSE)。随着k值的增加,误差平方和会减少。当k值增加到一定程度后,SSE不再大幅下降。此时,将k值与SSE之间的关系绘制成曲线图,必定呈现出肘部线段,该线段在此处的“肘”的位置,对应的k值即为最优的聚类数。

代码示例:

sse = []
for i in range(1, 11):
    kmeans = KMeans(n_clusters=i).fit(X)
    sse.append(kmeans.inertia_)  # ineria_属性表示模型的误差平方和
 
plt.plot(range(1, 11), sse)
plt.xlabel('K')
plt.ylabel('SSE')
plt.show()

轮廓系数法:轮廓系数综合了簇内不相关性和簇间相似度两个因素。轮廓系数值越大,代表聚类效果越好。轮廓系数法的计算过程如下:

对每个样本,计算其与同簇所有样本的平均距离(称为a),并计算其与最近其他簇的所有样本的平均距离(称为b)。

计算每个样本的轮廓系数s,$s = rac {b-a} {max(a, b)}$。整个模型的轮廓系数为所有样本轮廓系数的平均值。

代码示例:

from sklearn.metrics import silhouette_score

sil_scores = []
for k in range(2, 11):
    kmeans = KMeans(n_clusters=k).fit(X)
    sil_score = silhouette_score(X, kmeans.labels_)  # 计算轮廓系数
    sil_scores.append(sil_score)
    
plt.plot(range(2, 11), sil_scores)
plt.xlabel('K')
plt.ylabel('Silhouette Coefficient')
plt.show()
  1. k-means聚类注意事项

k-means聚类有以下注意事项:

初值对结果产生影响较大,如果初始值不佳,可能会得到较差的结果。

聚类结果依赖于选择的距离度量,如欧几里得距离、曼哈顿距离等。应根据实际情况进行选择。

数据集中异常值容易被错误的簇吸引,应考虑去除异常值。

样本类分布不平衡时,常见问题是得到具有极度偏斜属性的簇。

  1. 总结

k-means聚类是一种广泛应用的聚类算法。Python中,使用sklearn库提供的KMeans函数可以快速实现,同时,还可以使用手肘法或轮廓系数法确定最优的聚类数。同时,在应用中需注意k值的选择、初始质心的设置等问题。

以上是Python中的k-means聚类模型详解的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
可以在Python数组中存储哪些数据类型?可以在Python数组中存储哪些数据类型?Apr 27, 2025 am 12:11 AM

pythonlistscanStoryDatatepe,ArrayModulearRaysStoreOneType,and numpyArraySareSareAraysareSareAraysareSareComputations.1)列出sareversArversAtileButlessMemory-Felide.2)arraymoduleareareMogeMogeNareSaremogeNormogeNoreSoustAta.3)

如果您尝试将错误的数据类型的值存储在Python数组中,该怎么办?如果您尝试将错误的数据类型的值存储在Python数组中,该怎么办?Apr 27, 2025 am 12:10 AM

WhenyouattempttostoreavalueofthewrongdatatypeinaPythonarray,you'llencounteraTypeError.Thisisduetothearraymodule'sstricttypeenforcement,whichrequiresallelementstobeofthesametypeasspecifiedbythetypecode.Forperformancereasons,arraysaremoreefficientthanl

Python标准库的哪一部分是:列表或数组?Python标准库的哪一部分是:列表或数组?Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

您应该检查脚本是否使用错误的Python版本执行?您应该检查脚本是否使用错误的Python版本执行?Apr 27, 2025 am 12:01 AM

ThescriptisrunningwiththewrongPythonversionduetoincorrectdefaultinterpretersettings.Tofixthis:1)CheckthedefaultPythonversionusingpython--versionorpython3--version.2)Usevirtualenvironmentsbycreatingonewithpython3.9-mvenvmyenv,activatingit,andverifying

在Python阵列上可以执行哪些常见操作?在Python阵列上可以执行哪些常见操作?Apr 26, 2025 am 12:22 AM

Pythonarrayssupportvariousoperations:1)Slicingextractssubsets,2)Appending/Extendingaddselements,3)Insertingplaceselementsatspecificpositions,4)Removingdeleteselements,5)Sorting/Reversingchangesorder,and6)Listcomprehensionscreatenewlistsbasedonexistin

在哪些类型的应用程序中,Numpy数组常用?在哪些类型的应用程序中,Numpy数组常用?Apr 26, 2025 am 12:13 AM

NumPyarraysareessentialforapplicationsrequiringefficientnumericalcomputationsanddatamanipulation.Theyarecrucialindatascience,machinelearning,physics,engineering,andfinanceduetotheirabilitytohandlelarge-scaledataefficiently.Forexample,infinancialanaly

您什么时候选择在Python中的列表上使用数组?您什么时候选择在Python中的列表上使用数组?Apr 26, 2025 am 12:12 AM

useanArray.ArarayoveralistinpythonwhendeAlingwithHomeSdata,performance-Caliticalcode,orinterFacingWithCcccode.1)同质性data:arrayssavememorywithtypedelements.2)绩效code-performance-clitionalcode-clitadialcode-critical-clitical-clitical-clitical-clitaine code:araysofferferbetterperperperformenterperformanceformanceformancefornalumericalicalialical.3)

所有列表操作是否由数组支持,反之亦然?为什么或为什么不呢?所有列表操作是否由数组支持,反之亦然?为什么或为什么不呢?Apr 26, 2025 am 12:05 AM

不,notalllistoperationsareSupportedByArrays,andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorinsertwithoutresizing,wheremactssperformance.2)listssdonotguaranteeconeeconeconstanttanttanttanttanttanttanttanttimecomplecomecomecomplecomecomecomecomecomecomplecomectaccesslikearrikearraysodo。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

安全考试浏览器

安全考试浏览器

Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!