前言:在比赛中遇到关于样本不均衡问题,特地过来补补知识点!

1、smote原理

过采样的技术有非常多,最常见的就是随机过采样和SMOTE过采样。
随机过采样就是从少的类中进行随机进行采样然后拼接上去,这种效果很多时候和加权差不大。还有一种较常见的也是现在比赛中出现最多的采样方法,SMOTE采样。
SMOTE的示意图如下,

SMOTE算法的生成过程为:

  1. 对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。
  2. 根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为xn。
  3. 对于每一个随机选出的近邻xn,分别与原样本按照如下的公式构建新的样本

2、smote缺点

从算法中,我们可以发现,SMOTE采样其实就是生成样本之间的一些样本

但是因为思路简单,我们也很容易就可以发现SMOTE算法的一些缺点。

  1. 在近邻选择时,K值的决定一般较难,可以枚举然后根据实验效果来定;
  2. 算法无法克服非平衡数据集的数据分布问题,容易产生分布边缘化问题。如果正样本都分布在边缘,我们通过采样正样本来生成样本,那么这样新生成的样本将也会全部在边缘,且会越来越边缘化,从而模糊了正类样本和负类样本的边界,而且使边界变得越来越模糊。这种边界模糊性,虽然使数据集的平衡性得到了改善,但有时也会加大了分类算法进行分类的难度.

3、Python实现smote

import random
from sklearn.neighbors import NearestNeighbors
import numpy as npclass Smote:"""SMOTE过采样算法.Parameters:-----------k: int选取的近邻数目.sampling_rate: int采样倍数, attention sampling_rate < k.newindex: int生成的新样本(合成样本)的索引号."""def __init__(self, sampling_rate=5, k=5):self.sampling_rate = sampling_rateself.k = kself.newindex = 0def fit(self, X, y=None):if y is not None:negative_X = X[y==0]X = X[y==1]n_samples, n_features = X.shape# 初始化一个矩阵, 用来存储合成样本self.synthetic = np.zeros((n_samples * self.sampling_rate, n_features))# 找出正样本集(数据集X)中的每一个样本在数据集X中的k个近邻knn = NearestNeighbors(n_neighbors=self.k).fit(X)for i in range(len(X)):k_neighbors = knn.kneighbors(X[i].reshape(1,-1), return_distance=False)[0]# 对正样本集(minority class samples)中每个样本, 分别根据其k个近邻生成# sampling_rate个新的样本self.synthetic_samples(X, i, k_neighbors)if y is not None:return ( np.concatenate((self.synthetic, X, negative_X), axis=0), np.concatenate(([1]*(len(self.synthetic)+len(X)), y[y==0]), axis=0) )return np.concatenate((self.synthetic, X), axis=0)# 对正样本集(minority class samples)中每个样本, 分别根据其k个近邻生成sampling_rate个新的样本def synthetic_samples(self, X, i, k_neighbors):for j in range(self.sampling_rate):# 从k个近邻里面随机选择一个近邻neighbor = np.random.choice(k_neighbors)# 计算样本X[i]与刚刚选择的近邻的差diff = X[neighbor] - X[i]# 生成新的数据self.synthetic[self.newindex] = X[i] + random.random() * diffself.newindex += 1X=np.array([[1,2,3],[3,4,6],[2,2,1],[3,5,2],[5,3,4],[3,2,4]])
y = np.array([1, 1, 1, 0, 0, 0])
smote=Smote(sampling_rate=1, k=5)
print(smote.fit(X))

4 调包使用及调参

主要可参考——》官网链接

这里罗列下几个重要的参数:
k_neighbors:int或object,默认= 5

对于smote的调参主要是调k_neighbors参数,在一定程度上会影响模型的精度

过采样:SMOTE算法相关推荐

  1. 类型转换与采样 || SMOTE算法

    Data Transformation Attribute Types Type Conversion 复杂的编码:  简单的编码: Sampling Imbalanced Datasets SMOT ...

  2. 数据预处理与特征工程—1.不均衡样本集采样—SMOTE算法与ADASYN算法

    文章目录 一.第一种思路:平衡采样 1.SMOTE算法 2.SMOTE与RandomUnderSampler进行结合 3.Borderline-SMOTE与SVMSMOTE 4.ADASYN 5.平衡 ...

  3. smote算法_海量样本无从下手?这五种抽样算法分分钟搞定

    全文共1854字,预计学习时长4分钟 数据科学是研究算法的学科.本文介绍了一些常见的用于处理数据的抽样技术. 图片来源:unsplash.com/@gndclouds 简单随机抽样 假设要从一个群体中 ...

  4. python过采样代码实现_过采样中用到的SMOTE算法

    平时很多分类问题都会面对样本不均衡的问题,很多算法在这种情况下分类效果都不够理想.类不平衡(class-imbalance)是指在训练分类器中所使用的训练集的类别分布不均.比如说一个二分类问题,100 ...

  5. ML之LoR:利用信用卡数据集(欠采样{Nearmiss/Kmeans/TomekLinks/ENN}、过采样{SMOTE/ADASYN})同时采用LoR算法(PR和ROC评估)进行是否欺诈二分类

    ML之LoR:利用布鲁塞尔的creditcard数据集进行采样处理(欠采样{Nearmiss/Kmeans/TomekLinks/ENN}.过采样{SMOTE/ADASYN})同时采用LoR算法(PR ...

  6. 过采样中用到的SMOTE算法

    平时很多分类问题都会面对样本不均衡的问题,很多算法在这种情况下分类效果都不够理想.类不平衡(class-imbalance)是指在训练分类器中所使用的训练集的类别分布不均.比如说一个二分类问题,100 ...

  7. smote算法_SMOTE过采样框架+逻辑回归模型案例

    一.SMOTE SMOTE(Synthetic Minority Oversampling Technique)是一种常用于缓解数据不均衡的算法.但是很多小伙伴表示在实际应用中有强烈的过拟合倾向.大多 ...

  8. SMOTE算法代码实现-机器学习

    类别不平衡问题 类别不平衡问题,顾名思义,即数据集中存在某一类样本,其数量远多于或远少于其他类样本,从而导致一些机器学习模型失效的问题.例如逻辑回归即不适合处理类别不平衡问题,例如逻辑回归在欺诈检测问 ...

  9. Python:SMOTE算法——样本不均衡时候生成新样本的算法

    Python:SMOTE算法 直接用python的库, imbalanced-learn imbalanced-learn is a python package offering a number ...

  10. 当常规的算法都山穷水尽之后,你可以试试python中的SMOTE算法

    点击"阅读原文"直接打开[北京站 | GPU CUDA 进阶课程]报名链接 沙韬伟,苏宁易购高级算法工程师. 曾任职于Hewlett-Packard.滴滴出行. 数据学院特邀讲师. ...

最新文章

  1. javascript的Array对象
  2. 部署tomcat环境
  3. Qt中的QRadioButton
  4. poj1673 EXOCENTER OF A TRIANGLE
  5. el表达式与jstl的用法
  6. 机器学习06神经网络--学习
  7. html 浮动窗口置顶,jQuery简单实现页面元素置顶时悬浮效果示例
  8. 信息学奥赛一本通 1153:绝对素数
  9. 【学堂在线数据挖掘:理论方法笔记】第七天(4.1)
  10. django配置文件
  11. sequelize 连接2个数据库_Sequelize如何同步判断数据库连接及同步成功
  12. 如何在github用git Pages上传自己在本地做的项目?
  13. Windows 命令使用之 ping 命令
  14. [偏相关分析]偏相关系数计算及假设检验
  15. 多元函数的泰勒展开Talor以及黑塞矩阵
  16. 【论文】如何下载SCI论文
  17. 常见笔顺错误的字_原来这么多年,我写字的笔顺一直都是错的
  18. AirPlay屏幕镜像技术-概述-P1
  19. 阿里云DDoS防护是如何工作的?
  20. c#时分秒毫秒微妙_c# - 将秒转换为(小时:分钟:秒:毫秒)时间的最佳方法是什么?...

热门文章

  1. 基于Android平台的x264的移植与应用(一):移植篇
  2. 中国管理实践的大趋势
  3. 开源微博系统Xweibo的一些主要函数注释
  4. 新浪微博开放平台_Xweibo,修改设置…
  5. win7怎么把计算机图标下的箭头掉,Win7桌面图标有小箭头怎么去掉?Win7去除桌面图标小箭头的方法...
  6. Android文件下载
  7. Javascript程序运行环境安装
  8. Protel99se中PCB放置焊盘和设置焊盘大小
  9. hbase的快速下载
  10. 开心电视助手v3.8最新绿色版,安卓设备远程管理工具神器