如何将 Scikit-learn 的亲和传播聚类与我自己的数据集一起使用?

数据挖掘 机器学习 scikit-学习 聚类
2022-03-09 06:49:44

我正在尝试使用亲和力传播对我的数据集进行聚类。我按照这个这个链接来掌握亲和力传播聚类的基础知识。sklearn提供的示例代码如下:

from sklearn.cluster import AffinityPropagation
from sklearn import metrics
from sklearn.datasets.samples_generator import make_blobs
# Generate sample data
centers = [[1, 1], [-1, -1], [1, -1]]
X, labels_true = make_blobs(n_samples=300, centers=centers, cluster_std=0.5,
                            random_state=0)
# Compute Affinity Propagation
af = AffinityPropagation(preference=-50).fit(X)
cluster_centers_indices = af.cluster_centers_indices_
labels = af.labels_

在运行它时,它按照网站上的说明工作。但是,我无法完全理解它。我想修改此代码以用于我的数据集。我的数据集由二维表面上不同传感器的值组成。我想用二维表面上不同点的类似传感器读数对值进行聚类。我该怎么做?

谢谢你。

1个回答

聚类算法通常假设您有对象的位置,并希望找到密集的观察组。

如果我理解正确,您有一个二维传感器读数网格,并且您希望将它们分割成区域。这是一个稍微不同的问题。如果您只是将传感器读数放入一个聚类中,那么这些聚类将在空间上不连贯:聚类假设这些点没有特定的顺序。

因此,您需要研究分段

一种天真的方法是使用 (sensor.x, sensor.y, sensor.value) 元组。包括传感器位置将导致结果在空间上有些连贯。但这使得它对缩放非常敏感,并且没有“正确”的缩放方式。在空间相干性和测量相干性之间存在权衡。