【问题标题】:Sampling with Pandas用 Pandas 采样
【发布时间】:2018-04-24 23:08:35
【问题描述】:
vsample_data = credit_card.sample(n=520, replace='False')

print(vsample_data)

在这里,我试图从数据集中抽取 520 个数据点,但无法获得正确的样本数据,因此从信用卡欺诈数据集中具有两个类的概率相等,即 Class-0(非欺诈)和第 1 类(欺诈)。

【问题讨论】:

  • 这里credit_card是信用卡欺诈检测数据集
  • 为什么不将其拆分为两个数据集,一个用于欺诈,一个用于非欺诈,每个样本 260 个?
  • 我在想一个不分裂的办法
  • 你能告诉我如何对数据进行采样,以便我可以获得 520 个包含 class-0 和 class-1 的数据点
  • 随机选择0类260分,1类260分。

标签: python pandas sample


【解决方案1】:
d = {'actions': [1, 2, 1, 6, 4], 'fraud': [True, False, True, True, False]}
df = pd.DataFrame(data=d)
print (pd.concat([frauds.sample(n = 1, replace = 'False'), normal.sample(n = 1, replace = 'False')]))

【讨论】:

    【解决方案2】:

    创建欺诈数据框

    我将使用 10% 概率的欺诈案例:

    data = pd.DataFrame({'val':[random.randint(0,1000) for _ in range(1000)], 
                     'fraud':list(np.random.binomial(1, 0.1, 1000))})
    data.head(10)
    

    [出]

    fraud   val
    0   0   359
    1   0   731
    2   0   146
    3   0   975
    4   0   295
    5   0   467
    6   0   366
    7   1   69
    8   0   18
    9   0   297
    

    与非欺诈案例相比,欺诈案例的过采样率应为 9 倍。

    data['weights'] = data.fraud * 9
    data['weights'] += 1
    

    加权样本

    spl = data.sample(100,weights=data.weights)
    sum(spl.fraud)
    

    [出]

    45
    

    欺诈案件约占样本总数的 50%。

    【讨论】:

      猜你喜欢
      • 2013-06-09
      • 1970-01-01
      • 2013-03-27
      • 2015-12-27
      • 2018-02-01
      • 2013-03-25
      • 1970-01-01
      • 2019-04-15
      • 2014-07-24
      相关资源
      最近更新 更多