不均衡数据集采样1——SMOTE算法(过采样)

38 篇文章 29 订阅
36 篇文章 9 订阅

SMOTE: Synthetic Minority Over-sampling Technique
论文地址:https://www.jair.org/index.php/jair/article/download/10302/24590

SMOTE的算法思路是:

  • 使用K近邻,在附近(最少选附近5个点)随便找一个同一类别的点,然后连线
  • 在线段上随便找一个点,就是新的样本点(论文里说的很学术:新样本点 = 原始点+random(0,1) * 新旧差异

详细代码可以参考:https://zhuanlan.zhihu.com/p/44055312
在这里插入图片描述

代码示例

安装方法:pip install imbalanced-learn
https://imbalanced-learn.org/stable/over_sampling.html

过采样的文档地址:https://imbalanced-learn.org/stable/over_sampling.html

import pandas as pd
from imblearn.over_sampling import SMOTE


def get_dataset():
    from sklearn.datasets import make_classification
    data_x, data_y = make_classification(n_samples=1000, n_classes=2, n_features=6, n_informative=4,
                                         random_state=0)  # 2个特征
    # data_df = pd.DataFrame(data_x).merge(pd.Series(data_y, name="y_label"), left_index=True, right_index=True)
    data_x = pd.DataFrame(data_x)
    data_x.columns = ['x1', 'x2', 'x3', 'x4', 'x5', 'x6']
    data_y = pd.Series(data_y)
    # 删除部分数据:删除100个label为0的数据
    drop_index = data_y[data_y == 0].sample(100).index
    data_y = data_y.drop(drop_index)
    data_x = data_x.drop(drop_index)
    return data_x, data_y


if __name__ == '__main__':
    x_data, y_data = get_dataset()  # 获取数据源

    # 使用smote生成数据
    smote_data = SMOTE().fit_resample(x_data, y_data.values)
    new_x_data = smote_data[0]  # 新的x
    new_y_data = smote_data[1]  # 新的y

在工具中,如果有多个类别,会默认将拥有最多数据量的类对应的数据量,作为目标量,将其他所有类别的数据量都生成到这个量

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值