首页 > 编程知识 正文

数值分析实验报告误差分析,数值分析误差例题

时间:2023-05-06 17:40:07 阅读:9476 作者:1955

春节前后总结了久违的问题,这一段时间在做NLP的文本分类(二分类)问题,遇到了很多问题。 分别如下。

1、数据打印问题。 运营人手不够,把兄弟们都累坏了。 是我分给兄弟们的任务,别打我。

打字问题主要是不熟悉业务,主观上经常弄错分类,因此分类时必须请运营方确定分类标准。

2、数据不均衡问题。 T:F为1:10,经过重新筛选样品后,T:F达到1:17。

数据真的很脏,没办法。

以前的blog样本失衡参考: https://blog.csdn.net/QQ _ 33472765/article/details/86561557

3、过拟合问题。

这个问题无论是什么任务都是不可避免的。

我们采用了添加dropout层的方法。

4、precision和recall问题。

这两个人真是死路一条,这就消除了他的长度。

5、罗斯在飞,这很尴尬!

原因是数据的问题,是在分割数据集时没有打乱数据造成的。

请注意,以后拆分数据集时,数据会立即开始拆分。 (eg )我们有10项核心业务的数据。 如果在不干扰数据的情况下划分数据集,则训练集中有前六个业务线示例,验证集中有两个业务线示例,测试集中也有两个业务线示例,它们是独立的。 )

* * * * * * * * * * * * * * * * *

这个blog主要是对smote算法的介绍和参考,当然是站在别人的肩膀上。

不平衡问题其实经常使用过采样和欠采样。 smote是对少量样本进行过采样(增强正样本(从现有正样本生成正样本) )。

原文地址: http://m.elecfans.com/article/620100.html

这次的主题是关于数据挖掘中常见的不平衡数据的处理,是关于不平衡数据的解决方案和原理,以及如何使用Python这一强大的工具实现平衡转换。

SMOTE算法介绍在实际应用中可能会遇到让读者头疼的问题。 那就是,分类问题中的类型因素变量可能存在严重的偏差。 也就是说,班级之间的比率可能严重失衡。 在欺诈问题上,欺诈类的观测在样本集中始终占少数; 在客户流失问题中,不忠实的客户往往也占很小一部分; 在某个营销活动的应对问题上,实际参与活动的客户也同样很少。

在数据存在严重不平衡的情况下,预测的结论也往往存在偏差。 也就是说,分类结果偏向于很多观测的类别。 对于这样的问题该怎么处理呢? 最简单粗暴的方法是构造1:1的数据,部分截断多种类型,或者对少种类型进行Bootstrap采样,或者过采样。 但是,这有问题。 在第一种方法中,截断的数据会导致一些隐式信息丢失。 在第二种方法中,有一个简单的副本,通过撤消采样,模型将发生拟合。

为了解决数据不平衡问题,2002年Chawla提出合成SMOTE算法,即少数过采样技术,是一种基于随机过采样算法的改进方案。 该技术是目前处理非平衡数据的常用手段,得到学术界和工业界的一致认可。 其次,简要说明该算法的理论思想。

SMOTE算法的基本思想是分析和模拟少数类别样本,并将新的人工模拟样本添加到数据集中,从而避免原始数据类别的严重失衡。 该算法的仿真过程采用KNN技术,仿真生成新样本的步骤如下。

对最近邻算法进行采样,为每个少数样本计算k个近邻;

从k个近邻中随机选取n个样本进行随机线性插值;

构建新的少数样本

合成新样本和原始数据,生成新的训练集;

为了让读者了解SMOTE算法实现新样本的仿真过程,可以参考下图和人工生成新样本的过程。

如上图所示,黑圈所示的样本数明显多于五角星所示的样本点,使用SMOTE算法进行增加少类样本点的仿真,需要经过以下几个步骤:

KNN算法用于选择k个最接近样本点x-1的同种样本点(),最接近的邻居可以是5 );

从最近的k个同种样本点中随机选择m个样本点,m的选择最终取决于期望的平衡率;

为每个随机选择的采样点构建新的采样点; 对于新采样点的结构,必须使用以下表达式:

其中,xi表示少数类别中的一个采样点。 (图中以五角星为代表的x1样品); xj表示从k近邻中随机选择的样本点j; rand (0,1 )表示生成0~1之间随机数。

将图中的采样点x1的观测值设为“2、3、10、7”,从图中的5个附近随机选择2个采样点,这些观测值分别为“1、1、5、8”和“2、1、7、6”

重复步骤1 )、2 )、3 ),重复少数类别

中的每一个样本xi,最终将原始的少数类别样本量扩大为理想的比例;

  通过SMOTE算法实现过采样的技术并不是太难,读者可以根据上面的步骤自定义一个抽样函数。当然,读者也可以借助于imblearn模块,并利用其子模块over_sampling中的SMOTE“类”实现新样本的生成。有关该“类”的语法和参数含义如下:

  ratio:用于指定重抽样的比例,如果指定字符型的值,可以是’minority’,表示对少数类别的样本进行抽样、’majority’,表示对多数类别的样本进行抽样、’not minority’表示采用欠采样方法、’all’表示采用过采样方法,默认为’auto’,等同于’all’和’not minority’;如果指定字典型的值,其中键为各个类别标签,值为类别下的样本量;

  random_state:用于指定随机数生成器的种子,默认为None,表示使用默认的随机数生成器;

  k_neighbors:指定近邻个数,默认为5个;

  m_neighbors:指定从近邻样本中随机挑选的样本个数,默认为10个;

  kind:用于指定SMOTE算法在生成新样本时所使用的选项,默认为’regular’,表示对少数类别的样本进行随机采样,也可以是’borderline1’、’borderline2’和’svm’;

  svm_estimator:用于指定SVM分类器,默认为sklearn.svm.SVC,该参数的目的是利用支持向量机分类器生成支持向量,然后再生成新的少数类别的样本;

  n_jobs:用于指定SMOTE算法在过采样时所需的CPU数量,默认为1表示仅使用1个CPU运行算法,即不使用并行运算功能;

  分类算法的应用实战

  本次分享的数据集来源于德国某电信行业的客户历史交易数据,该数据集一共包含条4,681记录,19个变量,其中因变量churn为二元变量,yes表示客户流失,no表示客户未流失;剩余的自变量包含客户的是否订购国际长途套餐、语音套餐、短信条数、话费、通话次数等。接下来就利用该数据集,探究非平衡数据转平衡后的效果。

  

 

  

  如上图所示,流失用户仅占到8.3%,相比于未流失用户,还是存在比较大的差异的。可以认为两种类别的客户是失衡的,如果直接对这样的数据建模,可能会导致模型的结果不够准确。不妨先对该数据构建随机森林模型,看看是否存在偏倚的现象。

  原始数据表中的state变量和Area_code变量表示用户所属的“州”和地区编码,直观上可能不是影响用户是否流失的重要原因,故将这两个变量从表中删除。除此,用户是否订购国际长途业务international_plan和语音业务voice_mail_plan,属于字符型的二元值,它们是不能直接代入模型的,故需要转换为0-1二元值。

  

  如上表所示,即为清洗后的干净数据,接下来对该数据集进行拆分,分别构建训练数据集和测试数据集,并利用训练数据集构建分类器,测试数据集检验分类器:

  

  如上结果所示,决策树的预测准确率超过93%,其中预测为no的覆盖率recall为97%,但是预测为yes的覆盖率recall却为62%,两者相差甚远,说明分类器确实偏向了样本量多的类别(no)。

 

  

  如上图所示,ROC曲线下的面积为0.795,AUC的值小于0.8,故认为模型不太合理。(通常拿AUC与0.8比较,如果大于0.8,则认为模型合理)。接下来,利用SMOTE算法对数据进行处理:

  

  如上结果所示,对于训练数据集本身,它的类别比例还是存在较大差异的,但经过SMOTE算法处理后,两个类别就可以达到1:1的平衡状态。下面就可以利用这个平衡数据,重新构建决策树分类器了:

  

  如上结果所示,利用平衡数据重新建模后,模型的准确率同样很高,为92.6%(相比于原始非平衡数据构建的模型,准确率仅下降1%),但是预测为yes的覆盖率提高了10%,达到72%,这就是平衡带来的好处。

  

  最终得到的AUC值为0.836,此时就可以认为模型相对比较合理了。

 

 

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