pandas样本均衡策略

训练模型时通常会遇到样本数据分布不均匀导致模型效果不理想,有些算法可以通过配置class_weight参数保证样本均衡,当算法不存在这些参数时我们需要手动处理样本数据保证样本得均衡。
今天主要介绍样本不均衡中欠采样的处理方法:

# !/usr/bin/python
# -*- coding:utf-8 -*-
# file: sample_balanced.py
# author: Lawrence
# datetime: 2021/8/26 16:23
import pandas as pd
from imblearn.over_sampling import SMOTE  # 过抽样处理库SMOTE

def sample_balanced(df, colss):
    """
    样本均衡策略
    """
    df = df[colss['F9']]
    x = df.iloc[:, :-1]
    y = df.iloc[:, -1]
    groupby_data_orgianl = df.groupby('F9').count()  # 对label做分类汇总
    groupby_data_orgianl = groupby_data_orgianl[groupby_data_orgianl['F14'].between(2, 400, inclusive=True)]  # 筛选出出现频率少于400大于2次的数据
    ratio1 = {}
    for i in groupby_data_orgianl.index:
        # 数据源中样本数少于2个不能过采样
        ratio1[i] = 400  # 指定样本过采样到多少
    # SMOTE方法进行过采样处理
    model_smote = SMOTE(sampling_strategy=ratio1, k_neighbors=1)  # 建立SMOTE模型对象
    x_smote_resampled, y_smote_resampled = model_smote.fit_sample(x, y)  # 输入数据做过抽样处理
    smote_resampled = pd.concat([x_smote_resampled, y_smote_resampled], axis=1)  # 按列合并数据框
    groupby_data_smote = smote_resampled.groupby('F9').count()  # 对label做分类汇总
    # print(groupby_data_smote)  # 打印输出经过SMOTE处理后的数据集样本分类分布
    return groupby_data_smote
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值