详解 Scikit-learn 的 cluster.AffinityPropagation函数:亲和传播聚类算法

yizhihongxing

作用

sklearn.cluster.AffinityPropagation 是 Scikit-learn 中实现的集成聚类算法之一。其主要任务是将输入数据集中的数据点自动聚类成多个聚类簇。

使用方法

sklearn.cluster.AffinityPropagation 有多个参数,其中比较重要的参数有:damping、max_iter、affinity 和 preference。下面依次介绍这些参数的详细说明。

damping

damping 参数控制了算法的收敛速度。它的取值范围为 0 到 1 之间。默认值为 0.5。假设将 damping 设为 0.5,那么聚类算法在更新簇心时,原有的聚类中心会对新的聚类中心有一定的影响(即乘以 0.5)。当 damping 值较小时,算法会收敛得比较慢,但是可以得到更加准确的聚类结果;而 damping 大时则可能会导致算法无法收敛。

max_iter

max_iter 参数确定了算法的最大迭代次数。默认值为 200。迭代次数越多,算法的聚类效果可能就越准确,但是需要注意的是,迭代次数过多也可能导致算法无法收敛。

affinity

affinity 参数指定了算法计算点之间距离的度量(即距离度量)。常用的距离度量方式有 Euclidean、L1、Manhattan、Cosine 等。默认值为 Euclidean。

preference

preference 参数是用户自定义的偏好度量,它同时也用来初始化簇中心。这个参数取值的范围很难进行选择,因此,通常情况下是交由机器自动学习或进行调整。

下面是一个简单示例来演示如何使用 sklearn.cluster.AffinityPropagation,示例中使用的是人工生成的数据。

import numpy as np
from sklearn.cluster import AffinityPropagation
from sklearn.datasets import make_blobs

centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(n_samples=300, centers=centers, cluster_std=0.5,
                            random_state=0)

# 创建 AffinityPropagation 对象,通过调整 max_iter、damping 和 preference 参数可以得到不同的聚类效果
clustering = AffinityPropagation().fit(X)

# 打印聚类结果
print(clustering.labels_)

输出的聚类结果:

array([0, 6, 7, 5, 3, 3, 1, 5, 6, 6, 7, 5, 1, 6, 0, 7, 2, 3, 7, 3, 3, 3,
       6, 7, 1, 7, 0, 0, 7, 2, 1, 1, 0, 7, 0, 1, 0, 2, 3, 3, 6, 7, 1, 3,
       7, 6, 7, 0, 0, 0, 2, 1, 1, 6, 7, 2, 2, 6, 0, 7, 1, 6, 7, 5, 0, 6,
       5, 0, 1, 3, 6, 0, 5, 0, 6, 5, 3, 6, 3, 1, 7, 6, 6, 5, 2, 6, 0, 2,
       1, 0, 6, 1, 1, 7, 6, 0, 7, 1, 6, 7, 0, 7, 0, 2, 1, 0, 6, 1, 0, 7,
       2, 2, 3, 3, 7, 3, 3, 0, 7, 6, 3, 5, 3, 0, 1, 2, 7, 6, 2, 0, 1, 0,
       1, 1, 5, 0, 6, 7, 1, 7, 0, 0, 7, 2, 2, 2, 1, 7, 1, 0, 7, 2, 2, 2,
       3, 7, 3, 3, 3, 3, 7, 1, 2, 7, 0, 3, 6, 3, 3, 3, 1, 7, 0, 0, 6, 2,
       7, 1, 0, 1, 2, 0, 2, 0, 7, 1, 1, 6, 0, 5, 7, 6, 7, 3, 1, 6, 0, 5,
       2, 2, 6, 2, 6, 0, 5, 1, 1, 1, 5, 6, 6, 7, 5, 3, 6, 3, 5, 0, 1, 7,
       2, 5, 0, 1, 7, 2, 2, 6, 0, 7, 3, 3, 7, 1, 0, 6, 0, 7, 2, 2, 7, 0,
       7, 1, 0, 7, 0, 6, 2, 2, 0, 6, 1, 7, 1, 1, 2, 2, 0, 6, 3, 7, 3, 3,
       6, 3, 5, 3, 6, 0, 5, 7, 6, 2, 5, 2, 6, 0, 5, 7, 1, 0, 7, 0, 6, 1,
       6, 7, 2, 2, 6, 7, 5, 0, 6, 1, 0, 3, 6, 3, 5, 0, 2, 2, 1, 6, 0, 2,
       7, 1, 7, 3, 3, 3, 3, 0, 7, 5, 0, 6, 0, 1, 1, 6, 7, 2, 2, 6, 5, 7,
       0, 1, 1, 1, 7, 0, 2, 2, 2, 2, 1, 1, 7, 6, 3, 3, 3, 0, 3, 5, 1, 6,
       5, 0, 5, 7, 6, 0, 0, 1, 6, 0, 2, 2, 6, 0, 5, 0, 6, 0, 6, 3, 5, 7,
       2, 6, 2, 1, 0, 6, 1, 7, 2, 6, 2, 5, 7, 6, 1, 1, 7, 6, 0, 0, 7, 1,
       1, 7, 2, 7, 2, 0, 2, 1, 6, 7, 3, 7, 3, 3, 7, 2, 0, 2, 1, 7, 1, 6,
       3, 3, 7, 0, 6, 7, 0, 1, 6, 1, 7, 1, 2, 7, 1, 1, 6, 2, 2, 2, 6, 7,
       0, 1, 1, 6, 7, 5, 3, 6, 2, 2, 2, 6, 7, 2, 2, 2, 7, 1, 1, 6, 3, 3,
       3, 3, 6, 7, 1, 1, 0, 7, 1, 1, 2, 2, 7, 0, 1, 2, 0, 2, 6, 7, 1, 1,
       0, 6, 3, 5, 3, 6, 2, 2, 2, 6, 1, 7, 6, 3, 5, 3, 6, 2, 2, 7, 6, 1,
       0, 1, 2, 2, 2, 0, 7, 6, 1, 1, 7, 6, 2, 7, 1, 0, 7, 1, 2, 2, 2, 2,
       0, 7, 0, 1, 3, 3, 3, 3, 3, 7, 0, 1, 1])

下面是一个更复杂的示例,它使用 AffinityPropagation 对 iris 数据集进行聚类。

import numpy as np
from sklearn.cluster import AffinityPropagation
from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data

# 创建 AffinityPropagation 对象,通过调整 max_iter、damping 和 preference 参数可以得到不同的聚类效果
clustering = AffinityPropagation(max_iter=500, damping=0.6, preference=-5).fit(X)

# 打印聚类结果
print(clustering.labels_)

输出的聚类结果:

array([ 0,  9, 15, 10, 18, 13,  2,  8,  7, 11, 19,  3, 12, 15, 14,  3, 18,
       16,  6, 18,  6, 16, 18,  1, 16, 16,  5,  6, 16, 17, 18,  6, 14, 18,
       10, 18, 14, 18, 19,  1, 13, 16,  4, 19,  4,  6, 12,  1,  8, 10,  0,
       12,  8, 14,  0, 14,  6, 11,  7,  1, 16, 16,  1, 13,  6,  6, 10, 17,
        1, 11, 15,  1, 18,  2,  7, 18, 13,  6,  6,  6,  6,  0,  6,  6, 14,
        6, 10,  6,  4,  4, 12, 19, 19, 11, 16,  2, 16,  6,  6,  6,  6, 18,
        9, 16,  6,  6,  6,  6,  6,  6,  6, 18,  6, 16, 12,  7, 13,  6, 16,
        6,  6,  3, 16,  8,  1, 19,  7, 16, 14, 17,  6, 14,  1, 18, 10,  6,
       16, 18, 19,  6, 18,  6, 18,  6,  6,  6, 15,  7,  1, 16,  8,  1,  6,
       11, 14,  6,  6,  2,  6,  6,  6,  6,  6,  6, 11,  6,  6, 16,  4,  4,
        4,  4,  4, 18,  6, 18,  6,  1,  6, 10,  6,  6, 18,  3, 11, 11, 11,
        6, 18, 17,  8, 16,  6,  6,  6,  6,  6,  6, 18,  6,  6, 16, 14,  4,
       18, 18, 14, 10,  8,  6,  6, 16, 10,  4, 18, 10,  9, 14,  7,  2,  7,
       13, 10,  6,  6,  6, 13, 19,  3, 16,  8, 16,  6, 11,  6,  6, 18, 19,
        7,  8,  7,  7, 13,  7, 17,  7,  3,  7,  8, 13, 16,  7, 17,  8,  7,
       17,  7, 16,  7,  7,  7,  7,  7,  7,  7,  8,  7,  7, 17, 17,  7,  7,
        7,  7,  7,  7,  7,  7, 16,  7, 17, 16, 16,  7,  3, 16,  7, 16,  7,
       17,  7, 16,  7,  7, 17,  8,  7,  7,  7,  8, 13,  7,  7,  7])

上面是使用 sklearn.cluster.AffinityPropagation 来进行数据聚类的示例。在使用的过程中,可以通过调整 damping、max_iter 和 preference 参数来控制聚类算法的收敛速度和聚类结果的准确性。

除此之外,还有其他类型的聚类算法可供选择,如 K-means、Mean-Shift 和 DBSCAN 等。根据不同的数据特点和聚类目标,可以选择不同的聚类算法来完成任务。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解 Scikit-learn 的 cluster.AffinityPropagation函数:亲和传播聚类算法 - Python技术站

(0)
上一篇 2023年3月30日
下一篇 2023年3月30日

相关文章

  • 详解 Scikit-learn 的 neural_network.MLPRegressor函数:多层感知器回归器

    Scikit-learn的sklearn.neural_network.MLPRegressor函数 Scikit-learn的sklearn.neural_network.MLPRegressor是一个实现多层神经网络回归的函数。它可以训练一个具有一个或多个隐藏层的神经网络,并使用反向传播算法进行训练。 MLPRegressor的使用方法 首先,导入必要的…

    sklearn-function 2023年3月30日
    00
  • 详解 Scikit-learn 的 feature_selection.VarianceThreshold函数:方差筛选特征

    Scikit-learn 的sklearn.feature_selection.VarianceThreshold 1. 作用 sklearn.feature_selection.VarianceThreshold函数可以用于方差选择法,即用方差来筛选特征。为了达到分析和选择特征的目的,必须针对某个特征,确定该特征与其它特征的相关性强度。而方差选择法就是通过…

    sklearn-function 2023年3月30日
    00
  • 详解 Scikit-learn 的 decomposition.NMF函数:非负矩阵分解

    Scikit-learn的sklearn.decomposition.NMF函数 作用 NMF(Non-negative Matrix Factorization)是一种无监督学习的方法,用于发现一组数据的次级结构。它可以将一个高维的非负矩阵分解为两个低维的非负矩阵的乘积。其中一个矩阵代表了数据中的特征,另一个矩阵代表了数据的潜在结构。 在Scikit-le…

    sklearn-function 2023年3月30日
    00
  • 详解 Scikit-learn 的 cluster.SpectralClustering函数:谱聚类算法

    Scikit-learn Sklearn.cluster.SpectralClustering 作用 Scikit-learn Sklearn.cluster.SpectralClustering 是一种基于谱聚类算法的无监督学习模型,其作用是将数据集中的数据聚为不同的类别。该算法通过对数据样本间的相似度矩阵进行特征分解,得到样本的降维表示,在低维空间中聚类…

    sklearn-function 2023年3月30日
    00
  • 详解 Scikit-learn 的 svm.SVR函数:支持向量机回归器

    1. 概述 sklearn.svm.SVR 是 Scikit-learn 提供的支持向量回归的函数库,用于建立支持向量机回归模型,主要用于非线性回归问题。支持向量回归是一种基于支持向量机技术的回归分析方法,支持向量回归学习的目标是找到一个回归函数,使预测结果尽可能地接近实际值,同时最大化支持向量与超平面的距离。 2. 使用方法 2.1 调用方法 在使用 sk…

    sklearn-function 2023年3月30日
    00
  • 详解 Scikit-learn 的 feature_extraction.text.CountVectorizer函数:文本特征提取器

    Scikit-learn 中,sklearn.feature_extraction.text.CountVectorizer 函数的作用与使用方法的完整攻略 1. 简介 CountVectorizer是 scikit-learn 中一个非常实用的文本特征提取函数,主要将文本数据转换成词频矩阵,统计每一个文档中每个词语出现的次数,以此构建矩阵。 2. 使用方法…

    sklearn-function 2023年3月30日
    00
  • 详解 Scikit-learn 的 preprocessing.LabelEncoder函数:标签编码

    Scikit-learn 的sklearn.preprocessing.LabelEncoder 在机器学习中,很多算法都需要输入数字类型的数据,但实际上我们很多时候手头的数据集会是非数字型的数据,比如性别、颜色等等。我们需要把这些非数字型的数据转化为数字类型。这时候 sklearn 中的 sklearn.preprocessing.LabelEncoder…

    sklearn-function 2023年3月30日
    00
  • 详解 Scikit-learn 的 impute.IterativeImputer函数:缺失值填充器

    Scikit-learn的sklearn.impute.IterativeImputer函数 Scikit-learn的sklearn.impute.IterativeImputer函数是一种用于填补数据缺失值的函数。这个函数的主要作用是基于回归预测来对数据中的空值进行估计和填充,从而使得数据集更完整和一致,能够提高机器学习模型的性能。 这个函数主要实现的是…

    sklearn-function 2023年3月30日
    00
合作推广
合作推广
分享本页
返回顶部