过采样:SMOTE算法
前言:在比赛中遇到关于样本不均衡问题,特地过来补补知识点!
1、smote原理
过采样的技术有非常多,最常见的就是随机过采样和SMOTE过采样。
随机过采样就是从少的类中进行随机进行采样然后拼接上去,这种效果很多时候和加权差不大。还有一种较常见的也是现在比赛中出现最多的采样方法,SMOTE采样。
SMOTE的示意图如下,
SMOTE算法的生成过程为:
- 对于少数类中每一个样本x,以欧氏距离为标准计算它到少数类样本集中所有样本的距离,得到其k近邻。
- 根据样本不平衡比例设置一个采样比例以确定采样倍率N,对于每一个少数类样本x,从其k近邻中随机选择若干个样本,假设选择的近邻为xn。
- 对于每一个随机选出的近邻xn,分别与原样本按照如下的公式构建新的样本
2、smote缺点
从算法中,我们可以发现,SMOTE采样其实就是生成样本之间的一些样本。
但是因为思路简单,我们也很容易就可以发现SMOTE算法的一些缺点。
- 在近邻选择时,K值的决定一般较难,可以枚举然后根据实验效果来定;
- 算法无法克服非平衡数据集的数据分布问题,容易产生分布边缘化问题。如果正样本都分布在边缘,我们通过采样正样本来生成样本,那么这样新生成的样本将也会全部在边缘,且会越来越边缘化,从而模糊了正类样本和负类样本的边界,而且使边界变得越来越模糊。这种边界模糊性,虽然使数据集的平衡性得到了改善,但有时也会加大了分类算法进行分类的难度.
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算法相关推荐
- 类型转换与采样 || SMOTE算法
Data Transformation Attribute Types Type Conversion 复杂的编码: 简单的编码: Sampling Imbalanced Datasets SMOT ...
- 数据预处理与特征工程—1.不均衡样本集采样—SMOTE算法与ADASYN算法
文章目录 一.第一种思路:平衡采样 1.SMOTE算法 2.SMOTE与RandomUnderSampler进行结合 3.Borderline-SMOTE与SVMSMOTE 4.ADASYN 5.平衡 ...
- smote算法_海量样本无从下手?这五种抽样算法分分钟搞定
全文共1854字,预计学习时长4分钟 数据科学是研究算法的学科.本文介绍了一些常见的用于处理数据的抽样技术. 图片来源:unsplash.com/@gndclouds 简单随机抽样 假设要从一个群体中 ...
- python过采样代码实现_过采样中用到的SMOTE算法
平时很多分类问题都会面对样本不均衡的问题,很多算法在这种情况下分类效果都不够理想.类不平衡(class-imbalance)是指在训练分类器中所使用的训练集的类别分布不均.比如说一个二分类问题,100 ...
- ML之LoR:利用信用卡数据集(欠采样{Nearmiss/Kmeans/TomekLinks/ENN}、过采样{SMOTE/ADASYN})同时采用LoR算法(PR和ROC评估)进行是否欺诈二分类
ML之LoR:利用布鲁塞尔的creditcard数据集进行采样处理(欠采样{Nearmiss/Kmeans/TomekLinks/ENN}.过采样{SMOTE/ADASYN})同时采用LoR算法(PR ...
- 过采样中用到的SMOTE算法
平时很多分类问题都会面对样本不均衡的问题,很多算法在这种情况下分类效果都不够理想.类不平衡(class-imbalance)是指在训练分类器中所使用的训练集的类别分布不均.比如说一个二分类问题,100 ...
- smote算法_SMOTE过采样框架+逻辑回归模型案例
一.SMOTE SMOTE(Synthetic Minority Oversampling Technique)是一种常用于缓解数据不均衡的算法.但是很多小伙伴表示在实际应用中有强烈的过拟合倾向.大多 ...
- SMOTE算法代码实现-机器学习
类别不平衡问题 类别不平衡问题,顾名思义,即数据集中存在某一类样本,其数量远多于或远少于其他类样本,从而导致一些机器学习模型失效的问题.例如逻辑回归即不适合处理类别不平衡问题,例如逻辑回归在欺诈检测问 ...
- Python:SMOTE算法——样本不均衡时候生成新样本的算法
Python:SMOTE算法 直接用python的库, imbalanced-learn imbalanced-learn is a python package offering a number ...
- 当常规的算法都山穷水尽之后,你可以试试python中的SMOTE算法
点击"阅读原文"直接打开[北京站 | GPU CUDA 进阶课程]报名链接 沙韬伟,苏宁易购高级算法工程师. 曾任职于Hewlett-Packard.滴滴出行. 数据学院特邀讲师. ...
最新文章
- javascript的Array对象
- 部署tomcat环境
- Qt中的QRadioButton
- poj1673 EXOCENTER OF A TRIANGLE
- el表达式与jstl的用法
- 机器学习06神经网络--学习
- html 浮动窗口置顶,jQuery简单实现页面元素置顶时悬浮效果示例
- 信息学奥赛一本通 1153:绝对素数
- 【学堂在线数据挖掘:理论方法笔记】第七天(4.1)
- django配置文件
- sequelize 连接2个数据库_Sequelize如何同步判断数据库连接及同步成功
- 如何在github用git Pages上传自己在本地做的项目?
- Windows 命令使用之 ping 命令
- [偏相关分析]偏相关系数计算及假设检验
- 多元函数的泰勒展开Talor以及黑塞矩阵
- 【论文】如何下载SCI论文
- 常见笔顺错误的字_原来这么多年,我写字的笔顺一直都是错的
- AirPlay屏幕镜像技术-概述-P1
- 阿里云DDoS防护是如何工作的?
- c#时分秒毫秒微妙_c# - 将秒转换为(小时:分钟:秒:毫秒)时间的最佳方法是什么?...