【发布时间】:2020-04-04 00:32:04
【问题描述】:
我正在尝试创建一个异常数据集,它有 8 列,一些列包含分类值,其他列包含正数值。而这个数据只包含两种类型的数据点:正常数据点和异常值。
我想知道您是否知道任何工具或库或一些可以帮助我自动创建此类数据集的方法。我听说 numpy 有生成标准分布的工具,但我认为它不能创造分类价值。
就像每次一样,非常感谢您的帮助。
【问题讨论】:
我正在尝试创建一个异常数据集,它有 8 列,一些列包含分类值,其他列包含正数值。而这个数据只包含两种类型的数据点:正常数据点和异常值。
我想知道您是否知道任何工具或库或一些可以帮助我自动创建此类数据集的方法。我听说 numpy 有生成标准分布的工具,但我认为它不能创造分类价值。
就像每次一样,非常感谢您的帮助。
【问题讨论】:
前言:您应该问自己一个非常重要的问题:您认为什么是异常值,然后尝试模拟这些异常值。您可以在下面找到粗略的指南:
您可以通过创建一个具有某些预定义分布的数据集(例如标准正态,平均值为 0 和方差为 1)并使用它创建一些数据点(例如 10_000)来轻松做到这一点。另一个可能来自另一个分布(甚至是高斯分布,但均值、方差不同)并说50 点是异常值。
取决于可能的分类值的大小以及您是否希望异常值和非异常值数据都在某个范围内。
比如说,分类值在[0, 10] 之内。因此,您可以在整个范围内使用 numpy 的 np.random.randint 生成它们,例如,对于 5 列,因此您会得到以下示例:
[1, 4, 7, 9, 3]
现在异常值可能在[0, 10] 中包含更窄的值,例如[7,9],因此它们的值可能是:
[7, 7, 8, 9, 8]
鉴于这种组合,它应该被认为是一个异常值(当然会有一些误报,因为[0, 10] 可能会在原则上产生类似的东西)。
这种情况比较简单;只需使用不同的范围,您就可以确定没有数据点在非异常数据中具有这些值。
总而言之,您可以混合使用这些方法并改变程度,以使异常值算法的任务更难(类似的数据生成过程)或更简单(这两者之间的功能差异很大)。
在上面进行参数化并创建一个具有不同易用性的函数应该很容易。除非你需要更复杂的东西,否则不要去图书馆(当然你可以让整个想法变得更复杂)。
【讨论】: