6-机器学习-样本类别分布不均衡处理之过抽样和欠抽样
Posted wgwg
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6-机器学习-样本类别分布不均衡处理之过抽样和欠抽样相关的知识,希望对你有一定的参考价值。
总结
样本类别分布不均衡处理(处理过拟合和欠拟合问题)
- 过抽样(上采样):通过增加分类中少数类样本的数量来实现样本均衡
- from imblearn.over_sampling import SMOTE
欠抽样(下采样):通过减少分类中多数类样本的数量来实现样本均衡 (可能造成样本数据大量丢失)
- from imblearn.under_sampling import RandomUnderSampler
样本类别分布不均衡处理
什么是样本类别分布不均衡
- 举例说明,在一组样本中不同类别的样本量差异非常大,比如拥有1000条数据样本的数据集中,有一类样本的分类只占有10条,此时属于严重的数据样本分布不均衡。
样本类别分布不均衡导致的危害
- 样本类别不均衡将导致样本量少的分类所包含的特征过少,并很难从中提取规律;即使得到分类模型,也容易产生过度依赖与有限的数据样本而导致过拟合问题,当模型应用到新的数据上时,模型的准确性会很差。
- 解决方法:
- 通过过抽样和欠抽样解决样本不均衡
- 也可以叫做上采样,和下采样
- 通过过抽样和欠抽样解决样本不均衡
过抽样(over-sampling)
- from imblearn.over_sampling import SMOTE
- 通过增加分类中少数类样本的数量来实现样本均衡,比较好的方法有SMOTE算法。
- SMOTE算法原理介绍:
- 简单来说smote算法的思想是合成新的少数类样本,合成的策略是对每个少数类样本a,从它的最近邻中随机选一个样本b,然后在a、b之间的连线上随机选一点作为新合成的少数类样本。
- 参数:k_neighbors
- 找出类别少的样本点周围最近的k个邻居
- 环境安装:
- pip install imblearn
# 数据源生成 import pandas as pd import numpy as np x = np.random.randint(0,100,size=(100,3)) y = pd.Series(data=np.random.randint(0,1,size=(95,))) y = y.append(pd.Series(data=[1,1,1,1,1]),ignore_index=False).values y = y.reshape((-1,1)) all_data_np = np.concatenate((x,y),axis=1) np.random.shuffle(all_data_np) df = pd.DataFrame(all_data_np) df.head() df.shape # (100, 4) df[3].value_counts() # 样本分类不均衡 0 95 1 5 Name: 3, dtype: int64 X = df[[0,1,2]] y = df[3] from imblearn.over_sampling import SMOTE s = SMOTE(k_neighbors=3) feature,target = s.fit_sample(X,y) # 返回一个元组 feature.shape # 原来100行增加到190 # (190, 3) target.shape # (190,) target.value_counts() 1 95 0 95 Name: 3, dtype: int64
欠抽样(under-sampling)
通过减少分类中多数类样本的数量来实现样本均衡(可能造成样本数据大量丢失)
- from imblearn.under_sampling import RandomUnderSampler
from imblearn.under_sampling import RandomUnderSampler r = RandomUnderSampler() # 没有那个n_neighbors参数 a,b = r.fit_sample(X,y) a.shape # (10, 3) b.shape # (10,) b.value_counts() 1 5 0 5 Name: 3, dtype: int64
以上是关于6-机器学习-样本类别分布不均衡处理之过抽样和欠抽样的主要内容,如果未能解决你的问题,请参考以下文章