如何在csv中获得K个最不同的行?

数据挖掘 Python 熊猫 公制 CSV
2021-09-17 19:25:28

我们有 10000 行ages (float), titles (enum/int), scores (float). 如何选择 1000 个最不同的行?我寻找一种适用于不止一种情况的通用解决方案。

我所说的不同是什么意思:

  • 我们在一个表中有 N 列,每列都有 int/float 值。
  • 您可以将其想象为 ND 空间中的点
  • 我们想要选择彼此之间的距离最大化的 K 个点。

因此,如果我们在一个紧密排列的簇中有 100 个点,并且在距离上有一个点,我们会得到这样的三点: 在此处输入图像描述或者这个 在此处输入图像描述

它看起来像一个具有给定分辨率但不适用于 3d 点的 ND 点云“三角剖分”......那么如何从 N (具有任何复杂性)中选择 K 最远的行(点)?

3个回答

要选择最不同的行,您需要首先定义您认为不同的行。对于年龄和分数,减去值会起作用,例如:

第 1 行

  • 年龄是 38
  • 得分为 0.2

第 2 行

  • 年龄 87
  • 分数是 1.0

数字特征的差异:

  • 年龄差异为 49
  • 分数差异为 0.8

可以对这些值进行归一化或加权,以说明特征之间的不同重要性。

对于标题,您可能需要使用文本相似度度量,例如具有余弦相似度或嵌入向量距离的 tf-idf。最不同的是那些具有较高分数/年龄差异和较低标题相似性的那些。

欢迎来到社区!

有更直观的方法可以做到这一点,例如计算空间中向量的成对距离,但这不能正确扩展。第二点是即使你想走这条路,最好通过例如Networkx库将它们放在加权图中,然后找到两个节点之间的最长路径检测那里的社区并从不同社区中获取代表(后者是一种有趣的方式,因为 1000 个最不同的项目可以被视为数据中 1000 个不同集群的代表,而不一定是最远的点)

但我想提请您注意原型分析,这是一种矩阵分解方法,其中所有数据点都是基于它们在数据凸厅上的点上的投影来定义的。

这些原型可能是您正在寻找的。

结合上述两种方法,使用外围顶点进行社区检测,这可能对您的项目有用(免责声明:我是该算法的作者)

希望它有所帮助。祝你好运!

如果您使用 python using pairwise_distancesavailable here ,您可以计算行之间的成对距离。然后选择第一行作为p1,选择最不相似的列说,p2转到 a2 并选择最不相似的那不是p1继续过程以查找x点数。