精华内容
下载资源
问答
  • 样本数据处理

    2013-12-06 21:06:49
    Stochastic identification of composite material properties from limited experimental databases Part II Uncertainty modelling
  • 上采样即增加少数类样本的数量,下采样即减少多数类样本以获取相对平衡的数据集。 SMOTE算法是用的比较多的一种上采样算法,能够提升训练精度 (1)对于少数类中每一个样本x,找出离它最近的...

    类别不平衡问题在很多场景中存在,例如欺诈检测,风控识别,在这些样本中,黑样本(一般为存在问题的样本)的数量一般远少于白样本(正常样本)。

    • 由于模型/算法从来没有充分地查看全部类别信息,对于实时不平衡的类别没有得到最优化的结果;
    • 由于少数样本类的观察次数极少,这会产生一个验证或测试样本的问题,即很难在类中进行表示;

    上采样(过采样)和下采样(负采样)策略是解决类别不平衡问题的基本方法之一。上采样即增加少数类样本的数量,下采样即减少多数类样本以获取相对平衡的数据集。

    SMOTE算法是用的比较多的一种上采样算法,能够提升训练精度

    • (1)对于少数类中每一个样本x,找出离它最近的N个样本,再随机生成0~1的数*欧式距离+x原本的距离,得到新的一个样本点
    • (2)根据样本不平衡比例设置一个采样比例以确定采样倍率N,
      在这里插入图片描述
      找出最靠近它的m个少类样本,再任选最临近的m个少类样本中的任意一点,在这两点上任选一点,这点就是新增的数据样本
      在这里插入图片描述
    # 使用imlbearn库中上采样方法中的SMOTE接口
    from imblearn.over_sampling import SMOTE
    # 定义SMOTE模型,random_state相当于随机数种子的作用
    smo = SMOTE(random_state=42)
    X_smo, y_smo = smo.fit_sample(X, y)
    
    展开全文
  • 处理样本不均衡数据

    2019-09-28 05:19:58
    处理样本不均衡数据一般可以有以下方法: 1、人为将样本变为均衡数据。 上采样:重复采样样本量少的部分,以数据量多的一方的样本数量为标准,把样本数量较少的类的样本数量生成和样本数量多的一方相同。 下采样...

    处理样本不均衡数据一般可以有以下方法:

    1、人为将样本变为均衡数据。

    上采样:重复采样样本量少的部分,以数据量多的一方的样本数量为标准,把样本数量较少的类的样本数量生成和样本数量多的一方相同。

    下采样:减少采样样本量多的部分,以数据量少的一方的样本数量为标准。

     

    2、调节模型参数(class_weigh,sample_weight,这些参数不是对样本进行上采样下采样等处理,而是在损失函数上对不同的样本加上权重)

    (A)逻辑回归中的参数class_weigh;

    在逻辑回归中,参数class_weight默认None,此模式表示假设数据集中的所有标签是均衡的,即自动认为标签的比例是1:1。所以当样本不均衡的时候,我们可以使用形如{标签的值1:权重1,标签的值2:权重2}的字典来输入真实的样本标签比例(例如{“违约”:10,“未违约”:1}),来提高违约样本在损失函数中的权重

    或者使用”balanced“模式,sklearn内部原理:直接使用n_samples/(n_classes * np.bincount(y)),即样本总数/(类别数量*y0出现频率)作为权重,可以比较好地修正我们的样本不均衡情况。

     

    (B)在SVM中使用SVC类的参数class_weigh和接口fit中可以设定的sample_weight:

    SVC类的参数class_weigh:

    对于class_weight,输入形如{"标签的值1":权重1,"标签的值2":权重2}的字典,则不同类别的C将会自动被设为不同的值:

    sklearn内部原理:标签的值为1的C:权重1 * C,标签的值为2的C:权重2*C 

    或者,可以使用“balanced”模式,sklearn内部原理:这个模式使用y的值自动调整与输入数据中的类频率成反比的权重为 n_samples/(n_classes * np.bincount(y)

    fit接口参数sample_weight:

    参数形式:数组,结构为 (n_samples, ),则模型参数C则变为,每个样本的权重 * C值,这样迫使分类器强调权重更大的样本。通常,较大的权重加在少数类的样本上,以迫使模型向着少数类的方向建模

    转载于:https://www.cnblogs.com/simpleDi/p/10235907.html

    展开全文
  • 数据样本不平衡问题处理方法

    千次阅读 2017-12-05 15:49:31
    很多分类学习方法针对都有一个共同的基本假设,即不同...这就使得对于处理不平衡数据有着及其重要的意义。 1.使用正确的评估指标 例如对于有998个的反例,但正例只有2个,那么学习方法只要返回一个永远把样本预测为

    很多分类学习方法针对都有一个共同的基本假设,即不同类别的训练数据数目相当,即使稍有差别,通常影响不大。但如果差别较大,就会对学习过程造成困扰。

    在现实场景中,比如银行欺诈,异常登录,网络入侵等领域中,大多数数据通常有不到1%少量但异常数据。这就使得对于处理不平衡数据有着及其重要的意义。

    1.使用正确的评估指标

    例如对于有998个的反例,但正例只有2个,那么学习方法只要返回一个永远把样本预测为反例的学习器,那么就可以达到99.8的精度,可是这样的学习器没有任何

    价值,因为它不能预测出任何正例。

    在这种情况下,可以使用如下所示的其他指标:

    精度/特异性:有多少个选定的相关实例

    调用/灵敏度:选择了多少个相关实例

    F1得分:精度和召回的谐波平均值

    MCC:观察和预测的二进制分类之间的相关系数

    AUC:正确率与误报率之间的关系

    这几个指标的原理是一样的,就是要兼顾精准率和召回率,使得两者达到一个平衡。

    2.重新采样训练集 



    欠采样通过减少冗余类的数量来平衡数据集。通过将所有样本保存在少数类中,并在多数类中随机选择相等数量的样本,可以检索平衡的新数据集以进一步建模。

    即去除一些反例使得正负样本数目接近,任何再进行学习;欠采样法若采用随机丢弃反例,可能丢失一些重要信息:

    欠采样法的代表性算法EasyEnsemble算法则是利用集成学习机制,将反例划分为若干个集合供不同学习器使用,这样对每个学习器来看都进行了 欠采样,但在全局来看却不会丢失重要信息。

    EasyEnsemble算法原理: 
    从多数类中有放回的随机采样n,每次选取与少数类数目近似的样本,那么可以得到n个样本集合记作{S1,S2,...,Sn},然后其中的每一份与少数类样本结合组成n训练样本{D1,D2,...,Dn},然后再每一个训练集上得到一个模型,最后取这n个模型的均值



    相反,当数据量不足时应采用过采样,尝试通过增加稀有样本的数量来平衡数据集。不是去除样本的多样性,而是通过使用诸如重复、自举或SMOTE等方法生成新样本(合成少数过采样技术)

    SMOTE算法

    SMOTE全称是Synthetic Minority Oversampling Technique即合成少数类过采样技术,它是基于随机过采样算法的一种改进方案,由于随机过采样采取简单复制样本的策略来增加少数类样本,这样容易产 生模型过拟合的问题,即使得模型学习到的信息过于特别(Specific)而不够泛化(General),SMOTE算法的基本思想是对少数类样本进行分 析并根据少数类样本人工合成新样本添加到数据集中。

    算法流程如下。

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

    请注意,一种重采样方法与另一种相比没有绝对的优势。这两种方法的应用取决于它适用的用例和数据集本身。

    3.以正确的方式使用K-fold交叉验证 

    需要注意的是,使用过采样方法来解决不平衡问题时,应适当地应用交叉验证。过采样会观察到稀有的样本,并根据分布函数自举生成新的随机数据。如果在过采样之后应用交叉验证,那么我们所做的就是将模型过度适应于特定的人工引导结果。这就是为什么在过采样数据之前应该始终进行交叉验证,就像实现特征选择一样。只有对数据进行重复采样,可以将随机性引入到数据集中,以确保不会出现过拟合问题。

    k-折交叉验证

    k-折交叉验证将样本集随机划分为k份,k-1份作为训练集,1份作为验证集,依次轮换训练集和验证集k次,验证误差最小的模型为所求模型。具体方法如下:

    随机将样本集S划分成k个不相交的子集,每个子集中样本数量为m/k个,这些子集分别记作

    对于每个模型,进行如下操作:

    for j=1 to k

    作为训练集,训练模型,得到相应的假设函数

    再将作为验证集,计算泛化误差

    计算每个模型的平均泛化误差,选择泛化误差最小的模型

    4.组合不同的重采样数据集



    生成通用模型的最简单方法是使用更多的数据。问题是,开箱即用的分类器,如逻辑回归或机森随林,倾向于通过丢弃稀有样例来推广。一个简单的最佳实现是建立n个模型,使用少数类的所有样本和数量充足类别的n个不同样本。假如您想要组合10个模型,需要少数类1000例,随机抽取10.000例多数类的样本。然后,只需将10000个样本分成10个块,训练出10个不同的模型。

    如果有大量数据,那么这种方法很简单,完美地实现水平扩展,因此可以在不同的集群节点上训练和运行模型。集合模型也趋于一般化,使得该方法容易处理。


    5.用不同比例重新采样

    以前的方法可以通过少数类和多数类之间的比例进行微调。最好的比例在很大程度上取决于所使用的数据和模型。但是,不是在整体中以相同的比例训练所有模型,合并不同的比例值得尝试。 所以如果训练了10个模型,对一个模型比例为1:1(少数:多数),另一个1:3甚至是2:1的模型是有意义的。 根据使用的模型可以影响一个类获得的权重。

     

    6.对多数类进行聚类


    Sergey Quora提出了一种优雅的方法。他建议不要依赖随机样本来覆盖训练样本的种类,而是将r个分组中的多数类进行聚类,其中r为r中的样本数。对于每个组,只保留质心(样本的中心)。然后该模型仅保留了少数类和样本质心来训练。

     

    7.设计自己的模型


    以前的所有方法都集中在数据上,并将模型作为固定的组件。但事实上,如果模型适用于不平衡数据,则不需要对数据进行重新采样。如果数据样本没有太多的倾斜,著名的XGBoost已经是一个很好的起点,因为该模型内部对数据进行了很好的处理,它训练的数据并不是不平衡的。但是再次,如果数据被重新采样,它只是悄悄进行。
    通过设计一个损失函数来惩罚少数类的错误分类,而不是多数类,可以设计出许多自然泛化为支持少数类的模型。例如,调整SVM以相同的比例惩罚未被充分代表的少数类的分类错误。

     

    展开全文
  • 样本不均衡数据处理

    2020-07-02 16:38:27
    当我们在做机器学习任务时,会经常遇到这样的数据集,两种样本的数量相差特别悬殊。这就会导致一个问题,在建模的时候,模型会特别注重数量多的样本,而忽视数量少的样本,觉得数量少的样本不够重要。生活中也有许多...

    当我们在做机器学习任务时,会经常遇到这样的数据集,两种样本的数量相差特别悬殊。这就会导致一个问题,在建模的时候,模型会特别注重数量多的样本,而忽视数量少的样本,觉得数量少的样本不够重要。生活中也有许多这样的例子,如在一份患者数据集当中,绝大多数患者都是正常的,只有极少数患者会得癌症。在一份银行贷款数据集中,绝大数用户都能按时还款,只有极少数用户会欠款不还。如果我们我们的模型只关注正常样本,而忽视了这些极少数的异常样本,那么这样的模型是没有什么实际价值的。
    bank.jpg

    银行贷款是一件犯错成本很高的事情,我们需要根据用户所提交的资料来判断是否给该用户贷款以及贷款的金额。如果一个用户能够正常还款,而我们没有给他贷款,我们损失的最多是贷款产生的利息;如果一个用户无法偿还贷款,而我们贷给他一大笔钱,那我们损失的将是整个本金。所以对于该情况下的模型而言,必须能够准确识别出这些极少数的异常样本。

    对于机器学习模型而言,重视多数样本,忽视少数样本,这是符合机器甚至是人的认知逻辑的。但是面对这样的问题,我们该如何处理呢?我们希望异常样本和正常样本的数量一样多,这样机器就会认为它们同等重要。要实现正常样本和异常样本数量一样多,有两种方案:

    1.下采样:

    从多数的正常样本中随机选出与少数样本一样多的数据,组成新的数据集,然后进行建模任务。这里,我们以银行贷款数据集作为例子,该数据集已经做过了脱敏(去敏感信息)处理。
    creditcard:链接:https://pan.baidu.com/s/1t5opuhFew5xVP2zpIwfmVA
    提取码:khj6
    具体实现过程:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    %matplotlib inline
    
    df = pd.read_csv('D:\\Py_dataset\\creditcard.csv')
    df.head()#打印出前五行数据进行观察
    
    print('该数据集规模:',df.shape)
    该数据集规模: (284807, 31)
    
    df['Class'].value_counts()
    0    284315
    1       492
    Name: Class, dtype: int64
    
    #样本分布可视乎
    df['Class'].value_counts(normalize = True).plot(kind = 'bar')
    

    前五行数据信息:
    creditcard data.png

    样本分布比例:
    imblanced data.png

    下采样方案代码实现:

    #异常样本的个数
    fraud_number = len(df[df.Class == 1])
    
    #异常样本的索引
    fraud_indices = df[df.Class == 1].index
    fraud_indices = np.array(fraud_indices)
    
    #正常样本的索引
    norm_indices = df[df.Class == 0].index
    norm_indices = np.array(norm_indices)
    
    #在所有正常样本中选出与异常样本个数一样多的样本索引
    undersample_norm_indices = np.random.choice(norm_indices,fraud_number,replace = False)
    undersample_norm_indices = np.array(undersample_norm_indices)
    
    #将下采样正常样本的索引和异常样本的索引进行组合
    undersample_indices = np.concatenate((fraud_indices,undersample_norm_indices))
    #下采样的样本
    undersample_data = df.loc[undersample_indices,:]
    
    #查看下采样正常样本和异常样本的分布
    print('下采样数据集的大小:',undersample_indices.shape[0])
    print('下采样数据集正样本的个数:',undersample_data[undersample_data.Class == 0].shape[0])
    print('下采样数据集负样本的个数:',undersample_data[undersample_data.Class == 1].shape[0])
    下采样数据集的大小: 984
    下采样数据集正样本的个数: 492
    下采样数据集负样本的个数: 492
    

    2.过采样:

    让异常样本的数量与正常样本一样多,这就需要对少数样本进行生成,这里的生成可不是复制,一模一样的样本是没有用的。最长用的就是SMOTE数据生成算法。

    SMOTE算法的流程如下:

    • 1.对于少数类中的每一个样本x,以欧式距离为标准,计算它到少数样本集中所有样本的距离,经过排序,得到其近邻样本。
    • 2.根据样本不平衡比例设置一个采样倍率N,对于每一个少数样本x,从其近邻依次选择N个样本,如图(a)所示。
    • 3.对于每一个选出的近邻样本,分别与原样本按照如下的公式构建新的样本数据。其中x为少数样本,x^ 为少数样本x的近邻样本,从0~1之间选择一个随机数乘以x与近邻样本x^ 的距离再加上x,即可得到x与x^之间的新样本,如图(b)所示。
      Xnew=X+rand(0,1)(X^X) X_{new}= X + rand(0,1) * (\hat X - X)
      SMOTE sample.jpg

    SMOTE算法代码实现:
    对于SMOTE算法,可以使用imblearn这个工具包来完成,首先需要在prompt命令行中安装该工具包(pip install imblearn)。对于SMOTE算法而言,只需要传入特征和标签即可得到一个大量的异常样本集。

    #提取标签
    labels = df['Class']
    #提取特征
    features = df.drop('Class',axis = 1)
    
    #导入SMOTE算法
    from imblearn.over_sampling import SMOTE
    oversampler = SMOTE(random_state = 0)
    os_features,os_labels = oversampler.fit_sample(features,labels)
    
    #查看原始数据集中正常和异常样本的分布
    print('原始数据集正常样本的个数:',df[df['Class'] == 0].shape[0])
    print('原始数据集异常样本的个数:',df[df['Class'] == 1].shape[0])
    print('原始数据集的长度:',df.shape[0])
    原始数据集正常样本的个数: 284315
    原始数据集异常样本的个数: 492
    原始数据集的长度: 284807
    
    #新构造的数据集中正常样本和异常样本的分布
    print('过采样数据集中正常样本的个数:',len(os_labels[os_labels == 0]))
    print('过采样数据集中异常样本的个数:',len(os_labels[os_labels == 1]))
    print('过采样数据集的长度:',len(os_labels))
    过采样数据集中正常样本的个数: 284315
    过采样数据集中异常样本的个数: 284315
    过采样数据集的长度: 568630
    

    从结果中可以看出异常样本的数量从492个变成了284315个,与正常样本的数量一致。

    这一小节,我们总结了处理样本不均衡数据集的两种方法,下采样和过采样。其中不涉及数据的预处理、建模以及模型评估等内容。在具体的任务当中,采样方案与数据预处理、建模、模型评估,参数优化构成了一个整体。

    3.采样方案总结:

    • 1.下采样方案比较简单,从多数样本中随机选择与少数样本一样多的数据,方便我们处理样本不均衡数据。但下采样方案牺牲了原有数据的丰富性,只使用了一小部分的数据。
    • 2.过采样方案,通过数据生成策略,使得异常样本的数量与正常样本一样多,方便我们处理样本不均衡数据。但生成的数据毕竟是不真实的,是通过一定的规则伪造出来的。
    • 3.下采样方案和过采样各有优缺点,在处理具体的任务时,需通过实验对比两种方案的优劣。
    展开全文
  • # 将数据拆分为训练集和测试集X_train,X_test,y_train,y_test = model_selection.train_test_split(X,y,test_size = 0.3, random_state = 1234)# 导入第三方包from imblearn.over_sampling import SMOTE# 运用SMOTE...
  • 原始数据中经常存在正负样本不均衡,比如正负样本数据比例为100:1. 常用的解决办法有: 1、数据处理 2、权重设置 3、集成的思想 4、转化成异常检测问题 5、利用深度学习:自编码器. 6、确定适合样本不...
  • 训练数据样本不均衡问题的处理方法 1 不均衡数据出现场景 1)搜索引擎的点击预测(网页上推送的广告很多,但被点击的概率往往非常小) 2)电子商务领域的商品推荐(网购平台会推送各种商品,但商品实际被购买的...
  • 两阶段数据处理算法可生成用于大数据分析的随机样本分区
  • 非平衡样本处理方法-SMOTE算法

    千次阅读 2018-03-27 00:39:44
    对于非平衡的数据样本处理方法正常有如下几种思路:1. 过采样;(会产生过拟合问题)2. 降采样;(丢失数据)3. 给正负样本分别赋予权重值,如:给样本数量少类给予相对高的权重比例值。或者样本数据多的类设定...
  • 深度学习数据标签处理的两种常见方式:LabelEncoder 和 OneHotEncoderOne-Hot 编码即独热编码,又称一位有效编码,其方法是使用N位状态寄存器来对N个状态进行编码,每个状态都由他独立的寄存器位,并且在任意时候,...
  • Liferay的7Cogs样本数据处理

    千次阅读 2009-11-25 13:37:00
    Liferay的7Cogs样本数据处理Liferay Portal从5.2版本开始,其绑定安装包(bundles)包含了一些样本数据来展示Liferay Portal的功能。比如有几个用户、组织和7Cogs的页面。如果你使用默认安装,你不应该删除管理员...
  • 数据预处理:样本非平衡处理

    千次阅读 2018-08-06 17:57:16
    非平衡数据会影响最后的评判效果,严重的会带来过拟合的效果,即模型总是把样本划分到样本量较多的那一种。为了让模型的评判更准确,我们需要对非平衡数据进行一定的处理,主要有以下几种方式: ...
  • 通过数据处理了解病快速掌握TGO的使用方法。
  • 宏基因组数据处理流程前言数据预处理质量控制 前言 衷心感谢这个开源互助的网络时代,能够让我在36岁高龄重新回到程序员的行列。在此特别感谢陈同和刘永鑫两位老师的生信交流平台,以及GitHub上各个开源工具的作者们...
  • keras已经在新版本中加入了 class_weight = 'auto'。 设置了这个参数后,keras会自动设置class weight让每类的sample对损失的贡献相等。例子如下: clf.fit([X_head_train,X_body_train], y_train_embedding, ...
  • 比赛当中数据处理有很多种,对图像数据的分析,和分析之后该如何加强比较低的ap类别,今天就讲解我最近使用的几种困难样本学习和专注低ap的数据增强后的处理。 困难样本就是loss比较大的,在每一个批次训练当中都...
  • SVM 处理高维小样本数据

    千次阅读 2017-12-28 19:40:28
    1.降维的时候 用PCA n_comments=0.99 保留99%的信息 2.SVM 分为SVC(分类)SVM(回归) 3.Leave One Out 进行训练集和测试集的划分 具体代码见 https://github.com/qqxze/SVM
  • 不均衡样本处理

    2019-03-28 18:10:48
    先获取数据为异常的个数,再在正常的数据中随机选择异常个数的数据,这样异常数据的个数就和正常数据的个数相同了,最后将选出来的正常样本和异常样本合起来 过采样 过采样就是通过样本生成策略使得,样本少的一方...
  • VOC格式样本处理

    2017-12-29 20:55:34
    现在很多训练样本都是VOC格式,而样本数据又需要分析处理。 写了一个小脚本对VOC格式的数据进行处理:# -*- coding:utf-8 -*- import cv2 import os import argparse import numpy as np from xml.etree import ...
  • 少数样本处理

    2018-05-13 09:42:54
    在检测少数样本时,如果我们采用正常的分类评价指标,则会发现,即使少数类全部分错,也能达到一个很高的正确率。所以我们在这种情况下需要另外的策略保证少数类得到足够的重视 1. 再抽样 1.1 对多数类随机欠采样...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,941
精华内容 2,776
关键字:

数据样本处理