【注】本文演示怎样用python编程实现k-means聚类。如果想直接使用聚类功能,请使用集搜客数据管家软件,已经集成了聚类功能。使用方法参看《文本聚类分析软件的安装和使用方法》 1,本Notebook背景介绍 之前我们已经发布过一篇有关K-means算法实验的Notebook:《Jupyter Notebook使用Python做K-Means聚类分析》,在那篇Notebook里,我们从K-Means的基础原理和实现方法开始讨论,实际上K-Means作为一个常用的算法,在众多机器学习程序库中都有现成的函数可以调用。今天这篇notebook主要演示怎样调用sklearn的K-Means函数。 我们先简单回顾一下上一篇notebook的内容,罗列如下: 1.什么是K-means聚类算法 2.K-means聚类算法应用场景 3.K-means聚类算法步骤 4.K-means不适合的数据集 5.准备测试数据 6.基于python原生代码做K-Means聚类分析实验 7.使用matplotlib进行可视化输出 看了上一篇Notebook后,有同学反馈给我说,他只想使用K-Means做一些社会科学计算,不想费脑筋搞明白K-Means是怎么实现的。 好吧,调用机器学习库中的函数是最合适的,只要按照要求准备好样本数据,调用一个函数就把问题解决了。那么,我们今天就另发布一个使用机器学习库sklearn的k-means聚类算法的Notebook。 1.1 sklearn库简介 转载知乎文章《sklearn库主要模块功能简介》的介绍如下: sklearn,全称scikit-learn,是python中的机器学习库,建立在numpy、scipy、matplotlib等数据科学包的基础之上,涵盖了机器学习中的样例数据、数据预处理、模型验证、特征选择、分类、回归、聚类、降维等几乎所有环节,功能十分强大,目前sklearn版本是0.23。与深度学习库存在pytorch、TensorFlow等多种框架可选不同,sklearn是python中传统机器学习的首选库,不存在其他竞争者。 1.2 基本原理 K-means是无监督学习的代表。主要目的是聚类,聚类的依据就是样本之间的距离。比如要分为K类。步骤是: 1. 随机选取K个点。 2. 计算每个点到K个质心的距离,分成K个簇。 3. 计算K个簇样本的平均值作新的质心 4. 循环2、3 5. 位置不变,距离完成 2, 第三方库 本notebook使用了sklearn库做k-means算法实验。 如果未安装,请先使用下面的命令安装sklearnm库,再运行实验本notebook: pip install -i https://pypi.tuna.tsinghua.edu.cn/simple sklearn #国内安装使用清华的源,速度快 3,本notebook所做的测试 基于测试数据和sklearn官网的例子,在Jupyter Notebook中使用Python做K-Means算法实验。 4,引入sklearn库 导入sklearn下的K-means模块。sklearn,全称scikit-learn,是python中的机器学习库,建立在numpy、scipy、matplotlib等数据科学包的基础之上,涵盖了机器学习中的样例数据、数据预处理、模型验证、特征选择、分类、回归、聚类、降维等几乎所有环节,功能十分强大,目前sklearn版本是0.23。 # coding:utf-8 from sklearn.cluster import KMeans 5,引入matplotlib库 matplotlib是一款命令式、较底层、可定制性强、图表资源丰富、简单易用、出版质量级别的python 2D绘图库。 matplotlib算是python绘图的元老级库,类似编程语言里的C语言。很多其它的python绘图库是基于matplotlib开发的,比如seaborn、ggplot、plotnine、holoviews、basemap等。 matplotlib可用于python脚本、python shell、jupyter notebook、web等。 最适合来运行matplotlib绘图的工具是jupyter notebook,本Notebook也是基于该工具做可视化实验:交互式操作,在浏览器上运行代码,能直接显示运行结果和图表, import matplotlib.pyplot as plt 6,生成模拟数据 参看官网网页Generated Datasets,sklearn提供了一些方法,可以生成测试用数据集,生成过程中可以控制多个参数,便于验证算法。参看《sklearn中的make_blobs()函数详解》。 下面我们生成一个测试用数据集,含有500个样本,每个样本2个特征。那么函数返回的结果数据有: X:是一个数组,存储生成的样本,格式是[n_samples, n_features],详见下面的测试用数据集的查看结果 y:是一个数组,里面是整数,表示每个样本所属的类别,格式是[n_samples] 下面我们生成一个含有2个特征的样本数据,两个特征便于在平面上显示出来,两个特征对应画图坐标轴x和y from sklearn.datasets import make_blobs import matplotlib.pyplot as plt X, y = make_blobs(n_samples=500, # 500个样本 n_features=2, # 每个样本2个特征 centers=4, # 4个中心 random_state=1 #控制随机性 ) 查看一下X和y两个数组的格式。 输入如下命令: X 输出结果如下: array([[-6.92324165e+00, -1.06695320e+01], [-8.63062033e+00, -7.13940564e+00], [-9.63048069e+00, -2.72044935e+00], ....... [-8.96014913e+00, -8.06349899e+00], [-7.66603898e+00, -7.59715459e+00], [-6.46534407e+00, -2.85544633e+00]]) 输入如下命令: y 输出结果如下: array([2, 2, 1, 0, 3, 0, 3, 3, 1, 3, 2, 2, 3, 0, 3, 2, 1, 2, 0, 3, 1, 1, 3, 0, 3, 3, 0, 0, 1, 3, 2, 0, 3, 2, 3, 2, 1, 1, 2, 1, 3, 1, 0, 3, 3, 2, 1, 3, 0, 0, 0, 1, 1, 3, 2, 1, 1, 1, 1, 3, 0, 0, 1, 3, 0, 3, ...... 1, 0, 0, 2, 1, 3, 0, 3, 3, 2, 2, 3, 2, 1, 1, 2, 1, 2, 1, 0, 2, 0, 1, 3, 0, 1, 3, 0, 2, 3, 0, 0, 1, 3, 1, 3, 2, 0, 2, 3, 0, 2, 2, 2, 1, 0, 3, 2, 3, 3, 1, 1, 2, 3, 3, 3, 3, 3, 3, 2, 3, 1, 2, 3, 0, 3, 0, 3, 1, 3, 0, 0, 0, 1, 3, 1, 2, 1, 0, 3, 2, 0, 2, 0, 2, 3, 0, 0, 2, 1, 3, 2, 1, 1, 1, 2, 3, 0, 1, 3, 2, 2, 2, 3]) 7,使用matplotlib画图 对于上面已生成的模拟数据,使用matplotlib.pyplot画出图像 color = ['red', 'pink','orange','gray'] fig, axi1=plt.subplots(1) for i in range(4): axi1.scatter(X[y==i, 0], X[y==i,1], marker='o', s=8, c=color[i] ) plt.show() 8,K-means聚类之一:k=3 使用sklearn的KMeans模块进行聚类分析,可以设置要聚几类。 此处k设置为3 from sklearn.cluster import KMeans n_clusters=3 cluster = KMeans(n_clusters=n_clusters,random_state=0).fit(X) 9,查看聚类后的质心 k=3的情况下,会有3个质心 centroid=cluster.cluster_centers_ centroid 输出结果如下: array([[-8.09286791, -3.50997357], [-1.54234022, 4.43517599], [-7.0877462 , -8.08923534]]) 10,使用matplotlib画图 使用matplotlib.pyplot画出聚类后的图像 y_pred = cluster.labels_#获取训练后对象的每个样本的标签 centtrod = cluster.cluster_centers_ color=['red','pink','orange','gray'] fig, axi1=plt.subplots(1) for i in range(n_clusters): axi1.scatter(X[y_pred==i, 0], X[y_pred==i, 1], marker='o', s=8, c=color[i]) axi1.scatter(centroid[:,0],centroid[:,1],marker='x',s=100,c='black') 11,K-means聚类之一:k=4 使用sklearn的KMeans模块进行聚类分析 此处k设置为4 n_clusters=4 cluster2 = KMeans(n_clusters=n_clusters,random_state=0).fit(X) 12,查看聚类后的质心 k=4的情况下,会有4个质心 centroid=cluster2.cluster_centers_ centroid 输出结果如下: array([[-10.00969056, -3.84944007], [ -1.54234022, 4.43517599], [ -6.08459039, -3.17305983], [ -7.09306648, -8.10994454]]) 13,使用matplotlib画图 使用matplotlib.pyplot画出聚类后的图像 y_pred = cluster2.labels_#获取训练后对象的每个样本的标签 centtrod = cluster2.cluster_centers_ color=['red','pink','orange','gray'] fig, axi1=plt.subplots(1) for i in range(n_clusters): axi1.scatter(X[y_pred==i, 0], X[y_pred==i, 1], marker='o', s=8, c=color[i]) axi1.scatter(centroid[:,0],centroid[:,1],marker='x',s=100,c='black') 14,总结 本文使用生成的样本数据集,如果是真实的样本数据,那么设法存成上述格式的X数组,然后交给Kmeans模型的fit()函数计算即可。我们将在后续的notebook讲解怎样利用Kmeans模型针对真实数据做计算。 15,下载本notebook 下载源代码请进入:使用机器学习库sklearn的K-Means算法进行聚类 |
15964002091: 这个能做吗
15964002091: 这个能做吗
gz51837844: 要对文本做k-means聚类,一般步骤是:1.分词 2.生成矩阵,比如TF-IDF矩阵 3.做k-means聚类 下周我们会做测试,看看能不能出一个包含上述3个步骤的连贯notebook ...
15964002091: 这个能对关键词聚类吗