当前位置: 首页 > 知识库问答 >
问题:

为kmeans质心初始化查找numpy数组的边点

梁勇
2023-03-14

我正在用python实现kmeans算法。我正在测试初始化质心的新方法,并希望实现它,看看它会对集群产生什么影响。

我的想法是从我的数据集中选择数据点,使质心初始化为数据的边缘点。

简单示例2属性示例:

假设这是我的输入数组

input = array([[3,3], [1,1], [-1,-1], [3,-3], [-1,1], [-3,3], [1,-1], [-3,-3]])

我想从这个数组中选择[3,3][3,-3][3,3][3,-3]的边点。所以如果我的k是4,这些点会被选中

在我工作的数据有4和9个属性和大约300个数据点在我的数据集中

注意:我还没有找到解决问题的方法

我也想过为每一列找到最大值和最小值,并从那里尝试找到我的数据集的边缘,但我没有从这些值中识别边缘的有效方法的想法。

如果你认为这个想法行不通,我很想听听你要说什么。

问题

  1. numpy是否有这样一个功能来获取数据集边缘数据点的索引
  2. 如果没有,我将如何在数据集中找到这些边缘点

共有1个答案

鱼征
2023-03-14

使用sency和成对距离来计算每一个距离另一个有多远:

from scipy.spatial.distance import pdist, squareform
p=pdist(input)

然后,使用sqaureform将p向量转化为矩阵形状:

s=squareform(pdist(input))

然后,使用numpyargwhere查找值为max或极值的索引,然后在输入数组中查找这些索引:

input[np.argwhere(s==np.max(p))]

array([[[ 3,  3],
        [-3, -3]],

       [[ 3, -3],
        [-3,  3]],

       [[-3,  3],
        [ 3, -3]],

       [[-3, -3],
        [ 3,  3]]])

完整的代码是:

from scipy.spatial.distance import pdist, squareform
p=pdist(input)
s=squareform(p)
input[np.argwhere(s==np.max(p))]
 类似资料:
  • 我使用t-SNE将我的数据集的维度从18降低到2,然后我使用k均值来聚类2D数据点。 使用这个,我现在有一个簇的2D质心数组,但我想得到这些质心对应的18D原始数据点。 有没有办法让t-SNE倒转?谢谢

  • 问题内容: 有没有办法初始化形状的numpy数组并将其添加到其中?我将通过列表示例解释我需要的内容。如果要创建循环中生成的对象列表,可以执行以下操作: 我想对一个numpy数组做类似的事情。我了解vstack,串联等。但是,这些似乎需要两个numpy数组作为输入。我需要的是: 本应具有的形状。这该怎么做? 编辑: 我想添加以下说明。我知道我可以定义然后填充它。但是,这需要预先指定big_array

  • 问题内容: 我希望能够“快速”构建一个numpy数组,但我不知道该数组的大小。 例如,我想做这样的事情: 这将导致包含x的所有元素,这显然是一个简单的答案。我很好奇这是否可能? 问题答案: 构建一个Python列表并将其转换为Numpy数组。每个附加项需要O(1)的摊销时间+ O( n )才能转换为数组,总共需要O( n )。

  • 我需要初始化具有相同形状的多个Numpy数组。想知道哪种方式是最好的: 为每个人写一行: 或者有更好的方法?

  • 问题内容: 当数组包含字符串数据时,我在使用numpy时遇到一些琐碎的麻烦。我有以下代码: 现在,当我使用打印时,得到的响应是,显然不是Cat和Apple的预期输出。为什么会这样,如何获得正确的输出? 谢谢! 问题答案: Numpy要求字符串数组具有固定的最大长度。当您使用创建空数组时,默认情况下会将最大长度设置为1。你看你是否做; 它将显示“ | S1”,表示“一个字符的字符串”。随后的数组分配

  • 本文向大家介绍Python Numpy 数组的初始化和基本操作,包括了Python Numpy 数组的初始化和基本操作的使用技巧和注意事项,需要的朋友参考一下 Python 是一种高级的,动态的,多泛型的编程语言。Python代码很多时候看起来就像是伪代码一样,因此你可以使用很少的几行可读性很高的代码来实现一个非常强大的想法。 一.基础: Numpy的主要数据类型是ndarray,即多维数组。它有