使用不同标准平衡数据

数据挖掘 机器学习 数据
2022-02-18 01:50:26

我有一个音频和文本文件数据集,我想使用不同的标准来平衡它来训练神经网络。文本和匹配的音频文件分组在一个 ID 下。

对于每个 ID,我都有一些单词和一些元数据。

假设我的数据有三个需要平衡的元数据/标准(嗯......有点,我希望能够为某些标准值选择百分比):

  • 说话人的名字,每个说话人的字数应该差不多。
  • 扬声器的状态(如果扬声器仍处于活动状态,则为active ;如果没有,则为非活动状态),我希望大约70% 的活动扬声器和30% 的非活动
  • 说话者的性别,我想要大约50% 男性50% 女性

示例:ID12345 有 10,000 个单词。元数据:John,男性,活跃

如果我平衡一个标准,然后另一个,我肯定会不平衡以前平衡的一个。此外,如果我一次只使用一个标准进行平衡,我可能会丢弃可能对平衡以下标准有用的数据,这意味着我最终会得到更少的数据,而我本来可以优化。

是否有一种算法可以使用所有标准与其百分比目标平衡数据,并最大化剩余的单词数?

我正在寻找具有可变数量标准的通用算法。

编辑:我使用 C++ 和 MongoDB(但如果它可以帮助我,我会接受其他语言/工具以及算法)。

1个回答

您需要根据所有 3 个特征的联合分布来平衡数据。

一个简单的选择是将每个特征视为分类(对任何连续特征进行分箱),然后将每个特征组合映射到单个新特征:

doc_len_tokens  | status   | gender | level
----------------|----------|--------|------
1               | active   | male   | 1
1               | active   | female | 2
1               | inactive | male   | 3
1               | inactive | female | 4
2               | active   | male   | 5
2               | active   | female | 6
2               | inactive | male   | 7
2               | inactive | female | 8
... etc ...

然后,您将level在抽样时进行分层。

下面是一个 SQL 示例:

SELECT
    data.unique_id,
    data.doc_num_tokens,
    data.status,
    data.gender
FROM (
    SELECT
        data.unique_id,
        data.doc_num_tokens,
        data.status,
        data.gender,
        row_number() OVER (
            PARTITION BY
                data.doc_num_tokens,
                data.status,
                data.gender
            ORDER BY
                newid()
        ) AS row_num
    FROM
        my_data AS data
) AS data
WHERE
    row_num <= ${number of rows to sample}