首页 > 编程知识 正文

PLS模型,kafka数据倾斜怎么办

时间:2023-05-06 09:01:55 阅读:159582 作者:4389

不平衡数据普遍存在于金融危机管理、反欺诈、广告推荐、医疗诊断中。 一般来说,不平衡数据的正负样本比例差异很大,如Kaggle竞赛中的桑坦德银行交易预测和IEEE-CIS欺诈检测数据。 对于模型来说,用不平衡数据构建的模型偏向于更多类别的样本的标签,实际价值较低。 如下图所示,是模型在不平衡数据下预测的概率分布。

不平衡数据的处理方法一般是http://www.Sina.com/(under-sampling )和http://www.Sina.com/),在算法中增加不同种类的http://www.Sina

1 smote http://www.Sina.com/: http://xueshu.Baidu.com/user center/paper/show? paper id=28300870422 e 64 FD 0a c 338860 CD 0010 a site=xueshu _ se

合成33558 www.Sina.com/(syntheticminorityoversamplingtechnique )少数类过采样技术基于随机采样改进的过采样算法实现过程如下图所示。

首先,从少量样本中选择样本xi。 接着,在采样因子n中,从xi的k近邻中随机选择n个样本xsqdxtz。 最后,在xsqdxtz和xi之间依次随机合成新样本,合成方式如下:

x=xI(xzIxI ) x_{n}=x_{I} ) beta (times ) left ) x_{sqdxtz}-x_{I} ) right ) xn=Xi) Xi

SMOTE的实现很简单,但其弊端也很明显。 SMOTE对所有少数样本都一视同仁,没有考虑近邻样本的分类信息,导致出现样本混叠现象,分类效果不佳。

欠采样

Python库包含SMOTE、SMOTEENN、ADASYN和KMeansSMOTE等算法的Imblearn专门用于处理不平衡数据。 以下是SMOTE在Imblearn中使用的情况。

fromcollectionsimportcounterfromsklearn.datasetsimportmake _ classificationfromimblearn.over _ samplingimportsmotex,y class_sep=2,weights=[ 0.1,0.9 ],n_informative=2,n_redunndative n_samples=100, random_state=10 ) random_statate y ) print (' originaldatasetshape % s ' % counter (y ) ) sm=smote ) random _ rata _ rate (Rey ) resate (resate (resate (resate )

2 borderline smote http://www.Sina.com/: http://xueshu.Baidu.com/userc

enter/paper/show?paperid=f95a4bd0843c4c6389cc878bc1d525a2&site=xueshu_se
  Borderline SMOTE是在SMOTE基础上改进的过采样算法,该算法仅使用边界上的少数类样本来合成新样本,从而改善样本的类别分布。
  Borderline SMOTE采样过程是将少数类样本分为3类,分别为SafeDangerNoise,具体说明如下。最后,仅对表为Danger的少数类样本过采样。
  Safe,样本周围一半以上均为少数类样本,如图中点A
  Danger:样本周围一半以上均为多数类样本,视为在边界上的样本,如图中点B
  Noise:样本周围均为多数类样本,视为噪音,如图中点C

  Borderline-SMOTE又可分为Borderline-SMOTE1和Borderline-SMOTE2,Borderline-SMOTE1在对Danger点生成新样本时,在K近邻随机选择少数类样本(与SMOTE相同),Borderline-SMOTE2则是在k近邻中的任意一个样本(不关注样本类别)

Borderline-SMOTE Python使用

from collections import Counterfrom sklearn.datasets import make_classificationfrom imblearn.over_sampling import BorderlineSMOTEX, y = make_classification(n_classes=2, class_sep=2, weights=[0.1, 0.9], n_informative=2, n_redundant=0, flip_y=0, n_features=2, n_clusters_per_class=1, n_samples=100, random_state=9)print('Original dataset shape %s' % Counter(y))sm = BorderlineSMOTE(random_state=42,kind="borderline-1")X_res, y_res = sm.fit_resample(X, y)print('Resampled dataset shape %s' % Counter(y_res))

Borderline SMOTE 采样前后对比

3 ADASYN

  论文地址:http://xueshu.baidu.com/usercenter/paper/show?paperid=13cbcaf6a33e0e3df06c0c0c421209d0&site=xueshu_se
  ADASYN (adaptive synthetic sampling)自适应合成抽样,与Borderline SMOTE相似,对不同的少数类样本赋予不同的权重,从而生成不同数量的样本。具体流程如下:

  步骤1:计算需要合成的样本数量,公式如下:

G = ( m l − m s ) × β G=left ( m_{l}-m_{s} right )times beta G=(ml​−ms​)×β

  其中,ml为多数类样本数量,ms为少数类样本数量,β∈[0,1]随机数,若β等于1,采样后正负比例为1:1。
  步骤2:计算K近邻中多数类占比,公式如下:

r i = Δ i / K r_{i}=Delta _{i}/K ri​=Δi​/K

  其中,∆i为K近邻中多数类样本数,i = 1,2,3,……,ms
  步骤3:对ri标准化,公式如下:

r ^ i = r i / ∑ i = 1 m s r i hat{r}_{i}=r_{i}/sum_{i=1}^{m_{s}}r_{i} r^i​=ri​/i=1∑ms​​ri​

  步骤4:根据样本权重,计算每个少数类样本需生成新样本的数目,公式如下:

g = r ^ i × G g=hat{r}_{i}times G g=r^i​×G

  步骤5:根据g计算每个少数样本需生成的数目,根据SMOTE算法生成样本,公式如下:

s i = x i + ( x z i − x i ) × λ s_{i}=x_{i}+left ( x_{sqdxtz}-x_{i} right )times lambda si​=xi​+(xsqdxtz​−xi​)×λ

  其中,si为合成样本,xi是少数类样本中第i个样本,xsqdxtz是xi的K近邻中随机选取一个少数类样本 λ∈[0,1]的随机数。

ADASYN Python使用

from collections import Counterfrom sklearn.datasets import make_classificationfrom imblearn.over_sampling import ADASYNX, y = make_classification(n_classes=2, class_sep=2, weights=[0.1, 0.9], n_informative=3, n_redundant=1, flip_y=0, n_features=20, n_clusters_per_class=1, n_samples=1000, random_state=10)print('Original dataset shape %s' % Counter(y))ada = ADASYN(random_state=42)X_res, y_res = ada.fit_resample(X, y)print('Resampled dataset shape %s' % Counter(y_res))

ADASYN 采样前后对比

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。