Python sklearn中的K-Means聚类使用方法浅析

 更新时间:2022年12月20日 16:19:58   作者:微小冷  
这篇文章主要介绍了Python sklearn中的K-Means聚类使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

初步认识

k-means翻译过来就是K均值聚类算法,其目的是将样本分割为k个簇,而这个k则是KMeans中最重要的参数:n_clusters,默认为8。

下面做一个最简单的聚类

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import make_blobs
X, y = make_blobs(1500)
fig = plt.figure()
for i in range(2):
    ax = fig.add_subplot(1,2,i+1)
    y = KMeans(i+2).fit_predict(X)
    plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()

其中,y是聚类结果,其数值表示对应位置X所属类号。

效果如图所示,对于下面这组数据来说,显然最好是分为两类,但如果KMeansn_clusters设为3,那就会聚成3类。

上面调用的KMeans是一个类,sklearn中同样提供了函数形式的调用,其使用方法如下

from sklearn.cluster import k_means
cen, y, interia = k_means(X, 3)

其中,cen表示聚类后,每一类的质心;y为聚类后的标签;interia表示均方误差之和。

初值选取

KMeans最重要的概念是簇,也就是被分割后的数据种类;而每个簇都有一个非常重要的点,就是质心。在设定好簇的个数之后,也就相当于确定了质心的个数,而KMeans算法的基本流程是

  • 选择k个点作为k个簇的初始质心
  • 计算样本到这k个质心(簇)的距离,并将其划入距离最近的簇中
  • 计算每个簇的均值,并使用该均值更新簇的质心

重复上述2-3的操作,直到质心区域稳定或者达到最大迭代次数。

从这个流程可以看出来,KMeans算法至少有两个细节需要考虑,一个是初始化方案,另一个则是质心更新的方案。

KMeans类或者k_means函数中,提供了两种初始化质心方案,通过参数init来控制

  • 'random':表示随机生成k个质心
  • 'k-means++':此为默认值,通过kMeans++方法来初始化质心。

kMeans++初始化质心的流程如下

  • 随机选择1个点作为初始质心 x 0
  • ​计算其他点到最近质心的距离
  • 假定现有 n n n个质心了,那么选择距离当前质心较远的点作为下一个质心 x n x_n xn​

重复步骤2和3,直到质心个数达到 k k k个。

若希望直接调用kMeans++函数,则可使用kmeans_plusplus

小批

sklearn提供了KMeans的一个变种MiniBatchKMeans,可在每次训练迭代中随机抽样,这种小批量的训练过程大大减少了运算时间。

当样本量非常巨大时,小批KMeans的优势是非常明显的

from sklearn.cluster import MiniBatchKMeans
import time
ys, xs = np.indices([4,4])*6
cens = list(zip(xs.reshape(-1), ys.reshape(-1)))
X, y = make_blobs(100000,centers=cens)
km = KMeans(16)
mbk = MiniBatchKMeans(16)
def test(func, value):
    t = time.time()
    func(value)
    print("耗时", time.time()-t)
test(km.fit_predict, X)
# 耗时 3.2028110027313232
test(mbk.fit_predict, X)
# 耗时 0.2590029239654541

可见效果非常明显,其中fit_predictpredict相似,但并没有返回值,km.fit_predict(X)运行之后,会更改km中的labels_属性,此即分类结果

fig = plt.figure()
ax = fig.add_subplot(1,2,1)
ax.scatter(X[:,0], X[:,1], c=km.labels_, 
    marker='.', alpha=0.5)
ax = fig.add_subplot(1,2,2)
ax.scatter(X[:,0], X[:,1], c=mbk.labels_, 
    marker='.', alpha=0.5)
plt.show()

效果如图所示,可见小批的KMeans算法和KMeans算法从结果上来看区别不大。

到此这篇关于Python sklearn中的K-Means聚类使用方法浅析的文章就介绍到这了,更多相关Python K-Means聚类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现把xml或xsl转换为html格式

    Python实现把xml或xsl转换为html格式

    这篇文章主要介绍了Python实现把xml或xsl转换为html格式,本文直接给出实现代码,需要的朋友可以参考下
    2015-04-04
  • Python3网络爬虫中的requests高级用法详解

    Python3网络爬虫中的requests高级用法详解

    本节我们再来了解下 Requests 的一些高级用法,如文件上传,代理设置,Cookies 设置等等。感兴趣的朋友跟随小编一起看看吧
    2019-06-06
  • python pandas库读取excel/csv中指定行或列数据

    python pandas库读取excel/csv中指定行或列数据

    通过阅读表格,可以发现Pandas中提供了非常丰富的数据读写方法,下面这篇文章主要给大家介绍了关于python利用pandas库读取excel/csv中指定行或列数据的相关资料,需要的朋友可以参考下
    2022-02-02
  • Python中zfill()方法的使用教程

    Python中zfill()方法的使用教程

    这篇文章主要介绍了Python中zfill()方法的使用教程,是Python入门中的基础知识,需要的朋友可以参考下
    2015-05-05
  • golang/python实现归并排序实例代码

    golang/python实现归并排序实例代码

    这篇文章主要给大家介绍了关于golang/python实现归并排序的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Python函数属性和PyC详解

    Python函数属性和PyC详解

    这篇文章主要介绍了Python函数属性和PyC,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2021-10-10
  • python 使用pdfminer3k 读取PDF文档的例子

    python 使用pdfminer3k 读取PDF文档的例子

    今天小编就为大家分享一篇python 使用pdfminer3k 读取PDF文档的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • Python使用到第三方库PyMuPDF图片与pdf相互转换

    Python使用到第三方库PyMuPDF图片与pdf相互转换

    今天为大家介绍个比较简单的Python第三方库PyMuPDF进行图片和pdf之间的相互转换,以下就是利用PyMuPDF进行pdf与图片之间的互转
    2019-05-05
  • Python使用xlrd和xlwt实现自动化操作Excel

    Python使用xlrd和xlwt实现自动化操作Excel

    这篇文章主要介绍了Python使用xlrd和xlwt实现自动化操作Excel,xlwt只能对Excel进行写操作。xlwt和xlrd不光名字像,连很多函数和操作格式也是完全相
    2022-08-08
  • python游戏实战项目之俄罗斯方块的魅力

    python游戏实战项目之俄罗斯方块的魅力

    迟早一定会挂掉的俄罗斯方块,为什么至今仍是世界游戏之王?它是怎么编写的?本文将给大家详细的介绍,对大家的学习或工作具有一定的参考借鉴价值
    2021-09-09

最新评论