不平衡数据分类

任务描述

本关任务:完成不平衡数据分类的学习。

相关知识

为了完成本关任务,你需要掌握:

  1. 不平衡数据分类介绍,
  2. 随机采样。

不平衡数据分类介绍

从数据角度出发的不平衡数据集的处理方法有两种随机采样法,以及对应的python库(imblearn)。

imblearn介绍 imblearn/imbalanced-learn是一个python包,它提供了许多重采样技术,常用于显示强烈类间不平衡的数据集中。它与scikit learn兼容,是 scikit-learn-contrib 项目的一部分。

数据集:

随机采样

Oversampling 过采样 针对不平衡数据, 最简单的一种方法就是生成少数类的样本, 这其中最基本的一种方法就是: 从少数类的样本中进行随机采样来增加新的样本,对应Python库中函数为RandomOverSampler

 

复制正样本, 直到训练集中正样本和负样本一样多,可能导致模型过分拟合,因为一些噪声样本也可能被复制多次。

代码示例:

  1. # 随机过采样
  2. from imblearn.over_sampling import RandomOverSampler
  3. ros = RandomOverSampler(random_state=0)
  4. X_resampled, y_resampled = ros.fit_sample(X, y)

Undersampling欠采样 与过采样相反,欠采样是从多数类样本中随机选择少量样本,再合并原有少数类样本作为新的训练数据集。

随机欠采样有两种类型分别为有放回和无放回两种,无放回欠采样在对多数类某样本被采样后不会再被重复采样,有放回采样则有可能。

对应Python库中函数为RandomUnderSampler,通过设置RandomUnderSampler中的replacement=True参数, 可以实现自助法(boostrap)抽样。

随机抽取100个负样本, 与所有的正样本一起形成训练集 。

问题: 一些有用的负样本可能没有选出来用于训练, 因此导致一个不太优的模型怎么办? 答:多次执行不充分抽样, 并归纳类似于组合学习方法的多分类器 。

代码示例:

  1. #随机欠采样
  2. from imblearn.under_sampling import RandomUnderSampler
  3. rus = RandomUnderSampler(random_state=0)
  4. X_resampled, y_resampled = rus.fit_resample(X, y)

编程要求

根据提示,在右侧编辑器补充代码,完成随机过采样对不平衡数据分类。

测试说明

平台会对你编写的代码进行测试:

预期输出:

  1. <bound method DataFrame.info of Pregnancies Glucose ... DiabetesPedigreeFunction Age
  2. 0 6 148 ... 0.627 50
  3. 1 1 85 ... 0.351 31
  4. 2 8 183 ... 0.672 32
  5. 3 1 89 ... 0.167 21
  6. 4 0 137 ... 2.288 33
  7. 5 5 116 ... 0.201 30
  8. 6 3 78 ... 0.248 26
  9. 7 10 115 ... 0.134 29
  10. 8 2 197 ... 0.158 53
  11. 9 8 125 ... 0.232 54
  12. 10 4 110 ... 0.191 30
  13. 11 10 168 ... 0.537 34
  14. 12 10 139 ... 1.441 57
  15. 13 1 189 ... 0.398 59
  16. 14 5 166 ... 0.587 51
  17. 15 7 100 ... 0.484 32
  18. 16 0 118 ... 0.551 31
  19. 17 7 107 ... 0.254 31
  20. 18 1 103 ... 0.183 33
  21. 19 1 115 ... 0.529 32
  22. 20 3 126 ... 0.704 27
  23. 21 8 99 ... 0.388 50
  24. 22 7 196 ... 0.451 41
  25. 23 9 119 ... 0.263 29
  26. 24 11 143 ... 0.254 51
  27. 25 10 125 ... 0.205 41
  28. 26 7 147 ... 0.257 43
  29. 27 1 97 ... 0.487 22
  30. 28 13 145 ... 0.245 57
  31. 29 5 117 ... 0.337 38
  32. .. ... ... ... ... ...
  33. 970 8 176 ... 0.467 58
  34. 971 0 167 ... 0.839 30
  35. 972 0 109 ... 0.855 38
  36. 973 6 125 ... 0.565 49
  37. 974 8 105 ... 0.239 45
  38. 975 0 179 ... 0.455 22
  39. 976 0 137 ... 2.288 33
  40. 977 7 159 ... 0.383 36
  41. 978 0 162 ... 0.759 25
  42. 979 2 174 ... 0.646 24
  43. 980 1 128 ... 0.613 24
  44. 981 0 179 ... 0.686 23
  45. 982 3 171 ... 0.199 24
  46. 983 0 131 ... 0.196 22
  47. 984 5 116 ... 0.660 35
  48. 985 2 118 ... 0.693 21
  49. 986 5 124 ... 0.220 38
  50. 987 5 112 ... 0.261 41
  51. 988 3 139 ... 0.402 22
  52. 989 10 148 ... 1.001 51
  53. 990 8 124 ... 0.687 52
  54. 991 7 114 ... 0.258 42
  55. 992 4 183 ... 0.212 36
  56. 993 0 146 ... 0.334 28
  57. 994 5 130 ... 0.956 37
  58. 995 10 125 ... 0.205 41
  59. 996 7 161 ... 0.165 47
  60. 997 1 181 ... 0.328 38
  61. 998 6 119 ... 1.318 33
  62. 999 7 103 ... 0.344 31
  63. [1000 rows x 8 columns]>

开始你的任务吧,祝你成功!

代码如下:

import pandas as pd
from imblearn.over_sampling import RandomOverSampler

data_url = "/data/workspace/myshixun/step1/diabetes.csv"
df = pd.read_csv(data_url)
X = df.iloc[:,0:8]
y=df.iloc[:,8]
###### Begin ######
# 随机过采样
ros = RandomOverSampler(random_state=0)
###### End ######
X_resampled, y_resampled = ros.fit_resample(X, y)
# 显示采样后的数据
print(X_resampled.info)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值