样本不均衡数据处理

当我们在做机器学习任务时,会经常遇到这样的数据集,两种样本的数量相差特别悬殊。这就会导致一个问题,在建模的时候,模型会特别注重数量多的样本,而忽视数量少的样本,觉得数量少的样本不够重要。生活中也有许多这样的例子,如在一份患者数据集当中,绝大多数患者都是正常的,只有极少数患者会得癌症。在一份银行贷款数据集中,绝大数用户都能按时还款,只有极少数用户会欠款不还。如果我们我们的模型只关注正常样本,而忽视了这些极少数的异常样本,那么这样的模型是没有什么实际价值的。
bank.jpg

银行贷款是一件犯错成本很高的事情,我们需要根据用户所提交的资料来判断是否给该用户贷款以及贷款的金额。如果一个用户能够正常还款,而我们没有给他贷款,我们损失的最多是贷款产生的利息;如果一个用户无法偿还贷款,而我们贷给他一大笔钱,那我们损失的将是整个本金。所以对于该情况下的模型而言,必须能够准确识别出这些极少数的异常样本。

对于机器学习模型而言,重视多数样本,忽视少数样本,这是符合机器甚至是人的认知逻辑的。但是面对这样的问题,我们该如何处理呢?我们希望异常样本和正常样本的数量一样多,这样机器就会认为它们同等重要。要实现正常样本和异常样本数量一样多,有两种方案:

1.下采样:

从多数的正常样本中随机选出与少数样本一样多的数据,组成新的数据集,然后进行建模任务。这里,我们以银行贷款数据集作为例子,该数据集已经做过了脱敏(去敏感信息)处理。
creditcard:链接:https://pan.baidu.com/s/1t5opuhFew5xVP2zpIwfmVA
提取码:khj6
具体实现过程:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline

df = pd.read_csv('D:\\Py_dataset\\creditcard.csv')
df.head()#打印出前五行数据进行观察

print('该数据集规模:',df.shape)
该数据集规模: (284807, 31)

df['Class'].value_counts()
0    284315
1       492
Name: Class, dtype: int64

#样本分布可视乎
df['Class'].value_counts(normalize = True).plot(kind = 'bar')

前五行数据信息:
creditcard data.png

样本分布比例:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值