样本类别分布不均衡处理
  • 什么是样本类别分布不均衡?

    • 举例说明,在一组样本中不同类别的样本量差异非常大,比如拥有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[3].value_counts()

开始玄学py

from imblearn.over_sampling import SMOTE
s = SMOTE(k_neighbors=2)
data = s.fit_resample(df[[0,1,2]],df[3])
data[1].value_counts()