python - K-Means聚类算法实现

标签 python algorithm machine-learning data-science

我正在研究机器学习,想要实现 K 表示聚类以更好地理解它。我有一个猫的数据集,每只猫都有 4 个测量值。我想根据这些属性将它们分为 2 个和 3 个不同的硬簇,看看是否可以根据这些测量来确定它们的品种。

我熟悉通用算法,但我很难理解

  1. 我应该在中间随机化哪些数字来初始化我的质心? 1到10?这真的很重要吗?
  2. 如何找到 (x,y) 元组和猫(有 4 个属性)之间的欧几里得距离?

通常在欧几里德距离中,您可以将 xy 等值相互比较,但如果我有 4 个属性,我如何测量它与 ( x,y) 二维平面上的一对?即使在阅读了这个概念之后,它对我来说也没有多大意义。

我相信在 2d 平面上我确实只能查看 4 个属性中的两个属性 - 或者这是不正确的?如果不将数据维度压缩到 2,我不知道如何做到这一点。

Ps:我知道有一些库实现了 K-means 聚类,但这不是重点。

最佳答案

您在问题中指的是二维平面中两点的欧几里德距离。您希望在每个属性向量本身就是一个数据点的平面中执行聚类,这对于 2D 平面来说是不可能的。因此,您想要处理一个 n 维平面,其中每个数据点都是一个 n 维向量。这些维度中的每一个都代表一个特征。在您的例子中,n4,因为每个数据点有 4 个特征(属性)。

您可以通过选择值范围从所有特征向量的最小值到最大值的任何向量来随机化质心。

假设您有 3 只不同的猫,它们具有以下属性:[1, 5, 9, 10], [2, 3, 4, 3], [5, 6, 1, 5]。这些只不过是特征向量。您将按如下方式运行集群:

  1. 您首先计算 minmax 向量。 最小值 = [1, 3, 1, 3]最大值 = [5, 6, 9,10]。因此,您可以在以下范围内分配质心:[1...5, 3...6, 1...9, 3...10]

  2. 质心初始化后(随机或基于启发式估计),您可以运行算法并在每次迭代时重新计算质心。

  3. 您将欧几里德距离计算为 2 个向量的欧几里德距离:

enter image description here

其中 qi 是向量 q° 中的第 i 个元素

希望对您有帮助!

关于python - K-Means聚类算法实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58863834/

相关文章:

python - pygame中的落沙,每次按下鼠标按钮时都会创建并掉落粒子

algorithm - 动态堆栈的摊销分析

algorithm - 为自定义结构生成唯一哈希?

machine-learning - OneHotEncoder 中的 active_features_ 属性

python - 从 gensim word2Vec 获取权重矩阵

python - 从头开始在 Python 中进行 Bleu 评分

python - SQLAlchemy 多对多性能

python - 我可以在拟合之前在 python 中修复高斯混合模型的一个组件的平均值吗?

algorithm - 这些算法是等价的吗?

python - "Deterministic"伪随机数生成