通过针对 DataFrame 中某个列的不存在的特殊值来生成合成数据样本

Posted

技术标签:

【中文标题】通过针对 DataFrame 中某个列的不存在的特殊值来生成合成数据样本【英文标题】:Generating systhetic data samples by targeting a non-existing special value for a certain colunm in a DataFrame 【发布时间】:2021-05-25 06:53:00 【问题描述】:

假设我们有以下DataFrame;

    Age   Weight  Gender  Marks
0    10      20       0      5      
1    11      19       1      4
2    15      25       0      2

这里,Marks 列仅包含以下值:245。但是,我需要额外的数据行,其Marks 值将等于,例如1。因此,具有综合生成行的最终数据集将是,

    Age   Weight  Gender  Marks
0    10      20       0      5      
1    11      19       1      4
2    15      25       0      2
3     ?       ?       ?      1
4     ?       ?       ?      1
5     ?       ?       ?      1

我们如何在保持AgeWeightGender 等列中的原始数据特征的同时生成此类合成数据?

【问题讨论】:

【参考方案1】:

首先,最好质疑您为什么需要合成数据。例如,如果您希望将最终数据集用于预测 Marks 列的分类问题,那么您的意图根本不适合。因为您正在尝试根据“标记”生成一组列,然后您正在尝试使用这些列来预测“标记”;由于过度拟合,这将是一个非常糟糕的主意。

如上所述,如果您仍然需要生成这样的数据集,一种方法是使用逻辑回归等技术。但是,这并不像 典型逻辑回归解决方案那样容易。这里的主要问题是列丢失(即您只有一列Marks)。我想到的是这个过程:你还有 3 个列 AgeWeightMarks。首先,您可以找到这些列与Marks 列的相关性。然后选择与Marks 相关性最高的列,假设它是Age。然后通过仅使用MarksAge 列创建预测模型来预测Age 的值。现在你有了一个包含MarksAge 列的数据集。现在获取下一个最高相关列并执行相同的过程,直到使用完所有剩余的列。这将创建一个有点公平的数据集,但我认为这不是一个很好的解决方案。

最后,在这个问题上我最喜欢的是随机生成数据,无论如何这将是公平的。

【讨论】:

【参考方案2】:

您可以复制原始数据并将其与原始数据连接,例如:

new_df = pd.concat([df, df.assign(Marks=1)], ignore_index=True)

【讨论】:

实际上,我需要其他列的值来显示特殊特征来制作目标列的值。让我们举个例子。我需要其他使Marks1 的列值。假设我有一个使用“原始数据帧”创建的分类模型,它预测 Marks 值。因此,生成的行的值将能够预测与1 非常接近的值(在这种情况下可能是2 作为预测值)。

以上是关于通过针对 DataFrame 中某个列的不存在的特殊值来生成合成数据样本的主要内容,如果未能解决你的问题,请参考以下文章

pandas筛选dataframe数据:指定一个数据列的值不等于某个固定值,而且另外一个数据列的值大于某一阈值

如何在数据框同一列的不同行之间执行集合之间的联合

R语言dplyr包为dataframe添加数据列实战( Add Columns):基于mutate()函数添加一个或者多个数据列(尾部添加头部添加条件生成某个具体数据列的前后)

数据集上的地图功能是不是针对一列的操作进行了优化?

Primefaces DataTable 的特定于列的上下文菜单

Spark Hive:通过另一个 DataFrame 的列的值过滤一个 DataFrame 的行