聚类方法介绍

目录

一、什么是聚类

二、聚类算法

1.1 k-means聚类

1.2 算法

三、聚类模块

四、聚类数据生成器


一、什么是聚类

聚类类似于分类,不同的是聚类所要求划分的类是未知的,也就是说不知道应该属于哪类,而是通过一定的算法自动分类。在实际应用中,聚类是一个将在某些方面相似的数据进行分类组织的过程(简单地说就是将相似数据聚在一起),其示意图如下两图所示。

聚类主要应用领域如下。
商业:聚类分析被用来发现不同的客户群,并且通过购买模式刻画不同客户群的特征。
生物:聚类分析被用来对动植物分类和对基因进行分类,获取对种群固有结构的认识。
保险行业:聚类分析通过一个高的平均消费来鉴定汽车保险单持有者的分组,同时根据住宅类型、价值和地理位置来判断一个城市的房产分组。

互联网:聚类分析被用来在网上进行文档归类。
电子商务:聚类分析在电子商务网站数据挖掘中也是很重要的一个方面,通过分组聚类出具有相似浏览行为的客户,并分析客户的共同特征,可以更好地帮助电商了解自己的客户,向客户提供更合适的服务。

二、聚类算法

k-means算法是一种聚类算法,它是一种无监督学习算法,目的是将相似的对象归到同一个簇中。簇内的对象越相似,聚类的效果就越好。
传统的聚类算法包括划分方法、层次方法、基于密度方法、基于网格方法和基于模型方法。本文主要介绍 k-means聚类算法,它是划分方法中较典型的一种,也可以称为k均值聚类算法。下面介绍什么是k均值聚类以及相关算法。

1.1 k-means聚类

k-means聚类也称为k均值聚类,是著名的划分聚类的算法,由于简洁和高效使得它成为所有聚类算法中应用最为广泛的一种。k均值聚类是给定一个数据点集合和需要的聚类数目k,k由用户指定,k均值算法根据某个距离函数反复把数据分入k个聚类中。

1.2 算法

随机选取k个点作为初始质心(质心即簇中所有点的中心),然后将数据集中的每个点分配到一个簇中,具体来讲,为每个点找距其最近的质心,并将其分配给该质心所对应的簇。这一步完成之后,将每个簇的质心更新为该簇所有点的平均值。这个过程将不断重复直到满足某个终止条件。终止条件可以是以下任何一个。
* 没有(或最小数目)对象被重新分配给不同的聚类。
* 没有(或最小数目)聚类中心再发生变化。
* 误差平方和局部最小。

伪代码:

创建k个点作为起始质心,可以随机选择(位于数据边界内)
当任意一个点的簇分配结果发生改变时(初始化为True)
        对数据集中每个数据点,重新分配质心
            对每个质心
                计算质心与数据点之间的距离
            将数据点分配到距其最近的簇
        对每一个簇,计算簇中所有点的均值并将均值作为新的质心

通过以上介绍相信对k-means聚类算法已经有了初步的认识,而在Python中应用该算法无须手动编写代码,因为Python 第三方模块Scikit-Learn 已经帮我们写好了,在性能和稳定性上比自己写的好得多,只需在程序中调用即可,没必要自己造轮子。

三、聚类模块

Scikit-Learn的cluster模块用于聚类分析,该模块提供了很多聚类算法,下面主要介绍KMeans方法,该方法通过k-means聚类算法实现聚类分析。

首先导入sklearn.cluster模块的KMeans方法,程序代码如下:

from sklearn.cluster import KMeans

 接下来,在程序中就可以使用KMeans()方法了。KMeans()方法的语法如下:

KMeans(n_clusters=8, init='k-means++',n_init=10, 
max_iter=300, tol=1e-4, precompute_distances='auto',verbose=0,
random_state=None.copy_x=True,n_jobs=None,algorithm='auto')

参数说明:
n_clusters:整型,默认值为8,是生成的聚类数,即产生的质心(centroid)数。
init:参数值为k-means++、random或者传递一个数组向量。默认值为k-means++。
> k-means++:用一种特殊的方法选定初始质心从而加速迭代过程的收敛。
> random:随机从训练数据中选取初始质心。如果传递数组类型,则应该是shape(n_clusters, n_features)的形式,并给出初始质心。
n_init:整型,默认值为10,用不同的质心初始化值运行算法的次数。
max_iter:整型,默认值为300,每执行一次k-means算法的最大迭代次数。
tol:浮点型,默认值1e-4(科学技术法,即1乘以10的-4次方),控制求解的精度。 
precompute_distances:参数值为auto、True或者False。用于预先计算距离,计算速度更快但占用更多内存。
> auto:如果样本数乘以聚类数大于12e6(科学技术法,即12乘以10的6次方),则不预先计算距离。
> True:总是预先计算距离。
> False:永远不预先计算距离。

verbose:整型,默认值为0,冗长的模式。
random_state:整型或随机数组类型。用于初始化质心的生成器(generator)。如果值为一个整数,则确定一个种子(seed)。默认值为NumPy的随机数生成器。
copy x:布尔型,默认值为True。如果值为True,则原始数据不会被改变;如果值为False 则会直接在原始数据上做修改,并在函数返回值时将其还原。但是在计算过程中由于有对数据均值的加减运算,所以数据返回后,原始数据同计算前数据可能会有细小差别。
n_jobs:整型,指定计算所用的进程数。如果值为-1,则用所有的CPU进行运算;如果值为
1,则不进行并行运算,这样方便调试;如果值小于-1,则用到的CPU数为(n_cpus+1+n_jobs),例如n_jobs值为-2,则用到的CPU数为总CPU数减1。
algorithm:表示 k-means算法法则,参数值为auto、full或elkan,默认值为auto。

主要属性:
cluster_centers_:返回数组,表示分类簇的均值向量。
labels_:返回数组,表示每个样本数据所属的类别标记。
inertia_:返回数组,表示每个样本数据距离它们各自最近簇的中心之和。

主要方法:
fit(X[,y]):计算k-means聚类。
fit_predictt(X[,y]):计算簇质心并给每个样本数据预测类别。
predict(X):给每个样本估计最接近的簇。
score(X[,y]):计算聚类误差。

对一组数据聚类 [示例]
程序代码如下:

import numpy as np
from sklearn.cluster import KMeans

X = np.array([[1, 10], [1, 11], [1, 12], [3, 20], [3, 23], [3, 21], [3, 25]])

kmodel = KMeans(n_clusters=2)  # 调用 KMeans() 方法实现聚类(两类)
y_pred = kmodel.fit_predict(X)  # 预测类别

print('预测类别:', y_pred)
print('聚类中心坐标值:', kmodel.cluster_centers_)
print('类别标记:', kmodel.labels_)

输出结果:

四、聚类数据生成器

前面列举了一个简单的聚类示例,但是聚类效果并不明显。本文生成了专门的聚类算法的测试数据,可以更好地诠释聚类算法,展示聚类效果。
Scikit-Leam的make_blobs()方法用于生成聚类算法的测试数据,直观地说,make_blobs()方法可以根据用户指定的特征数量、中心点数量、范围等生成几类数据,这些数据可用于测试聚类算法的效果。

make_blobs()方法的语法如下:

sklearn.datasets.make_blobs(n_samples=100,
n_features=2,centers=3,cluster_std=1.0, 
center_box=(-10.0, 10.0),shuffle=True,random_state=None)

常用参数说明:
n_samples:待生成的样本的总数。
n_features:每个样本的特征数。
centers:类别数。
cluster_std:每个类别的方差,例如,生成两类数据,其中一类比另一类具有更大的方差,可以将cluster_std设置为[1.0,3.0]。

生成用于聚类的测试数据(500个样本,每个样本有两个特征) [示例]
程序代码如下:

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

x, y = make_blobs(n_samples=500, n_features=2, centers=3)

接下来,通过KMeans()方法对测试数据进行聚类,程序代码如下:

from sklearn.cluster import KMeans

y_pred = KMeans(n_clusters=4, random_state=9).fit_predict(x)
plt.scatter(x[:, 0], x[:, 1], c=y_pred)
plt.show()

运行结果如下:

 从分析结果得知:相似的数据聚在一起,分成了4堆,也就是4类,并以不同的颜色显示,看上去清晰直观。

最后,通过本文的介绍,能够了解机器学习Scikit-Learn模块,该模块包含大量的算法模型,本文仅介绍了几个常用模型并结合快速示例,力求能够轻松上手,快速理解相关模型的用法,并为后期学习数据分析与预测项目打下良好的基础。

本文就暂时讲到这里了,接下来的内容会在后续的文章中给大家继续分享。

链接:聚类方法介绍-CSDN博客

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值