通过针对 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
列仅包含以下值:2
、4
和 5
。但是,我需要额外的数据行,其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
我们如何在保持Age
、Weight
、Gender
等列中的原始数据特征的同时生成此类合成数据?
【问题讨论】:
【参考方案1】:首先,最好质疑您为什么需要合成数据。例如,如果您希望将最终数据集用于预测 Marks
列的分类问题,那么您的意图根本不适合。因为您正在尝试根据“标记”生成一组列,然后您正在尝试使用这些列来预测“标记”;由于过度拟合,这将是一个非常糟糕的主意。
如上所述,如果您仍然需要生成这样的数据集,一种方法是使用逻辑回归等技术。但是,这并不像 典型逻辑回归解决方案那样容易。这里的主要问题是列丢失(即您只有一列Marks
)。我想到的是这个过程:你还有 3 个列 Age
、Weight
和 Marks
。首先,您可以找到这些列与Marks
列的相关性。然后选择与Marks
相关性最高的列,假设它是Age
。然后通过仅使用Marks
和Age
列创建预测模型来预测Age
的值。现在你有了一个包含Marks
和Age
列的数据集。现在获取下一个最高相关列并执行相同的过程,直到使用完所有剩余的列。这将创建一个有点公平的数据集,但我认为这不是一个很好的解决方案。
最后,在这个问题上我最喜欢的是随机生成数据,无论如何这将是公平的。
【讨论】:
【参考方案2】:您可以复制原始数据并将其与原始数据连接,例如:
new_df = pd.concat([df, df.assign(Marks=1)], ignore_index=True)
【讨论】:
实际上,我需要其他列的值来显示特殊特征来制作目标列的值。让我们举个例子。我需要其他使Marks
值1
的列值。假设我有一个使用“原始数据帧”创建的分类模型,它预测 Marks
值。因此,生成的行的值将能够预测与1
非常接近的值(在这种情况下可能是2
作为预测值)。以上是关于通过针对 DataFrame 中某个列的不存在的特殊值来生成合成数据样本的主要内容,如果未能解决你的问题,请参考以下文章
pandas筛选dataframe数据:指定一个数据列的值不等于某个固定值,而且另外一个数据列的值大于某一阈值
R语言dplyr包为dataframe添加数据列实战( Add Columns):基于mutate()函数添加一个或者多个数据列(尾部添加头部添加条件生成某个具体数据列的前后)