如何对数据帧进行分组以获得代表较大集合的全部范围的子集

问题描述 投票:0回答:1

这些是我拥有的一堆数据框的 2 个示例:

p1 p2 p3
4 2.1 3.4 4.5
15 2.2 3.6 2.8
39 2.5 2.1 0.4

还有这个:

p1 p2 p3
4 2.1 3.4 4.5
18 8.2 2.2 5.8
22 6.4 3.6 1.4
29 2.4 4.1 2.3

我有大约 100 万个这样的数据帧(相同的列,不同的长度),我想输出大约 50000 个数据帧的子集,它公平地代表了存在的所有不同的数据帧。基本上,数据帧应该是有效的表示,因此在完整的 100 万个或 50k 子集上训练 ML 模型应该为 ML 模型提供几乎相同的行为。

天数很重要,因为 2 个数据帧具有相同的参数 (p) 值,但天数列截然不同

我的方法想法是通过每个级别的变量将数据帧分组在一起。然后从底层的每组中取出 1 个数据帧。

组级别 1 (GL1):按行数对数据帧进行分组。

组级别 2 (GL2):对于 GL1 中的每个数据帧,使用聚类分析(DBSCAN 聚类?)对具有相似天数列的数据帧进行分组

Group Level 3 (GL3):对于 GL2 中的每个数据帧,使用聚类分析(DBSCAN 聚类?)将数据帧与相似的参数值分组在一起

从每个 GL3 组中取出 1 个数据帧来表示该组数据帧。

它可能无法获得每个参数的完整最大值和最小值,但这种方法似乎涵盖面很广。这是个好主意还是您有更好的主意?

python machine-learning cluster-analysis
1个回答
0
投票

这个想法是正确的,但是你可以应用这种方法:

  1. 第 1 级分组 - 按行数分组: 这是直接且有效的。它有助于确保样本包含不同长度的数据帧,这些数据帧可以代表不同的间隔或尺度。
  2. 分组级别 2 - 使用 DBSCAN 按天分组: DBSCAN 数天聚类是一个不错的选择,因为它对非均匀数据分布(包括任意形状)具有鲁棒性。
  3. Group Level 3 - 使用 DBSCAN 按参数值进行分组: 您对此的选择也不错。 DBSCAN 将捕获相似参数值的簇。应用特征缩放(您可以尝试 MinMaxScaler)以确保每个参数 p1、p2、p3 在聚类影响方面得到同等对待。请注意,DBSCAN 对输入数据的规模很敏感。
  4. 第 4 级组 - 从 GL3 组中抽样: 对 GL3 组使用随机抽样以确定广泛的代表性。为了防止对某些集群进行过采样,可以选择多样性。为了实现这一目标,您可以使用其他元数据进行分层(您可以使用每个 GL3 组内的平均值或天数范围)。
© www.soinside.com 2019 - 2024. All rights reserved.