聚类 - sklearn中的使用方法

本文详细介绍了sklearn库中常用的聚类算法,包括K-means、小批量K-Means、Affinity Propagation、Mean Shift、层次聚类(不同连接类型)和DBSCAN。K-means通过最小化簇内平方和进行聚类,而小批量K-Means则通过小批量数据加速收敛。Affinity Propagation通过样本间消息传递寻找模范样本。Mean Shift寻找样本密度平滑的blobs。层次聚类通过不同链接标准建立聚类树。DBSCAN基于密度区分高密度和低密度区域,适合任意形状的簇。
摘要由CSDN通过智能技术生成


未标记的数据的 聚类(Clustering) 可以使用模块 sklearn.cluster 来实现。

每个聚类算法(clustering algorithm)都有两个变体: 一个是 类(class), 它实现了 fit 方法来学习训练数据的簇(cluster),还有一个 函数(function),当给定训练数据,返回与不同簇对应的整数标签数组(array)。对于类来说,训练数据上的标签可以在 labels_ 属性中找到。

需要注意的一点是,该模块中实现的算法可以采用不同种类的矩阵作为输入。所有算法的调用接口都接受 shape [n_samples, n_features] 的标准数据矩阵。 这些矩阵可以通过使用 sklearn.feature_extraction 模块中的类获得。对于 AffinityPropagation, SpectralClustering 和 DBSCAN 也可以输入 shape [n_samples, n_samples] 的相似矩阵。这些可以通过 sklearn.metrics.pairwise 模块中的函数获得。

1. 聚类方法概述

在这里插入图片描述

2. K-means

KMeans 算法通过把样本分离成 n 个具有相同方差的类的方式来聚集数据,最小化称为 惯量(inertia) 或 簇内平方和(within-cluster sum-of-squares)的标准(criterion)。该算法需要指定簇的数量。它可以很好地扩展到大量样本(large number of samples),并已经被广泛应用于许多不同领域的应用领域。

k-means 算法将一组 N 样本 X 划分成 K 不相交的簇 C, 每个都用该簇中的样本的均值μj 描述。 这个均值(means)通常被称为簇的 “质心(centroids)”; 注意,它们一般不是从 X 中挑选出的点,虽然它们是处在同一个空间。

K-means(K-均值)算法旨在选择一个质心, 能够最小化惯性或簇内平方和的标准:
在这里插入图片描述
惯性被认为是测量簇内聚程度的度量(measure)。 它有各种缺点:

  • 惯性假设簇是凸(convex)的和各项同性(isotropic),这并不是总是对的。它对 细长的簇或具有不规则形状的流行反应不佳。
  • 惯性不是一个归一化度量(normalized metric): 我们只知道当惯量的值较低是较好的,并且零是最优的。但是在非常高维的空间中,欧氏距离往往会膨胀(这就是所谓的 “维度诅咒/维度惩罚”(curse of dimensionality))。在 k-means 聚类算法之前运行诸如 PCA 之类的降维算法可以减轻这个问题并加快计算速度。
    在这里插入图片描述
    K-means 通常被称为劳埃德算法(Lloyd’s algorithm)。简而言之,该算法可分为三个步骤。第一步是选择初始质心,最基本的方法是从 X 数据集中选择 k 个样本。初始化完成后,K-means 由接下来两个步骤之间的循环组成。 第一步将每个样本分配到其最近的质心。第二步通过取分配给每个先前质心的所有样本的平均值来创建新的质心。计算旧的和新的质心之间的差异,并且算法重复这些最后的两个步骤,直到该值小于阈值。换句话说,算法重复这个步骤,直到质心不再显著移动。

那么如何使用K-means方法呢

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

K-均值聚类。
参数说明:

n_clusters:int,默认= 8
			形成的簇数以及生成的质心数。

init:{
   ‘k-means++, ‘random’} or ndarray of shape (n_clusters, n_features), 默认=’k-means++'k-means ++':以一种聪明的方式为k-mean聚类选择初始聚类中
				  心,以加快收敛速度​​。有关更多详细信息,请参见
				  k_init中的注释部分。

   	'random':从初始质心的数据中随机选择k个观测值(行)。

	如果传递ndarray,则其形状应为(n_clusters,n_features),
	并给出初始中心。

n_init:int,默认值为10
		k均值算法将在不同质心种子下运行的次数。就惯性而言,最终	
		结果将是n_init个连续运行的最佳输出。

max_iter:int,默认为300
		  单次运行的k均值算法的最大迭代次数。

tol:float,默认= 1e-4
	 关于惯性的相对公差以声明收敛。

precompute_distances:'auto 'bool,默认='auto'
					  预计算距离(更快,但占用更多内存)。

	'auto':如果n_samples * n_clusters> 1200万,则不预先计算	
			距离。使用双精度,这相当于每个作业大约100MB的开销。

	True:始终预先计算距离。

	False:永远不要预先计算距离。

verbose:int,默认值= 0
	     详细模式。

random_state:int, RandomState instance,默认=None
			  确定质心初始化的随机数生成。使用整数使随机性具有
			  确定性。请参阅词汇表。

copy_x:bool,默认为True
		当预先计算距离时,从数值上更精确地确定数据的中心。
		True(默认值):则不修改原始数据,确保X为C连续的。
		
		False:则会修改原始数据,并在函数返回之前放回原
		始数据,但是可能会通过减去然后加上数据均值而引入小的数
		值差异,在这种情况下,也不会确保数据是C连续的,这可能会
		导致大幅放缓。

n_jobs:int,默认=None
		用于计算的作业数。
		通过计算每个并行运行的n_init来工作。

		None除非joblib.parallel_backend上下文中,否则表示1-1表示使用所有处理器。有关 更多详细信息,请参见词汇表。

algorithm:{
   'auto', 'full', 'elkan'}, 默认='auto'
		   使用K均值算法。
		   'full'使用经典的EM风格算法。
		   'elkan'通过使用三角形不等式,更为有效,但目前不支持稀疏数据。
		   选择'auto'时,
		   		为密集数据选择'elkan',
		   		为稀疏数据选择'full'

属性说明:

cluster_centers_:ndarray of shape (n_clusters, n_features)
				  集群中心的坐标。
				  如果算法在完全收敛之前停止(请参阅tol和max_iter),
				  则这些将与不一致labels_。

labels_:ndarray of shape (n_samples,)
		 每个点的标签

inertia_:float
		  样本到其最近的聚类中心的平方距离的总和。

n_iter_:int
		 运行的迭代次数。

也可以看看(该方法下边会讲到)
MiniBatchKMeans替代性在线实施,使用迷你批次对中心位置进行增量更新。对于大规模学习(例如n_samples> 10k),MiniBatchKMeans可能比默认的批处理实现要快得多。

示例说明:

>>> from sklearn.cluster import KMeans
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
...               [10, 2], [10, 4], [10, 0]])
>>> kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
>>> kmeans.labels_
array([1, 1, 1, 0, 0, 0], dtype=int32)
>>> kmeans.predict([[0, 0], 
### 回答1: k-means聚类算法是一种常用的无监督学习算法,可以将数据集分成k个不同的簇。该算法通过迭代的方式不断调整簇的心点,直到达到最优的聚类效果。sklearn是一个常用的Python机器学习库,其包含了k-means聚类算法的实现。通过sklearn,我们可以方便地使用k-means算法对数据进行聚类分析。 ### 回答2: k-means聚类sklearn的一个重要算法之一,一般应用于数据分类与聚类分析。 k-means算法又称K均值聚类算法,是一种非监督学习,可根据其数据特征将数据分为多个类。其基本思想是寻找数据K个最佳特征点作为聚类心,并将数据根据其距离分配到其最接近的类。 k-means聚类算法主要步骤: 1. 随机选择k个心点,k表示分为几类 2. 根据距离计算方法,计算所有数据点距离k个心点的距离,并将其分配到距离最近的一类。 3. 计算每一类的心点,并将心点作为新的聚类心。 4. 重复2,3步骤,直到心点不再改变或达到最大迭代次数时,算法结束。 sklearn的k-means聚类算法主要通过KMeans()函数实现。代码演示如下: ``` from sklearn.cluster import KMeans #创建模型,设定参数 model = KMeans(n_clusters=3) #载入数据并训练模型 model.fit(data) #预测数据所在的聚类 labels = model.predict(data) #输出心点坐标 print(model.cluster_centers_) ``` 此外,sklearn提供了许多与k-means相关的函数和工具,如silhouette_score()用于评估聚类效果,KMeans++算法,MiniBatchKMeans算法等。这些工具可以更好的帮助开发者处理不同的聚类问题。 ### 回答3: K-means聚类算法是一种常见的无监督学习算法,它可以将样本数据分为K个不同的互不重叠的簇。在sklearn聚类算法的实现主要使用了KMeans类,该类可以处理大量的数据并提供了丰富的可选参数,以帮助用户更好地使用算法。 KMeans类最基本的用法是创建一个KMeans对象并将数据集传递给它的fit方法。在fit方法,算法将根据数据集的特征和K值等参数,对数据进行聚类并生成簇心。用户可以通过调整K值来控制簇的数量,并通过调整其他可选参数来改变算法的行为。 基于KMeans类,sklearn还提供了一系列辅助工具来帮助用户更好地使用聚类算法,如可视化工具、预处理工具等。此外,sklearn还提供了许多其他聚类算法,如层次聚类、谱聚类等,用户可以在不同的场景下选择最合适的算法来解决问题。 总的来说,KMeans是一个常用的聚类算法,可以通过sklearn来进行快速的实现和使用。用户需要根据数据集的特征和问题的需求来选择最合适的参数和工具来进行簇的划分,以获得更好的聚类结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值