精华内容
下载资源
问答
  • 目前推荐系统中给用户进行推荐大部分都是基于CTR预估来做的,CTR预估中很重要的一环便是正负样本的选择,那么不同业务场景下我们如何定义正负样本、如何控制正负样本的比例、正负样本选择有哪些技巧?虽然这些只是...

    目前推荐系统中给用户进行推荐大部分都是基于CTR预估来做的,CTR预估中很重要的一环便是正负样本的选择,那么不同业务场景下我们如何定义正负样本、如何控制正负样本的比例、正负样本选择有哪些技巧?虽然这些只是模型训练中的一环,但却也扮演着重要的角色。

    这篇文章简单聊一下上边提到的问题,如何你对这有什么想法和意见,欢迎在评论区留言,一起沟通。

    分析业务场景

    不同业务场景下对应的kpi也是不同的,那么模型训练的目标也是不一致的,比如kpi是点击率,那么模型训练的目的就是增加推荐的准确性,提升用户的准确率;如果kpi是交易额,那么模型训练的目的就要考虑用户的下单率和物品单价,不能仅仅考虑点击。

    但是有些kpi指标并不太容易直接量化成模型训练的目标,比如内容平台的用户停留时长、用户阅读率、用户活跃度度等,但可以通过对业务指标进行分析,简介量化成模型训练的目标。之前做过一段时间用户消息push,个性化消息的推送目标是吸引用户进入app,从而增加日活、月活,这个时候就是考虑的点击,因为用户一旦点击了,便可以进入平台,转变成活跃用户。

    所以在做推荐的时候,要搞清楚出我们的业务目标是什么,从而制定合适的模型目标,而不是盲目追寻大众,看大家都在做ctr,都是用点击率进行模型训练的,就盲目的使用点击率。

    正负样本的定义

    一般使用skip-above思想,即用户点过的Item之上,没有点过的Item作为负例 (假设用户是从上往下浏览Item,且会把正负样本选择限定在同一个业务场景中)。

    对于视频或者音频节目而言,分成几个种类:

    • 喜欢的节目:用户当天播放过的节目
    • 历史的节目:用户在过去的一段时间内播放过所有节目
    • 曝光的节目:一段时间内对用户曝光的节目。

    由此,正样本可以定义为用户当天播放过的节目,也就是“喜欢”。负样本则有两种选择方案:

    • (1)负样本指的是对用户曝光过的节目,但是用户至始至终都没有播放过,也就是说该节目并不在“历史”和“喜欢”两个分类里面
    • (2)负样本指的是在整个抽样的池子里面,但是用户至始至终都没有播放过,也就是说该节目并不在“历史”和“喜欢”这两个分类里面

    但是一般情况下,我们会选择给用户曝光但是用户没有进行播放的节目作为负阳本。

    对于电商平台而言,如果kpi的指标是GMV,那么我们的正负样本的选择则会很大的不同。点击率预估时正样本可以是用户点击的商品,负样本可以是给用户曝光但是用户没有点击的商品。目标是GMV时,我们要在保证用户点击的情况下促进用户进行下单,继而增加GMV,这时候正样本如果还是点击的话就没有什么意义了,简单讲,正样本可以是用户点击且下单的商品,负样本可以是用户点击但没有下单的商品。但这时候又会引出另外一个问题:样本稀缺。

    阿里之前有一篇论文讲述就是上边提到的问题的解决算法,感兴趣的可以阅读:
    【论文】Entire Space Multi-Task Model

    正负样本的选择技巧

    • 对于正样本的选择不能简单认为用户产生行为就是证样本,比如用户误点击,当然对于视频类平台,如果用户被视频标题和图片吸引,产生观看行为但是观看之后发现并不是想看的,这时候就会退出,如果单纯的认为观看就是正样本,也会引起模型训练的误差,此时有效的做法可以是设定一定的阀值或者一定的观看比例才能够反映用户是否喜欢该节目。比如YouTube的视频节目,不止有“订阅”,“添加到”,“分享”,还有能够反映用户喜好的“like”(顶一下),“dislike”(踩一下)。有的时候顶一下可能不足以反映用户是否喜欢,但是踩一下基本上可以确定该用户不喜欢这个视频节目。除了“like”和“dislike”,对于其余的一些APP或者视频网站,还会有其余的操作,比方说评论,分享,收藏,下载等操作。这些操作从某些层面上也会看出用户是否喜欢该节目。

    • 无论是什么平台,用户的活跃度分布都是一个长尾分布,越活跃的用户对应的人数越少,但是其所占的行为越多。这种情况下,如果不考虑用户活跃度去筛选正负样本,难免活跃用户所占的权重就会增大,此时有效的解决办法是针对每个用户提取相同的正负样本。

    • 《美团机器学习实战》一书提到,它们在 feed 场景中采用了Skip Above的方式来提高效果。具体来讲就是根据用户最后一次点击行为的位置,过滤掉最后一次点击之后的展示,可以认为用户没有看到,也可以保留最后一次点击之后的少数几个。笔者认为也可以进行尝试。

    • 针对同一个内容在不同时间对同一个用户曝光多次的情况,这时候训练集中可能会出现同一用户对同一内容点击与不点击并存的情况,如果多次曝光的间隔非常短,考虑只使用其中的一次曝光数据。

    • 平台内会存在一些恶意行为的用户,此时可以进行相应的识别,模型训练时去掉这些恶意用户的行为数据。

    • 补充一点划分训练集和测试集的两种方法:

      • 随机拆分(比如整个样本集拆分为训练集和测试集)
      • 按时间维度拆分(比如样本集 按天分区,前5天的数据作为训练集,接下来2天的数据作为测试集)

    正负样本的比例选择

    正负样本不均衡问题一直伴随着算法模型存在,样本不均衡会导致:对比例大的样本造成过拟合,也就是说预测偏向样本数较多的分类。这样就会大大降低模型的范化能力。往往accuracy(准确率)很高,但auc很低。

    正负样本不均衡问题的解决办法有三类:

    • 采样处理——过采样,欠采样
    • 类别权重——通过正负样本的惩罚权重解决样本不均衡的问题。在算法实现过程中,对于分类中不同样本数量的类别分别赋予不同的权重
    • 集成方法——使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集,从而训练出多个模型。例如,在数据集中的正、负样本分别为100和10000条,比例为1:100,此时可以将负样本随机切分为100份,每份100条数据,然后每次形成训练集时使用所有的正样本(100条)和随机抽取的负样本(100条)形成新的训练数据集。如此反复可以得到100个模型。然后继续集成表决

    当然常用的是上述集成方法,但是不是直接进行使用,试想训练100个模型进行表决,离线会很麻烦,而且线上使用也不现实。

    所以通常会进行修改使用,一般情况下在选择正负样本时会进行相关比例的控制,假设正样本的条数是N,则负样本的条数会控制在2N或者3N,即遵循1:2或者1:3的关系,当然具体的业务场景下要进行不同的尝试和离线评估指标的对比。

    当然上述的前提是正负样本的选择。好了至此,完事,如果你看到了这里,麻烦点个在看,可以的话进行分享,让更多的人看到,毕竟知识是没有界限的。


    【技术服务】详情点击查看: https://mp.weixin.qq.com/s/PtX9ukKRBmazAWARprGIAg

    在这里插入图片描述
    扫一扫关注「搜索与推荐Wiki」!号主「专注于搜索和推荐系统,以系列分享为主,持续打造精品内容!

    展开全文
  • 文本分类——常见分类模型

    万次阅读 多人点赞 2018-11-06 17:37:56
      文本分类方法模型主要分为两个大类,一类是基于规则的分类模型;另一类是基于概率统计的模型。 基于规则的模型   基于规则的分类模型相对简单,易于实现。它在特定领域的分类往往能够取得较好的效果。相对于...

      文本分类方法模型主要分为两个大类,一类是基于规则的分类模型;另一类是基于概率统计的模型。

    基于规则的模型

      基于规则的分类模型相对简单,易于实现。它在特定领域的分类往往能够取得较好的效果。相对于其它分类模型来说,基于规则的分类模型的优点就是时间复杂度低、运算速度快。在基于规则的分类模型中,使用许多条规则来表述类别。类别规则可以通过领域专家定义,也可以通过计算机学习获得。
      决策树就是一种基于训练学习方法获取分类规则的常见分类模型,它建立对象属性与对象值之间的一种映射。通过构造决策树来对未标注文本进行分类判别。常用的决策树方法包括CART 算法、ID3、C4.5、CHAID 等。
      在Web文本应用领域普遍存在着层级形式,这种层级形式可以通过一颗决策树来描述。决策树的根节点表示整个数据集空间,每个子节点是依据单一属性做出的分支判定,该判定将数据集分成两个或两个以上的分支区域。决策树的叶子节点就是相应类别的数据集合。
      决策树分类模型的一般构建过程:
      1.首先将训练数据分成两部分,一部分(训练集A)用于构建初始决策树,另一部分(训练集B)用来对决策树进行剪枝;
      2.以训练集A作为树的根节点,找出变异量最大的属性变量作为高层分割标准;以训练集A作为树的根节点,找出变异量最大的属性变量作为高层分割标准;
      3.通过对训练集A的学习训练构建一颗初始决策树;通过对训练集A的学习训练构建一颗初始决策树;
      4.再通过训练集B对初始决策树进行剪枝操作;再通过训练集B对初始决策树进行剪枝操作;
      5.一般还要通过递归的过程来构建一颗稳定的决策树,根据预测结果的正确率及未满足条件,则再对决策树进行分支或剪枝。
      决策树的构建过程一般是自上而下的,剪枝的方法有多种,但是具有一致目标,即对目标文本集进行最优分割。决策树可以是二叉树也可以是多叉树。

    基于概率的模型

      假设未标注文档为d,类别集合为C={c1,c2,…,cm} ,概率模型分类是对1≤i≤n 求条件概率模型P(ci|d) ,将与文档d条件概率最大的那个类别作为该文档的输出类别。其中朴素贝叶斯分类器是应用最为广泛的概率分类模型。
      朴素贝叶斯分类的基本思想是利用词组与类别的联合概率来估计给定文档的类别概率。基于贝叶斯分类器的贝叶斯规则如式:

    其中:C和D为随机变量。
      贝叶斯规则计算文档d属于每一个类别的可能性 P(ci|d),然后将文档d标注为概率最大的那一类。对文档d的贝叶斯分类如下式

      先验概率P(ci) 的估计很简单,计算如下式所示:

      其中: N(ci) 表示训练集中类别ci 的样本数量,N为训练集样本总数。 本质上表示训练集样例中类别ci 的比例。

      概率P(d|ci) 计算相对复杂,它首先基于一个贝叶斯假设:文档d为词组元素的集合,集合中词组(元素)之间相互独立。由于文档的表示简化了,所以这也就是朴素(Naïve) 的由来之一。事实上,词组之间并不是相互独立的。虽然这是一种假设独立性,但是朴素贝叶斯还是能够在分类任务中表现出很好的分类效果和鲁棒性。这一假设简化了联合概率的计算,它允许条件概率的乘机来表示联合概率。P(d|ci) 的计算式:

    其中:tk 表示含有n项词组的词组表vi 中的一个词组。因此,估计P(d|ci) 变为估计词组表v中的每一个词组在每一个类别下的概率P(tk|ci)
      概率的估计与分类结果非常依赖于事件空间的选择。下面介绍两种卡内基梅隆大学McCallum 和 Nigam 提出的事件空间模型,并说明相应的P(tk|ci) 是如何估计的。
      1) 多重伯努利模型
      多重伯努利(Multiple-Bernoulli)事件空间是一种布尔独立模型的事件空间,为每一个词组tk 建立一个二值随机变量。最简单的方式就是使用最大似然估计来估计概率,即式:

    其中: df(tk|ci) 表示类别ci 含有词组tk 的样本数量。
      虽然上式来估计概率很简单,但是存在“零概率”问题,真实应用是不可能的。这就需要采用平滑技术来克服“零概率”问题。贝叶斯平滑是一种常用的平滑估计技术。多重伯努利模型的平滑估计如下式所示:

    其中: αkβk 是依赖与词组tk 的参数。一种常见的参数选择方式是αk =1且βk* =0,得到如下概率估计公式

      多重伯努利模型仅仅考虑词组是否出现,而没有考虑出现的多少,而词频也是一个重要分类信息。下面介绍加入词频信息的多项式模型。
      2) 多项式模型
      多项式(Multinomial)时间空间与多重伯努利事件空间类似,但是多项式事件空间假设词组的出现次数是零次或多次,而不是出现与否。
      多项式模型的最大似然估计计算如式:

    其中: tf(tk|ci) 表示训练集中类别ci 中词组tk 出现的次数。 |ci|表示训练集类别ci 中的总词数。加入平滑估计的概率如式:

    这里 αk 是依赖于词组tk 的参数。对所有词组tk* 取αk =1是一种常见选择。这就导致概率估计:

    实际应用中,多项式模型已经表明优于多重伯努利模型。

    基于几何的模型

      使用向量空间模型表示文本,文本就被表示为一个多维的向量,那么它就是多维空间的一个点。通过几何学原理构建一个超平面将不属于同一个类别的文本区分开。最典型的基于几何学原理的分类器是支持向量机(SVM),最简单的SVM应用就是二值分类,就是常见的正例和反例。SVM的目标就是构建能够区分正例和反例的N维空间决策超平面。
      SVM是上世纪九十年代中期,由Vapnik等人逐渐完善的统计机器学习理论。该模型主要用来解决模式识别中的二分类问题,在文本分类、手写识别、图像处理等领域都取得了很好的分类效果。其基本思想就是在向量空间中找到一个决策超平面,该决策超平面能够最大限度地将正例和反例区分开来。在一定的范围内,决策超平面是可以平行移动的,这种平移不会造成训练集数据的分类错误。但是为了获取在未知样本的分类预测中的稳定性,要求分类超平面距离两类样本的距离尽可能大,也就是说,超平面尽可能位于边界区域的中心位置。
      SVM采用计算学习理论的结构风险最小化(Structural Risk Minimization, SRM)原则。其主要思想:以支持向量(Support Vector, SV)作为训练集的基础,在N维空间内寻找能将训练集样本分成两类,并且具有最大边缘(Margin)值的最优超平面(Optimal Separating Hyper-plane,OSH),来达到最大的分类正确率。
      SVM选择最大化边缘距离的分类决策超平面,这个选择不仅直观,而且也得到了理论的支持。对于线性可分数据的超平面以及支持向量的图形解释如图:

    线性可分数据支持向量机示意图

    其中:左上方为正例区域,右下方为反例区域,中间实线为w定义的决策超平面,箭头所示为边缘,虚线方框内的样本表示支持向量。边缘(Margin)的定义如式:

    其中:x- 是训练集距离超平面最近的反例, x+ 是训练集距离超平面最近的正例。定义边缘(Margin)为x- 到决策超平面距离与x+ 到决策超平面距离之和。
      SVM算法中超平面的概念是发现使分离数据最大边缘化的超平面w。一个等价的形式是,寻找解决下列优化问题的决策超平面,如式:

    这一优化目标容易求解,一般通过动态规划来解决。
      现实世界中的数据集很少是线性可分的。为了解决这个问题,一般需要修改SVM优化目标公式加入惩罚因子来完成不满足线性可分约束的训练实例的分类。加入了惩罚因子的SVM最优化目标如式:

    这里ζi 表示允许目标被违反的松弛变量(Stack Variable),这个松弛变量加强了关键损失函数。
      另外一个SVM关键技术是核技巧,通过核函数将线性不可分的训练数据变换或映射到更高维空间中,得到线性可分的数据集。核函数技术大多数情形下都可以提高分类的精度。常用SVM核函数如下:
      线性核:

      多项式核:

      径向基(RBF)核(也称为高斯核):

      SVM能够取得比较好的分类效果。其优点在于:
      1.SVM是一种针对有限样本条件下的分类算法,其目标是得到当前训练集下的最优解而不是样本数趋于无穷大时的最优值,该算法最终将问题转化成二次线性规划寻求最优解问题。从理论上来讲,它得到的是全局最优解,能够避免局部极值问题。
      2.该方法将实际问题通过核函数技巧将线性不可分空间映射到高维线性可分空间,在高维空间中构造线性决策函数来实现原线性不可分空间的决策函数。这保证了SVM具有较好的推广能力,计算的复杂度不再取决于空间维数,而是取决于训练集样本数量。
      3.SVM方法能够很好的处理稀疏数据,更好的捕捉了数据的内在特征,准确率较高。
      SVM虽然有许多优点,但是固有的缺点是不可避免的。其缺点包括:
      1.SVM算法时间和空间复杂度较高,随着训练样本数和类别的增加,分类时间和空间代价很高。
      2.核函数空间变换会增加训练集空间的维数,使得SVM对时间和空间需求加大,又进一步降低了分类的效率。
      3.SVM算法一般含有较多参数,并且参数随着训练样本的不同,呈现较大的差异,调整参数以获得最优分类效果相对困难。而且参数的不同对分类结果的显示出较大的差异性。

    基于统计的模型

      基于统计的机器学习方法已经成为自然语言研究领域里面的主流研究方法。事实上无论是朴素贝叶斯分类模型,还是支持向量机分类模型,也都采用了统计的方式。文本分类算法中一种最典型的基于统计的分类模型就是k近邻(k-Nearest Neighbor,kNN)模型,是比较好的文本分类算法之一。
      kNN分类模型的主要思想:通过给定一个未标注文档d,分类系统在训练集中查找与它距离最接近的k篇相邻(相似或相同)标注文档,然后根据这k篇邻近文档的分类标注来确定文档d的类别。分类实现过程:
      1) 将训练集样本转化为向量空间模型表示形式并计算每一特征的权重;
      2) 采用类似步骤1的方式转化未标注文档d并计算相应词组元素的权重;
      3) 计算文档d与训练集样本中每一样本的距离(或相似度);
      4) 找出与文档d距离最小(或相似度最大)的k篇训练集文本;
      5) 统计这个k篇训练集文本的类别属性,一般将文档d的类归为k中最多的样本类别。

      kNN 分类模型是一种“懒学习”算法,实质上它没有具体的训练学习过程。分类过程只是将未标注文本与每一篇训练集样本进行相似度计算, kNN 算法的时间和空间复杂度较高。因而随着训练集样本的增加,分类的存储资源消耗大,时间代价高。一般不适合处理训练样本较大的分类应用。

    知更鸟博文推荐
    上一篇 文本分类——特征选择概述
    下一篇 文本分类——算法性能评估
    推荐篇 基于Kubernetes、Docker的机器学习微服务系统设计——完整版
    研究篇 RS中文分词   |  MP特征选择   |  NLV文本分类   |  快速kNN
    作者简介
    兴趣爱好机器学习、云计算、自然语言处理、文本分类、深度学习
    E-mailxsd-jj@163.com (欢迎交流)

    参考文献:
    [1].McCallum,A.,Nigam,K. A comparison of event models for naive Bayes text classification [C]. In: Proc. of the AAAI ’98 Workshop on Learning for Text Categorization. 41 - 48.
    [2].宗成庆. 统计自然语言处理[M].北京:清华大学出版社,2008
    [3].王斌,潘文峰.基于内容的垃圾邮件过滤技术综述[J].中文信息学报,19(5):1-10
    [4].Yang,Y.,Liu,X. A re-examination of text categorization methods [C]. In: Proceedings of the 22nd ACM Int’l Conference on Research and Development in Information Retrieval. Berkeley: ACM Press: 42-49

    版权声明:个人原创,请勿抄袭,欢迎引用,未经许可禁止转载. © 知更鸟
    展开全文
  • 分类模型评估方法

    千次阅读 2018-07-04 10:04:05
    上图矩阵中1是正例,0是只负例对于二分类问题,可以将真实类别和分类器预测类别组合为:真正例(true positive TP):真实类别为正例,预测类别为正例;假正例(false positive FP): 真实类别为负例,预测类别为正例...

    上图矩阵中1是正例,0是只负例

    对于二分类问题,可以将真实类别和分类器预测类别组合为:

    真正例(true positive TP):真实类别为正例,预测类别为正例;

    假正例(false positive FP): 真实类别为负例,预测类别为正例;

    假负例(false negative FN):真实类别为正例,预测类别为负例;

    真负例(true negative TN):真实类别为负例,预测类别为负例;

    分类模型评价指标有:

    1.错误率和精度

    错误率(error_rate)和精度(accuracy)是分类任务中最常用的两个指标,既适用于二分类任务也适用于多分类任务;

    error_rate = (FP+FN)/(P+N)

    accuracy = (TP+TN)/(P+N)

    accuracy = 1-error_rate

    错误率是分类错误的样本数占样本总数的比例,精度则是分类正确的样本数占样本总数的比例;

    error_rate =

    2.查准率、查全率和F1

    查准率(准确率)P = TP/(TP+FP)

    查全率(召回率)R = TP/(TP+FN)

    F1值:F1 = 2/(1/R + 1/P) = 2*P*R/(P+R)

    查准率和查全率是一对矛盾的指标,一般来说,查准率高时,查全率往往偏低,而查全率高时,查准率往往偏低;平衡点BEP是查准率= 查全率时的取值,当一个学习期的BEP高于另一个学习器的,则可以认为该学习器优于另一个;

    但BEP过于简化,更常用的是F1值;另外再一些应用中可能对查准率和查全率的重视程度不同,可以对它们施加不同的偏好,定义为:

    3.ROC和AUC

    ROC曲线的纵轴是“真正例率”(TPR),横轴是假正例率(FPR),

    其中TPR = TP/(TP+FN), FPR = FP/(TN+FP)

    绘图过程:给定m+个正例率和m-个负例率,根据学习器的预测结果对样例进行排序,然后把分类阈值设为最大,即把所有样本都预测为反例,此时TPR和FPR都为0,在坐标(0,0)处标记一个点,然后,将分类阈值依次设为每个样例的预测值,即依次将每个样例预测为正例;

    若一个分类器的ROC曲线将另一个分类器的曲线完全包住,则可认为该分类器优于另一个分类器;若两个分类器之间有交叉,则比较难比较优劣,此时较为合理的判断指标是AUC,即ROC曲线下的面积。

    展开全文
  • 7.7 分类模型评估

    千次阅读 2017-06-29 22:09:16
    sklearn库的metrics模块提供各种评估方法,包括分类评估、回归评估、聚类评估和交叉验证等,本节主要介绍分类模型评估方法。 评估分类是判断预测值时否很好的与实际标记值相匹配。正确的鉴别出正样本(True ...

      “所有模型都是坏的,但有些模型是有用的”。建立模型之后,接下来就要去评估模型,以确定此模型是否“有用”。sklearn库的metrics模块提供各种评估方法,包括分类评估、回归评估、聚类评估和交叉验证等,本节主要介绍分类模型评估方法。
      评估分类是判断预测值时否很好的与实际标记值相匹配。正确的鉴别出正样本(True Positives)或者负样本(True Negatives)都是True。同理,错误的判断正样本(False Positive,即一类错误)或者负样本(False Negative,即二类错误)。
      注意:True和False是对于评价预测结果而言,也就是评价预测结果是正确的(True)还是错误的(False)。而Positive和Negative则是样本分类的标记。
      metrics模块分类度量有6种方法,如表1所示:

    指标描述metrics方法
    Accuracy准确度from sklearn.metrics import accuracy_score
    Precision查准率from sklearn.metrics import precision_score
    Recall查全率from sklearn.metrics import recall_score
    F1F1值from sklearn.metrics import f1_score
    Classification Report分类报告from sklearn.metrics import classification_report
    Confusion Matrix混淆矩阵from sklearn.metrics import confusion_matrix
    ROCROC曲线from sklearn.metrics import roc_curve
    AUCROC曲线下的面积from sklearn.metrics import auc

    7.7.1 准确度

      准确度是预测正确的数(包括正样本和负样本)占所有数的比例。在对模型进行评估前,要按照前面的章节所述步骤,对数据进行收集或创建、预处理、建模和预测等操作,示例代码:

    # 创建数据集,其中矩阵X表示特征值,向量y表示所属类目标记值
    import numpy as np
    X=np.random.random((10,5))
    y=np.array(['M','M','F','F','M','F','M','M','F','F'])
    X[X<0.7]=0
    
    # 对矩阵X特征值进行二值化处理
    from sklearn.preprocessing import Binarizer
    binarizer = Binarizer(threshold=0.0).fit(X)
    binary_X=binarizer.transform(X)
    
    # 对y标记值进行类条件编码
    from sklearn.preprocessing import LabelEncoder
    enc=LabelEncoder()
    enc_y=enc.fit_transform(y)
    
    # 数据切分为训练集和测试集
    from sklearn.cross_validation import train_test_split
    X_train,X_test,y_train,y_test=train_test_split(binary_X,enc_y,random_state=0)
    
    # 利用knn模型对数据进行拟合
    from sklearn import neighbors
    knn = neighbors.KNeighborsClassifier(n_neighbors=5)
    knn.fit(X_train,y_train)
    
    # 对测试集数据预测
    y_pred = knn.predict(X_test)
    print(y_pred)
    print(y_test)

    运行结果

    [0 1 1]   #预测标记值
    [0 0 1]   #测试标记值

      经历过以上操作后,利用accuracy_score函数对预测数据进行模型评估,其中第一个参数是测试标记,第二个参数是预测标记值。示例代码:

    from sklearn.metrics import accuracy_score
    accuracy_score(y_test, y_pred)

    运行结果

    0.66666666666666663

      由结果可知,knn模型预测的准确率约为66.7%,其中测试标记值y_test的结果为array([0, 0, 1], dtype=int64),而y_pred结果为array([0, 1, 1], dtype=int64),由于数据量比较小,因此准确率为2/3即约等于66.7%。

    7.7.2 查准率(Precision)和查全率(Recall)

      查准率和查全率应用在信息处理领域的多个子领域。为加深理解,先引入下图1,然后再具体分析。其中,用P代表Precision,R代表Recall。


    图1 Precision和Recall

      查准率和查全率用来衡量搜索引擎的性能,查全率=(检索出的相关信息量/系统中的相关信息总量)x100%,查准率=(检索出的相关信息量/检索出的信息总量)x100%。一般来说,Precision 就是检索出来的条目中(比如:文档、网页等)有多少是准确的,Recall就是所有准确的条目有多少被检索出来了。为什么要引入这两个概念?
      假设有一个大小为1000的带布尔标签数据集,里面的“真”样本只有100不到,剩下都是假样本。假设训练一个模型,不管输入什么数据,它只给出“假”的预测,那么正确率依旧是90%以上,很明显,这个时候准确率accuracy就失去它的作用。因此,查全率和查准率一般用在倾斜数据集的时候。
      查全率是衡量检索系统和检索者检出相关信息的能力,查准率是衡量检索系统和检索者拒绝非相关信息的能力。
      实验证明,在查全率和查准率之间存在着相反的相互依赖关系--如果提高输出的查全率,就会降低其查准率,反之亦然。


    查准率与查全率

      sklearn的metrics模块分别提供了precision_score和recall_score函数用来评估分类模型的查全率和查准率,示例代码:

    from sklearn.metrics import precision_score      
    print(precision_score(y_test, y_pred))
    from sklearn.metrics import recall_score   
    print(recall_score(y_test, y_pred))

    运行结果:

    0.5      # 查准率
    1.0      # 查全率

      由结果可知,查准率为0.5,由于测试集中正确的正样本只有1个,预测的正样本有2个,所以依据查准率公式得1/2即0.5。而对于查全率,唯一的1个正确的正样本被预测样本涵盖,因此依据查全率公式得1/1即1.0。

    7.7.3 F1值(F1-Measure)

      如上所述,P和R指标有的时候是矛盾的,F-Measure综合这二者指标的评估指标,用于综合反映整体的指标。F-Measure是Precision和Recall加权调和平均,公式如图2所示:


    图2 F-Measure

      当参数a=1时,就是最常见的F1了,如图3所示:


    图3 F1-Measure

      很容易理解,F1综合了P和R的结果,当F1较高时则比较说明实验方法比较理想。利用F1评估分类模型示例代码:

    from sklearn.metrics import f1_score
    f1_score(y_test,y_pred)

    运行结果:

    0.66666666666666663

    7.7.4 分类报告(Classification Report)

      metrics模块的classification_report方法,综合提供了查准率(precision)、查全率(recall)和f1值三种评估指标。示例代码:

    from sklearn.metrics import classification_report
    print(classification_report(y_test,y_pred))

    运行结果:

    precision    recall  f1-score   support
    
              0       1.00      0.50      0.67         2
              1       0.50      1.00      0.67         1
    
    avg / total       0.83      0.67      0.67         3

    7.7.5 混淆矩阵(Confusion Matrix)

      混淆矩阵是一个N X N矩阵,N为分类的个数。假如我们面对的是一个二分类问题,也就是N=2,我们就得到一个2 X 2矩阵。在学习这个矩阵之前,我们需要知道一些简单的定义。
    Accuracy(准确度):预测正确的数占所有数的比例。
    Positive Predictive Value(阳性预测值) or Precision(查准率):阳性预测值被预测正确的比例。
    Negative Predictive Value(阴性预测值):阴性预测值被预测正确的比例。
    Sensity(灵敏度) or Recall(查全率):在阳性值中实际被预测正确所占的比例。
    Specificity(特异度):在阴性值中实现被预测正确所占的比例。
      所有概念及运算方法如图4所示:


    图4 混淆矩阵

      sklearn库的metrics模块提供了confusion_matrix方法,用来计算混淆矩阵值,示例代码:

    from sklearn.metrics import confusion_matrix 
    print(confusion_matrix(y_test, y_pred))

    运行结果:

    [[1 1]       # True Positives = 1, False Negatives = 1
     [0 1]]      # False Positives = 0, True Negatives = 1

    7.7.6 ROC曲线

      ROC(receiver operating characteristic curve)曲线指受试者工作特征曲线或者是接收器操作特性曲线, 它是反映敏感性和特异性连续变量的综合指标,是用构图法揭示敏感性和特异性的相互关系,它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性,再以敏感性为纵坐标、(1-特异性)为横坐标绘制成曲线,曲线下面积越大,诊断准确性越高。在ROC曲线上,最靠近坐标图左上方的点为敏感性和特异性均较高的临界值。
      考虑一个二分问题,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被 预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True negative),正类被预测成负类则为假负类(false negative)。
    TP:正确肯定的数目;
    FN:漏报,没有正确找到的匹配的数目;
    FP:误报,给出的匹配是不正确的;
    TN:正确拒绝的非匹配对数;
      列联表如下表所示,1代表正类,0代表负类。

    预测
    10合计
    实际1True Positive(TP)False Negative(FN)Actual Positive(TP+FN)
    0False Positive(FP)True Negative(TN)Actual Negative(FP+TN)
    合计Predicted Positive(TP+FP)Predicted Negative(FN+TN)TP+FP+FN+TN

      从列联表引入两个新名词。其一是真正类率(true positive rate ,TPR), 计算公式为TPR=TP/ (TP+ FN),刻画的是分类器所识别出的 正实例占所有正实例的比例。另外一个是假正类率(false positive rate, FPR),计算公式为FPR= FP / (FP + TN),计算的是分类器错认为正类的负实例占所有负实例的比例。还有一个真负类率(True Negative Rate,TNR),也称为specificity,计算公式为TNR=TN/ (FP+ TN) = 1-FPR。如图5所示:


    图5 TPR和FPR

      如上图所示,两列True matches和True non-match分别代表应该匹配上和不应该匹配上的,两行Pred matches和Pred non-match分别代表预测匹配上和预测不匹配上的。
    FPR = FP/(FP + TN) 负样本中的错判率(假警报率)
    TPR = TP/(TP + TN) 判对样本中的正样本率(命中率)
    ACC = (TP + TN) / P+N 判对准确率
      在一个二分类模型中,对于所得到的连续结果,假设已确定一个阀值,比如说 0.6,大于这个值的实例划归为正类,小于这个值则划到负类中。如果减小阀值,减到0.5,固然能识别出更多的正类,也就是提高了识别出的正例占所有正例 的比类,即TPR,但同时也将更多的负实例当作了正实例,即提高了FPR。为了形象化这一变化,在此引入ROC,ROC曲线可以用于评价一个分类器。
      ROC曲线其实就是从混淆矩阵衍生出来的图形,其横坐标为1-Specificity,纵坐标为Sensitivity。1-specificity=FPR(False positive rate),即假正类率。Sensitivity=TPR(True positive rate),即是真正类率。如图6所示:


    图6 ROC曲线和它相关的比率

      上图说明,理想情况下,TPR应该接近1,FPR应该接近0。ROC曲线上的每一个点对应于一个threshold,对于一个分类器,每个threshold下会有一个TPR和FPR。比如Threshold最大时,TP=FP=0,对应于原点;Threshold最小时,TN=FN=0,对应于右上角的点(1,1)。在ROC空间,ROC曲线越凸向左上方向效果越好;越靠近对角线,分类器越趋向于随机分类器。
      利用metrics计算roc曲线,roc曲线有三个属性:fpr,tpr,和阈值,因此该函数返回这三个变量。示例代码:

    import numpy as np  
    from sklearn.metrics import roc_curve  
    y = np.array([1,1,2,2])  
    pred = np.array([0.1, 0.4, 0.35, 0.8])  
    fpr, tpr, thresholds = roc_curve(y, pred, pos_label=2)

    fpr,tpr,thresholds分别值为

    array([ 0. ,  0.5,  0.5,  1. ])
    array([ 0.5,  0.5,  1. ,  1. ])
    array([ 0.8 ,  0.4 ,  0.35,  0.1 ])

    7.7.7 AUC(ROC曲线下面积)

      ROC曲线是根据与那条参照线进行比较来判断模型的好坏,但这只是一种直觉上的定性分析,如果我们需要精确一些,就要用到AUC,也就是ROC曲线下面积。其判定方法是AUC应该大于0.5。如图7所示:


    图7 AUC曲线

      如上图所示,参考线的面积是0.5,ROC曲线与它偏离越大,ROC曲线就越往左上方靠拢,它下面的面积(AUC)也就越大,这里面积是0.869。我们可以根据AUC的值与0.5相比,来评估一个分类模型的预测效果。如果AUC的值达到0.80,那说明分类器分类非常准确;如果AUC值在0.60~0.80之间,那分类器有优化空间,可以通过调节参数得到更好的性能;如果AUC值小于0.60,那说明分类器模型效果比较差。
      利用刚才求得的fpr和tpr的结果作为参数,可以求得AUC的值,示例代码:

    from sklearn.metrics import auc  
    auc(fpr, tpr)

    运行结果

    0.75
    展开全文
  • 一、定义 在研究评估指标之前,先给出分类结果混淆矩阵(confusion matrix)。  预测 真实 ...定义:对于给定的测试数据集,分类器正确分类样本数与总样本数之比。计算方法:
  • 混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。 数据分析与挖掘体系位置 混淆矩阵是评判模型结果的指标,属于模型评估的一部分。此外,混淆...
  • 分类模型的评价及比较

    万次阅读 2018-09-06 08:42:02
    评价和比较分类模型时,关注的是其泛化能力,因此不能仅关注模型在某个验证集上的表现。事实上,如果有足够样本作为验证集来测试模型的表现是再好不过的,但即使是这样也存在一个难点,比如难界定大的样本才能...
  • 分类模型评价指标

    千次阅读 2019-05-20 14:39:49
    在分类型模型评判的指标中,常见的方法有如下三种: ...混淆矩阵就是分别统计分类模型归错类,归对类的观测值个数,然后把结果放在一个表里展示出来。这个表就是混淆矩阵。 ROC是一条线,如果我们选择用...
  • 分类模型评估之ROC-AUC曲线和PRC曲线

    万次阅读 多人点赞 2016-06-30 11:27:09
    ROC(Receiver Operating Characteristic,接受者工作特征曲线)曲线和AUC常被用来评价一个二值分类器(binary classifier)的优劣。博文介绍ROC和AUC的特点,讨论如何作出ROC曲线图以及计算AUC。 AUC是现...
  • 步骤:二分类问题:(1)将第一类样本作为正样本,第二类样本作为负样本。首先,对样本的向量空间进行增广,即对n维向量x的首部或者尾部增加一个参数1,增广为(n+1)维向量,并对其进行规范化,即正样本不做处理,负...
  • 2.二分类模型

    千次阅读 2019-05-08 22:03:57
    逻辑回归:一个用于二分类的算法 以猫的识别为例 图片(64X64像素)在计算机中的保存:三个64X64的矩阵,对应R,G,B三种像素的强度值。定义一个特征向量,线性存储所有像素值,总维度是64X64X3。 输入...
  • 本文为原创文章:http://blog.csdn.net/programmer_wei/article/details/52072939Logistic Regression(逻辑回归)是机器学习中一个非常非常常见的模型,在实际生产环境中也常常被使用,是一种经典的分类模型(不是...
  • 简单来说,它的定义如下: 机器学习系统通过学习如何组合输入信息来对从未见过的数据做出有用的预测。 下面我们来了解一下机器学习的基本术语。 标签 标签是我们要预测的事物,即简单线性回归中的y变量。标签可以...
  • 分类模型评估 判断一个分类器对所用样本的分类能力或者在不同的应用场合时,需要有不同的指标。 Scikit-Learn中,评价指标计算可对每个样本施加权重,权重通过参数sample_weight指定。 分类模型的评价指标: ...
  • CTR预估模型中的正负样本问题

    千次阅读 2020-06-21 21:37:49
    “目前推荐系统中给用户进行推荐大部分都是基于CTR预估来做的,CTR预估中很重要的一环便是正负样本的选择,那么不同业务场景下我们如何定义正负样本、如何控制正负样本的比例、正负样本选择有哪...
  • BERT模型实战之文本分类(附源码)

    万次阅读 多人点赞 2019-03-21 11:00:36
    BERT模型也出来很久了,之前看了论文学习过它的大致模型(可以参考前些日子写的笔记NLP大杀器BERT模型解读),但是一直有杂七杂八的事拖着没有具体去实现过真实效果如何。今天就趁机来动手写一写实战,顺便复现一下...
  • 机器学习—分类模型

    万次阅读 2018-09-25 22:14:03
    第二章 分类模型 给定训练数据 分类任务学习一个输入x到输出y的映射f: //最大后验估计 其中,y为离散值,其值范围为标签空间: 当C=2时,为两类分类问题 贝叶斯公式 先验概率 p(y=c)//根据以往的经验和分析...
  • logistic回归是一个二分类模型

    万次阅读 2021-03-09 16:54:52
    首先给大家强调一点,这是一个分类模型而不是一个回归模型!下文开始将从不同方面讲解logistic回归的原理,随后分别使用梯度上升算法和随机梯度上升算法将logistic回归算法应用到实例中。 一、logistic回归和线性...
  • PyTorch学习之路(level1)——训练一个图像分类模型

    万次阅读 多人点赞 2017-11-13 21:55:35
    PyTorch的文档质量比较高,入门较为容易,这篇博客选取官方链接里面的例子,介绍如何用PyTorch训练一个ResNet模型用于图像分类,代码逻辑非常清晰,基本上和许多深度学习框架的代码思路类似,非常适合初学者想上手...
  • 分类时,由于训练集合中各样本数量不均衡,导致模型训偏在测试集合上的泛化性不好。解决样本不均衡的方法主要包括两类:(1)数据层面,修改各类别的分布;(2)分类器层面,修改训练算法或目标函数进行改进。还有...
  • 分类模型的评价之AUC

    千次阅读 2016-12-01 19:11:45
    关于AUC,想写的东西有点,本来计划分3篇文章来写完,但是微信公众平台每天只能发一篇文章,等不及了,所以先写一篇,尽量把想写的都写出来,以后有需要再补充。 这篇文章分三部分,第一部分是对AUC的基本介绍...
  • 线性分类模型--感知机(perceptron)

    千次阅读 2014-09-28 15:19:44
    线性分类模型--感知机(perceptron)
  • 分类模型评估之ROC-AUC

    千次阅读 2018-03-23 22:32:55
    ROC曲线和AUCROC(Receiver Operating Characteristic,接受者工作特征曲线)...AUC是现在分类模型,特别是二分类模型使用的主要离线评测指标之一。相比于准确率、召回率、F1等指标,AUC有一个独特的优势,就是不关...
  • 机器学习分类模型评价指标详述

    万次阅读 多人点赞 2018-09-10 11:38:37
    问题建模 机器学习解决问题的通用流程:问题建模——特征工程——模型选择——模型融合 其中问题建模主要包括:设定评估指标,选择样本,交叉...接着从原始数据中选择最相关的样本子集用于模型训练,并对样本子集...
  • 在二分类问题中,数据的标签通常用(0/1)来表示,在模型训练完成后进行测试时,会对测试集的每个样本计算一个介于0~1之间的概率,表征模型认为该样本为阳性的概率,我们可以选定一个阈值,将模型...
  • 建模的评估一般可以分为回归、分类和聚类的评估,本文主要介绍回归和分类模型评估: 一、回归模型的评估 主要有以下方法: 指标 描述 metrics方法 Mean Absolute Error(MAE) 平均绝对误差 from ...
  • 【火炉炼AI】机器学习011-分类模型的评估:准确率,精确率,召回率,F1值 【本文所使用的Python库和版本号】: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2   在前面的(【火炉炼AI】机器学习004...
  • 二值分类模型的评价指标

    千次阅读 2016-11-30 08:57:37
    本文简单、扼要的介绍了二值分类模型的评价指标:Precision, Recall, F-Score, ROC and AUC.
  • 机器学习风靡全球,模型算法层出不穷,但是评价指标相对来说比较单一,可谓万变不离其宗 准确率、精确率、召回率、F1F1F_1-score 我们以分类算法为例,假设班里有50个同学,其中男生30个,女生20个,...
  • 前几篇文章介绍了线性回归算法,线性分类模型分为判别式模型和生成式模型,本文首先简单复习了与算法相关的数学基础知识,然后分析各线性判别式分类算法,如最小平方法,Fisher线性判别法和感知器法,最后总结全文。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 92,264
精华内容 36,905
关键字:

多分类模型样本定义