精华内容
下载资源
问答
  • 分类问题

    千次阅读 2018-08-03 20:10:19
    (1)如果用回归函数去做分类,当数据不是线性的,会有问题。 (2)怎么解决呢? 将非线性转为线性(这也是逻辑回归的本质)。 (3)如何转呢? 施加函数。 (4)施加什么函数? 施加logistic函数(由于图形...

    1、模型的选择

    2、逻辑回归(普通)

    1、逻辑回归,虽然名为回归,本质是分类。

    2、怎么理解logistic函数是线性的?

    (1)如果用回归函数去做分类,当数据不是线性的,会有问题。

    (2)怎么解决呢?

    将非线性转为线性(这也是逻辑回归的本质)。

    (3)如何转呢?

    施加函数。

    (4)施加什么函数?

    施加logistic函数(由于图形类似S型,又称为sigmoid函数)===>解决2分类

    施加softmax函数===>解决多分类

    (5)所以说,logistic函数 是 对 线性函数  施加 logistic变换得到的 函数。logistic可以理解成是线性的(知道有这么回事就行)。

    3、怎么求logistic回归?

    和回归类似,用的都是极大似然函数,得到一个函数。

              

    然后对其进行优化求解。

    优化求解通常有2种方案,一个是迭代法,一个是牛顿法。

    4、迭代法:梯度下降法。

    参考这里

    5、牛顿法:二阶,收敛速度更快

    (1)牛顿法的本质就是 求f(x)=0的解。

    怎么求?将f(x)用泰勒展开近似。

    (2)而我们要求J(w)的极值问题,通常都是求其导数g(w)等于0。

    于是f(x)=0 就可以理解成 导数g(w) 等于0 时的根,即w的解。通过一阶泰勒展开,发现用到了导数的导数,即二阶导数(Hession矩阵)

               

    (4)缺点:首先 当高纬度高时 计算量增大(求Hession矩阵)。其次需要保证Hession矩阵是可逆的。

    (5)解决:拟牛顿法

    6、拟牛顿法:

    (1)不用Hession矩阵,而是构造出可以近似Hession矩阵的正定对称矩阵(可逆的),进而再逐步优化目标函数。

    (2)不通的构造方法产生了不同的拟牛顿法。如BFGS、LBFGS、Newton-CG

    3、多分类问题

    【1】One-Vs-all

    (1)将C分类问题转为C个二分类问题。

    (2)在给定x的情况下,C分类函数就是 带有w和λ参数的 f函数。

    w参数:每个二分类都有自己的w,于是就有了C组w,构成w矩阵(C行D列,其中D表示特征)。

    λ参数:如果带正则,那么就会有λ矩阵(C行1列)。

    (3)如图:

                    

    【2】Softmax

    就是将sigmod函数,替换成softmax函数(多项分布Cat)。计算和二项分布类似。

    分类相对精准,但分类速度较前面的慢。

    【3】sklearn中用法

    (1)对偶问题

    所谓的对偶就是将非凸函数,转为凸函数,使得可以优化求解。

    虽然原问题无论是何种形式,其对偶问题永远是凸优化问题。但是我们一般很难获取其对偶问题的表达式。

    (2)class_weight:参考 不平衡数据分类

    (3)solver

    小数据集:

    L1正则:liblinear(底层是坐标轴下降法),但multi-class只能是ovr

    L2正则:同上,只不过L1正则可以让模型系数稀疏。

    较大数据集:

    L1正则:saga

    L2正则:lbfgs、newton-cg、sag(随机平均梯度下降)

    大数据集:

    L2正则:sag/saga

    SGDClassifier,并使用logloss损失。

    (4)multi-class

    • ovr可用于所有的solver。默认情况就是liblinear+ovr
    • multinomial只能选择newton-cg,lbfgs,sag/saga

    3、KNN模型

    既可以做回归,也可以做分类,详情参考这里

    展开全文
  • 二分类和多分类问题的评价指标总结

    万次阅读 多人点赞 2019-07-09 18:51:55
    评价分类问题的性能指标一般是分类准确率,即对于给定的数据,分类正确的样本数占总样本数的比例。 注意:准确率这一指标在Unbalanced数据集上的表现很差,因为如果我们的正负样本数目差别很大,比如正样本100个,负...

    1 二分类评价指标

    准确率,精确率,召回率,F1-Score, AUC, ROC, P-R曲线

    1.1 准确率(Accuracy)

    评价分类问题的性能指标一般是分类准确率,即对于给定的数据,分类正确的样本数占总样本数的比例
    注意:准确率这一指标在Unbalanced数据集上的表现很差,因为如果我们的正负样本数目差别很大,比如正样本100个,负样本9900个,那么直接把所有的样本都预测为负, 准确率为99%,但是此分类模型实际性能是非常差的,因为它把所有正样本都分错了。

    1.2 精确率(Precision)

    对于二分类问题常用的评价指标是精确率和召回率。通常以关注的类为正类,其他类为负类,分类器在数据集上的预测或者正确或者不正确,我们有4中情况:

    • TP:True Positive, 把正类预测为正类;
    • FP:False Positive,把负类预测为正类;
    • TN:True Negative, 把负类预测为负类;
    • FN:False Negative,把正类预测为负类

    在混淆矩阵中表示如下:
    在这里插入图片描述
    精确率是指在预测为正类的样本中真正类所占的比例,直观上来解释精确率就是说
    我现在有了这么的预测为正的样本,那么这些样本中有多少是真的为正呢?

      P = TP/(TP+FP)
    

    1.3 查全率(召回率 Recall)

    召回率是指在所有的正类中被预测为正类的比例,直观上来说召回率表示我现在预测为正的这些值中,占了所有的为正的样本的多大比例呢?

    R = TP/(TP+FN)
    

    不同的分类问题,对精确率和召回率的要求也不同。
    例如:假币预测,就需要很高的精确率,我需要你给我的预测数据具有很高的准确性。
    肿瘤预测就需要很高的召回率。“宁可错杀三千,不可放过一个”。

    1.4 F1-Score

    F1-Score: 精确率和召回率的调和平均。 即:

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

    因为Precision和Recall是一对相互矛盾的量,当P高时,R往往相对较低,当R高时, P往往相对较低,所以为了更好的评价分类器的性能,一般使用F1-Score作为评价标准来衡量分类器的综合性能。

    1.5 ROC曲线和AUC

    TPR:True Positive Rate,真正率, TPR代表能将正例分对的概率

    TPR=TP/TP+FN
    

    FPR: False Positive Rate, 假正率, FPR代表将负例错分为正例的概率

    FPR=FP/FP+TN
    

    使用FPR作为横坐标,TPR作为纵坐标得到ROC曲线如下
    在这里插入图片描述
    ROC曲线中的四个点和一条线

    • (0,1): FN = 0, FP = 0, 表示所有样本都正确分类,这是一个完美的分类器;

    • (1,0):TN = 0, TP = 0, 表示所有样本都分类错误,这是一个最糟糕的分类器;

    • (0, 0): FP = 0, TP = 0, 表示所有样本都分类为负

    • (1,1): TN = 0, FN = 0, 表示左右样本都分类为正

    经过以上分析,ROC曲线越靠近左上角,该分类器的性能越好。
    上图虚线与 y = x,该对角线实际上表示一个随机猜测的分类器的结果。

    ROC曲线画法:在二分类问题中,我们最终得到的数据是对每一个样本估计其为正的概率值(Score),我们根据每个样本为正的概率大小从大到小排序,然后按照概率从高到低,一次将“Score”值作为阈值threshold,当测试样本的概率大于或等于这个threshold时,我们认为它为正样本,否则为负样本。每次选取一个不同的threshold,就可以得到一组FPR和TPR,即ROC曲线上的一点。

    AUC:(Area Under roc CurveROC)曲线下的面积,引入AUC的原因是量化评价指标。
    AUC的面积越大,分类效果越好。AUC小于1,另一方面,正常的分类器你应该比随机猜测效果要好吧?所以 0.5 <= AUC <= 1

    AUC表征了分类器把正样本排在负样本前边的能力。这里的意思其实是指数据按照其为正的概率从大到小排序之后,正样本排在负样本前边的能力。AUC越大,就有越多的正样本排在负样本前边。极端来看,如果ROC的(0, 1)点,所有的正样本都排在负样本的前边。

    1.6 ROC 与 P, R对比

    **ROC曲线特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。**在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。)
    下图是ROC曲线和Precision-Recall曲线的对比:
    在这里插入图片描述
    a,c为ROC曲线,b,d为P-R曲线;
    a,b 为在原始测试集(balanced)上的结果,c,d为把原始数据集的负样本增加10倍后的结果。很明显,ROC曲线基本保持不变,P-R曲线变化较大。

    为什么取AUC较好?因为一个二分类问题,如果你取P或R的话,那么你的评价结果和你阈值的选取关系很大,但是我这个一个分类器定了,我希望评价指标是和你取得阈值无关的,也就是需要做与阈值无关的处理。所以AUC较P-R好

    from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
    acc = accuracy_score(y_true, y_pred)
    

    2 多分类评价指标

    对于二分类问题,我们有很多评价指标,因为只有正类和负类两种,往往我们只关心正类的准确率和召回率。但是对于多分类问题,有些二分类的评价标准就不怎么适用了。最近实习涉及到多分类,在模型评价指标选取费了不少时间,对于常用的多分类评价指标进行整理以便日后使用。一种方法是将多分类问题转化为多个2vs2问题进行讨论,步骤比较复杂。还有一种是直接定义的多分类指标。

    2.1 多分类转化为2vs2问题来评价

    准确率:与二分类相同,预测正确的样本占总样本的比例。
    精确率: ‘macro’, 对于每个标签,分别计算Precision,然后取不加权平均
    查全率: ‘macro’,对于每个标签,分别计算Recall,然后取不加权平均
    F1-Score‘macro’, 对于每个标签,分别计算发,然后取不加权平均
    ‘micro’, 将n个二分类评价的TP,FP,FN对应相加,计算P和R,然后求得F1
    一般macro-f1和micro-f1都高的分类器性能好

    2.2 直接定义的多分类指标

    2.2.1Kappa系数

    kappa系数是用在统计学中评估一致性的一种方法,取值范围是[-1,1],实际应用中,一般是[0,1],与ROC曲线中一般不会出现下凸形曲线的原理类似。这个系数的值越高,则代表模型实现的分类准确度越高。
    在这里插入图片描述

    • P0表示总体分类精度
    • Pe表示SUM(第i类真实样本数*第i类预测出来的样本数)/样本总数平方
      在这里插入图片描述
    from sklearn.metrics import cohen_kappa_score
    kappa = cohen_kappa_score(y_true,y_pred,label=None) #(label除非是你想计算其中的分类子集的kappa系数,否则不需要设置)
    
    
    2.2.2. 海明距离

    海明距离也适用于多分类的问题,简单来说就是衡量预测标签与真实标签之间的距离,取值在0~1之间。距离为0说明预测结果与真实结果完全相同,距离为1就说明模型与我们想要的结果完全就是背道而驰。

    from sklearn.metrics import hamming_loss
    ham_distance = hamming_loss(y_true,y_pred)
    
    2.2.3.杰卡德相似系数

    它与海明距离的不同之处在于分母。当预测结果与实际情况完全相符时,系数为1;当预测结果与实际情况完全不符时,系数为0;当预测结果是实际情况的真子集或真超集时,距离介于0到1之间。
    我们可以通过对所有样本的预测情况求平均得到算法在测试集上的总体表现情况。

    from sklearn.metrics import jaccard_similarity_score
    jaccrd_score = jaccrd_similarity_score(y_true,y_pred,normalize = default)
    
    #normalize默认为true,这是计算的是多个类别的相似系数的平均值,normalize = false时分别计算各个类别的相似系数
    
    2.2.4.铰链损失

    铰链损失(Hinge loss)一般用来使“边缘最大化”(maximal margin)。损失取值在0~1之间,当取值为0,表示多分类模型分类完全准确,取值为1表明完全不起作用。

    from sklearn.metrics import hinge_loss
    hinger = hinger_loss(y_true,y_pred)
    

    参考文档:https://www.cnblogs.com/futurehau/p/6109772.html
    https://www.jianshu.com/p/573ba75aec94

    展开全文
  • 深度学习 分类问题与回归问题

    千次阅读 2020-02-29 16:22:51
    文章目录分类问题分类性能度量 分类问题 分类问题是有监督学习的一个核心问题。 分类用于解决要预测样本属于哪个或者哪些预定义的类别。此时输出变量通常取有限个离散值。 分类的机器学习的两大阶段: (1)从训练...


    分类与回归

    分类预测建模问题与回归预测建模问题不同。

    • 分类是预测离散类标签的任务。
    • 回归是预测连续类数量的任务。

    分类和回归算法之间存在一些重叠, 例如:

    • 分类算法可以预测连续值,但是连续值是类标签的概率的形式。
    • 回归算法可以预测离散值,但是以整数量的形式预测离散值。

    一些算法可用于分类和回归,只需很少的修改,例如决策树和人工神经网络。一些算法不能或不能容易地用于两种问题类型,例如用于回归预测建模的线性回归和用于分类预测建模的逻辑回归。

    重要的是,我们评估分类和回归预测的方式各不相同,并且不重叠,例如:

    • 可以使用准确度评估分类预测,而回归预测则不能。
    • 可以使用均方根误差来评估回归预测,而分类预测则不能。

    比如,区分图像中的人是男性还是女性的问题就是分类问题。根据一个人的图像预测这个人的体重的问题就是回归问题(类似“57.4kg”这样的预测)。
    在这里插入图片描述


    一、分类问题

    分类问题是有监督学习的一个核心问题。
    分类用于解决要预测样本属于哪个或者哪些预定义的类别。此时输出变量通常取有限个离散值。
    分类的机器学习的两大阶段:
    (1)从训练数据中学习得到一个分类决策函数或分类模型,成为分类器(classifier);
    (2)利用学习得到的分类器对新的输入样本进行类别预测。
    多类分类问题可转化为两类分类问题解决,如采用一对其余(One-vs-Rest)方法:将其中一个类标记为正类,将其余类标记为负类。

    1.1分类性能度量:

    假设只有两类样本,即正例(positive)和负例(negetive)。
    在这里插入图片描述真正(True Positive , TP):被模型预测为正的正样本。
    假正(False Positive , FP):被模型预测为正的负样本。
    假负(False Negative , FN):被模型预测为负的正样本。
    真负(True Negative , TN):被模型预测为负的负样本。

    (1)准确率(accuracy)

    分类器正确分类的样本数与总样本数之比。
    在这里插入图片描述

    *(2)精确率(percision)

    在这里插入图片描述

    精确率和召回率是二类分类问题常用的评价指标。
    精确率反映了模型判断的正例中真正正例的比重。
    在垃圾分类中,是指预测出的垃圾短信中真正垃圾短信的比例。

    *(3)召回率(recall)/灵敏度(sensitivity)

    在这里插入图片描述
    召回率反映了总正例中被模型正确判定为正例的比重。
    医学领域也叫做灵敏度。在垃圾短信分类器中,指所有真的垃圾短信被分类器正确找出来的比例。

    (4)P-R曲线

    在这里插入图片描述由图可见,如果提高召回率,则精确率会受到影响而下降。在这里插入图片描述如图是多类分类器,每次将一类分为正例,其他两类为负例,则得到蓝绿红三条曲线。而黄色曲线是他们的平均值线。
    括号中area为曲线下面积。
    area有助于弥补P、R的单点值局部性,可以反映全局性能。

    P-R曲线的绘制

    绘制P-R曲线需要一系列Percision和Recall值,通过阈值获得。分类器给每个测试样本一个“Score”值,表示该样本多大概率上属于正例。
    在这里插入图片描述TP与FP的个数会随之增加,因此会形成N个(P,R)点将这些点连起来就形成了P-R曲线。

    (5)F值

    F值是精确率和召回率的调和平均值。
    在这里插入图片描述F1值更接近于两个数较小的那个,所以精确率和召回率接近时,F1值大。
    在这里插入图片描述

    (6)ROC曲线

    ROC曲线全称为“受试者工作特征”(Receiver Operating Characteristic)曲线。描绘了分类器在真正率(TPR)和假正率(FPR)之间的trade-off。
    也可理解为:我们根据学习器的预测结果,把阈值从0变到最大,即刚开始是把每个样本作为正例进行预测,随着阈值的增大,学习器预测正样例数越来越少,直到最后没有一个样本是正样例。在这一过程中,每次计算出TP和FP,分别以它们为横、纵坐标作图,就得到了“ROC曲线”。

    ROC曲线的纵轴是“真正率”(True Positive Rate, 简称TPR),真正正例占总正例的比例,反映命中概率。横轴是“假正率”(False Positive Rate,简称FPR),错误的正例占负例的比例,反映误诊率、假阳性率、虚惊概率。
    在这里插入图片描述

    绘制ROC曲线

    ROC 曲线的画法与P-R曲线相似。
    绘制ROC曲线需要一系列FPR值和TPR值,这些系列值是通过阈值形成的。对于每个测试样本,分类器会给一个“Score”值,表示该样本多大概率上属于正例或负例。
    在这里插入图片描述TP与FP的个数会随着样本数的增加而增加,因此形成一个个(FP,TP)点,将点连起来就形成了ROC曲线。
    在这里插入图片描述

    • 对角线对应于“随机猜测”模型,而点(0,1)则对应于将所有正例预测为真正例、所有反例预测为真负例的“理想模型”。
    • ROC曲线不适用于多分类问题。

    AUC(area under curve)

    AUC就是ROC曲线下的面积,即ROC的积分。衡量学习器优劣的一种性能指标。
    AUC是衡量二分类模型优劣的一种评价指标,表示预测的正例排在负例前面的概率(反映分类器对样本的排序能力)。
    AUC提供了分类器的一个整体数值。通常AUC越大,分类器越好。
    AUC的取值范围为[0,1]
    在这里插入图片描述

    1.2 分类性能可视化

    (1)混淆矩阵(Confusion matrix)

    如用热力图(heatmap)直观地展现类别的混淆情况(每个类有多少样本被错误地预测成另一个类)
    在这里插入图片描述

    (2)分类报告(Classification report)

    显示每个类的分类性能。包括每个类标签的精确率、召回率、F1值等。。
    在这里插入图片描述


    二、回归问题

    回归分析(regression analysis)是确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
    回归侧重在定量关系的分析,输出实数数值。而分类的输出通常为若干指定的类别标签。

    回归性能度量方法(regression metrics)

    • 常用的评价回归问题的方法:
      平均绝对误差MAE(mean absolute error)
      均方误差MSE(mean squared error)及均方根差RMS
      逻辑回归损失或称交叉熵loss(cross-entropy loss)
      R方值,确定系数(r2_score)

    (1)平均绝对误差MAE(mean absolute error)

    MAE :是绝对误差损失(absolute error loss)的期望值。
    在这里插入图片描述

    (2)均方误差MSE(mean_squared_error)及均方根差RMS

    MSE:是平方误差损失(squared error loss)的期望值。
    NSE的取值越小,预测模型的性能越好。
    RMSE是MSE的平方根。
    在这里插入图片描述
    在这里插入图片描述

    (3)逻辑回归损失 / 称交叉熵loss(cross-entropy loss)

    逻辑回归损失简称为Log loss,又称为交叉熵损失。
    常用于评论逻辑回归LR和神经网络。
    在这里插入图片描述

    • logistic回归损失(二类)
      举例:
      在这里插入图片描述 - logistic回归损失(多类)
      对于多类问题,可将样本的真实标签编码成1-of-K(K为类别总数)的二元指示矩阵Y,即每个样本只有其中一个标签值为1,其余K-1都为0。
      在这里插入图片描述
      现将每个样本的真实标签记为[1, 2, 3],此时标签1可转化为[1, 0, 0],标签2转化为[0, 1, 0],标签3转化为[0, 0, 1]。
      在这里插入图片描述
      举例:
      在这里插入图片描述

    回归评价中每个样本的真实标签true label(或叫ground truth地面真值结果)如何获得?

    • 人工标注每个样本的标签或回归的目标值
    • MAE,PMSE(MSE)常用于评分预测评价
      如网站的让用户给物品打分的功能
    展开全文
  • 目录 1. 二分类评价指标 ...2分类问题的混淆矩阵是2*2的,通常以关注的类为正类,另一个类为负类,分类器在数据集上的预测或者正确或者不正确,我们有4种情况: 1)TP:True Positive,实际为正类并预测为正...

    目录

    1. 二分类评价指标

    2. 多分类评价指标

    3. 总结


    1. 二分类评价指标

    常用的二分类评价指标包括准确率、精确率、召回率、F1-score、AUC、ROC、P-R曲线、MCC等

    • 混淆矩阵

    2分类问题的混淆矩阵是2*2的,通常以关注的类为正类,另一个类为负类,分类器在数据集上的预测或者正确或者不正确,我们有4种情况:

    1)TP:True Positive,实际为正类并预测为正类

    2)FP:False Positve,实际为负类但预测为正类

    3)TN:True Negative,实际为负类并预测为负类

    4)FN:False Negative,实际为正类但预测为负类

    第一个字母表示分类正确与否, T 表示分类正确, F表示分类错误; 第二个字母表示分类器判定结果, P表示判定为正例, N表示判定为负例。

    2分类混淆矩阵表示如下:

    • 准确率(Accuracy)

    评价分类问题的性能指标一般是分类准确率,即对于给定的数据,分类正确的样本数占总样本数的比例。

    注意:准确率这一指标在Unbalanced数据集上的表现很差,因为如果我们的正负样本数目差别很大,比如正样本100个,负样本9900个,那么直接把所有的样本都预测为负, 准确率为99%,但是此分类模型实际性能是非常差的,因为它把所有正样本都分错了。

    • 精确率(Precision)

    精确率是指在预测为正类的样本中真正类所占的比例。即预测为正类的样本中,真正为正类的样本占多少。

    • 查全率(召回率,Recall)

    召回率是指在真实为正类的样本中被预测为正类的比例。即真实为正类的样本中,预测为正类的样本占多少。

    • F1-score

    精确率高,意味着分类器要尽量在 “更有把握” 的情况下才将样本预测为正样本, 这意味着精确率能够很好的体现模型对于负样本的区分能力,精确率越高,则模型对负样本区分能力越强。如,假币预测,就需要很高的精确率,我需要你给我的预测数据具有很高的准确性。

    召回率高,意味着分类器尽可能将所有有可能为正样本的样本预测为正样本,这意味着召回率能够很好的体现模型对于正样本的区分能力,召回率越高,则模型对正样本的区分能力越强。如,肿瘤预测,需要很高的召回率,“宁可错杀三千,不可放过一个”。

    F1-Score: 精确率和召回率的调和平均(2/F1 = 1/P + 1/R)。 即:

    因为Precision和Recall是一对相互矛盾的量,当P高时,R往往相对较低,当R高时, P往往相对较低,所以为了更好的评价分类器的性能,一般使用F1-Score作为评价标准来衡量分类器的综合性能。

    而更一般的有 F_beta:

    其实,  Beta本质上是Recall, Precision 权重比, 当 Beta=2时,  F2表明 Recall 的权重要比Precision高,Recall影响更大 (更侧重于Recall); 当Beta=0.5时,  F0.5表明Recall 的权重要比Precision低, 对应的影响更小(更侧重于Precision).

    • MCC

    MCC 主要用于衡量二分类问题,其综合考虑了 TP TN, FP , FN, 是一个比较均衡的指标, 对于样本不均衡情况下也可以使用。MCC的取值范围在 [-1, 1], 取值为1 表示预测与实际完全一致, 取值为0表示预测的结果还不如随机预测的结果, -1 表示预测结果与实际的结果完全不一致。因此我们看到, MCC 本质上描述了预测结果与实际结果之间的相关系数。

    值得注意的是,对于两个2分类器而言,可能其中一个分类器的 F1 值较高,而其 MCC 值较低, 这表示单一的指标是无法衡量分类器的所有优点与缺点的。

    • ROC

    TPR:True Positive Rate,真正率, TPR代表能将正例分对的概率(真实为正类的所有样本中,预测为正类的占多少/Recall)

    FPR: False Positive Rate, 假正率, FPR代表将负例错分为正例的概率(真实为负类的所有样本中,预测(错分)为正类的占多少)

    使用FPR作为横坐标,TPR作为纵坐标得到ROC曲线如下:

    ROC曲线中的四个点和一条线:

    1)(0,1):FN=0,FP=0(错分为负类或正类的样本数都为0),表示所有样本都正确分类,这是一个完美的分类器;

    2)(1,0):TN=0,TP=0(正确分类为负类或正类的样本数都为0),表示所有样本都分类错误,这是一个最糟糕的分类器;

    3)(0,0):FP=0,TP=0(错分、正确分类为正类的样本数都为0),表示所有样本都分类为负;

    4)(1,1):TN=0,FN=0(正确分类、错分为负类的样本数都为0),表示所有样本都分类为正;

    5)上图虚线 y = x,该对角线实际上表示一个随机猜测的分类器的结果。

    经过以上分析,ROC曲线越靠近左上角,该分类器的性能越好。(多个2分类器,每个2分类器都会有一个ROC曲线,选择ROC曲线靠近左上角的2分类器)。

    ROC曲线画法:在二分类问题中,测试/验证部分通常是获得一个概率表示当前样本属于正例的概率, 我们往往会采取一个阈值,大于该阈值的为正例, 小于该阈值的为负例。 当该阈值为0时,也就是把所有样本预测为正类,此时FPR、TPR=1最大; 当该阈值为1时,也就是把所有样本预测为负类,此时FPR、TPR=0最小;当增大阈值时,预测为正类(正确预测为正类)和错分为正类的样本都减少,即TP、FP都减小,FPR、TPR减小。每次选取一个不同的threshold,就可以得到一组FPR和TPR,即ROC曲线上的一点(选取的阈值越多,ROC曲线越平滑)。

     

    • AUC

    很多时候, ROC 曲线并不能清晰的说明哪个分类器的效果更好, 而 AUC 恰恰能够对分类器做出直观的评价。AUC 为ROC 曲线下的面积, 这个面积的数值介于0到1之间, 能够直观的评价出分类器的好坏, AUC的值越大, 分类器效果越好(ROC曲线越接近左上角)。

    1)AUC=1: 完美分类器, 采用该模型,不管设定什么阈值都能得出完美预测(绝大多数时候不存在)

    2)0.5<AUC<1:优于随机猜测,分类器好好设定阈值的话,有预测价值。

    3)AUC=0.5(y=x下的面积): 跟随机猜测一样,模型没有预测价值。

    4)AUC<0.5:比随机猜测还差,但是如果反着预测,就优于随机猜测。

    值得一提的是,两个模型(两个2分类器)的AUC 相等并不代表模型的效果相同, 比如这样:

    • P-R曲线

    P-R 曲线其横坐标为 Recall, 纵坐标为 Precision, 其能帮助我们很好的做出权衡。

     在上图中,我们发现, A 完全包住了C, 着意味着A 的Precision 与 Recall 都高于C, A优于C。 而对比 A,B, 二者存在交叉的情况,此时采用曲线下面积大小衡量性能,面积越大,性能越好,此处的A优于B。

    P-R曲线于ROC曲线的对比:

    ROC曲线特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。)

    下图是ROC曲线和Precision-Recall曲线的对比:

    a,c为ROC曲线,b,d为P-R曲线;a,b 为在原始测试集(balanced)上的结果(两个2分类器的ROC曲线和P-R曲线),c,d为把原始数据集的负样本增加10倍后的结果。很明显,ROC曲线基本保持不变,P-R曲线变化较大。 

    为什么取AUC较好?因为一个二分类问题,如果你取P或R的话,那么你的评价结果和你阈值的选取关系很大,但是我这个一个分类器定了,我希望评价指标是和你取得阈值无关的,也就是需要做与阈值无关的处理。所以AUC较P-R好。

    所以对于2分类问题,我们一般采用AUC(ROC曲线下的面积)作为评价指标。

    • sklearn中的使用
    from sklearn.metrics import confusion_matrix,classification_report,accuracy_score,precision_score,recall_score,f1_score,roc_auc_score
    #Y_test1,Y_pred1分别是表示标签和预测结果的整数索引 
    Y_test1 = np.array([0,1]).repeat([8,12]) #假设标签为0的样本8个 为1的样本12个
    Y_pred1 = np.array([0,1]).repeat(10) #生成20个预测结果
    np.random.seed(3)  #随机打乱 label和预测结果
    np.random.shuffle(Y_test1)
    np.random.shuffle(Y_pred1)
    print(Y_test1)
    print(Y_pred1)
    #生成混淆矩阵 混淆矩阵的第一个值cm1[0][0]表示实际为0类,预测为0类的样本数,cm1[1][0]表示实际为1类,预测为0类的样本数。
    #其他类似
    cm1 = confusion_matrix(Y_test1,Y_pred1)
    print(cm1)
    #分类报告第一行 以标签0为正类 标签1为负类的情况下(此时cm[0][0]代表TP),计算presion、recall、f1
    #分类报告第二行 以标签1为正类 标签0为负类的情况下(此时cm[1][1]代表TP),计算presion、recall、f1
    print(classification_report(Y_test1, Y_pred1,target_names=["政治","体育"],digits=2))#假设标签0代表政治、标签1代表体育  digits可以设置小数点后保留的位数 默认是2
    print(accuracy_score(Y_test1,Y_pred1))#2分类多分类都可以用  
    #normalize参数默认为True计算准确率 ,normalize参数为False时,计算正确分类的样本数
    print(accuracy_score(Y_test1,Y_pred1,normalize=False))
    
    #以下指标默认情况下针对2分类(可以添加labels参数,改为多分类,之后会用到) 
    #各个指标的计算默认是以标签1为正类(pos_label参数=1) 标签0为负类的情况计算的(此时cm[1][1]代表TP)对应分类报告第2行
    print("--------------")
    print(precision_score(Y_test1,Y_pred1))
    print(recall_score(Y_test1,Y_pred1))
    print(f1_score(Y_test1,Y_pred1))
    
    print("------------------")
    #修改pos_label=0 各个指标的计算以标签0为正类 1为负类 对应分类报告第1行
    print(precision_score(Y_test1,Y_pred1,pos_label=0))
    print(recall_score(Y_test1,Y_pred1,pos_label=0))
    print(f1_score(Y_test1,Y_pred1,pos_label=0))
    
    print("-------------------")
    #计算各个指标的宏平均、微平均、加权平均
    print(f1_score(Y_test1,Y_pred1,average='micro'))
    print(f1_score(Y_test1,Y_pred1,average='macro'))
    print(f1_score(Y_test1,Y_pred1,labels=[0,1],average='weighted'))
    
    print(precision_score(Y_test1,Y_pred1,average='micro'))
    print(precision_score(Y_test1,Y_pred1,average='macro'))
    print(precision_score(Y_test1,Y_pred1,labels=[0,1],average='weighted'))
    print("------------------")
    #auc
    print(roc_auc_score(Y_test1,Y_pred1))
    

    2. 多分类评价指标

    评价多分类问题时,通常把多分类问题分解成多个2分类问题。即n分类,分解为n个2分类,每次以其中一个类为正类,其余类统一为负类,计算之前提到的各种2分类指标,最后再平均计算多分类评价指标,有三种平均方式,之后会介绍。

    分别计算第i类的Precision、Recall和F1-score(把第i类当作正类,其余所有类统一为负类):

     

     

    • Macro 宏平均

    分别计算第i类的Precision、Recall和F1-score(把第i类当作正类,其余所有类统一为负类),然后进行平均(假设总共有L个类):

    那么我们就得到最终的 Macro F1 的计算为:

    我们看到, Macro F1 本质上是所有类别的统计指标的算术平均值来求得的,这样单纯的平均忽略了样本之间分布可能存在极大不平衡的情况。

    • Micro :微平均

    Micro 算法在计算 Precision 与 Recall 时会将所有类直接放到一起来计算。

    • macro vs. micro

    Macro 相对 Micro 而言,小类别起到的作用更大,举个例子而言,对于一个四分类问题有:

     那么对于 Precision 的计算有:

    我们看到,对于 Macro 来说, 小类别相当程度上拉高了 Precision 的值,而实际上, 并没有那么多样本被正确分类,考虑到实际的环境中,真实样本分布和训练样本分布相同的情况下,这种指标明显是有问题的, 小类别起到的作用太大,以至于大样本的分类情况不佳。 而对于 Micro 来说,其考虑到了这种样本不均衡的问题, 因此在这种情况下相对较佳。

    总的来说, 如果你的类别比较均衡,则随便; 如果你认为大样本的类别应该占据更重要的位置, 使用Micro; 如果你认为小样本也应该占据重要的位置,则使用 Macro; 如果 Micro << Macro , 则意味着在大样本类别(样本数比较多的类)中出现了严重的分类错误; 如果 Macro << Micro , 则意味着小样本类别中出现了严重的分类错误。

    为了解决 Macro 无法衡量样本均衡问题,一个很好的方法是求加权的 Macro, 因此 Weighed F1 出现了。

    • weight加权平均

    Weighted 算法算术 Macro 算法的改良版,是为了解决Macro中没有考虑样本不均衡的原因, 在计算 Precision与Recall 时候,各个类别的 Precision 与 Recall要乘以该类在总样本中的占比来求和:

    那么我们就得到最终的 Macro F1 的计算为:

    •  ROC和AUC

    在多分类场景下,比如C分类,ROC曲线应该有多个(每次以其中一个类为正类,其余类为负类),多分类AUC的计算如下:

    •  sklearn中的使用

    多分类,以三分类为例:

    from sklearn.metrics import confusion_matrix,classification_report,accuracy_score,precision_score,recall_score,f1_score,roc_auc_score
    #Y_test2,Y_pred2分别是表示标签和预测结果的整数索引 
    Y_test2 = np.array([0,1,2]).repeat([8,12,10]) #假设标签为0的样本8个 为1的样本12个,为2的样本10个
    Y_pred2 = np.array([0,1,2]).repeat(10) #生成30个预测结果
    np.random.seed(3)  #随机打乱 label和预测结果
    np.random.shuffle(Y_test2)
    np.random.shuffle(Y_pred2)
    print(Y_test2)
    print(Y_pred2)
    #生成混淆矩阵 混淆矩阵的第一个值cm2[0][0]表示实际为0类,预测为0类的样本数,cm2[1][0]表示实际为1类,预测为0类的样本数。cm2[2][2]表示实际为2类,预测为2类的样本数
    #其他类似
    cm2 = confusion_matrix(Y_test2,Y_pred2)
    print(cm2) #三分类情况下 混淆矩阵3*3
    #分类报告第一行 以标签0为正类 其余类(标签1,2)为负类的情况下(此时cm[0][0]代表TP),计算presion、recall、f1
    #分类报告第二行 以标签1为正类 其余类(标签0,2)为负类的情况下(此时cm[1][1]代表TP),计算presion、recall、f1
    #分类报告第三行 以标签2为正类 其余类(标签0,1)为负类的情况下(此时cm[2][2]代表TP),计算presion、recall、f1
    #下面是多分类的三种平均指标
    #第i类的Precision= cm[i][i]/sum(cm[:][i]) 
    #第i类的Recall= cm[i][i]/sum(cm[i][:]) 
    #第i类的F1-score通过 第i类的Precision和Recall进行计算
    #micro 微平均 的Precision、Recall、F1-score都相等 也等于分类准确率 其值就是混淆矩阵对角线元素之和比上混淆矩阵所有元素和
    print(classification_report(Y_test2, Y_pred2,target_names=["政治","体育","财经"],digits=2))#假设标签0代表政治、标签1代表体育、标签2代表财经 digits可以设置小数点后保留的位数 默认是2
    
    print("----------------")
    #准确率 正确分类的样本数 比上 总样本数
    print(accuracy_score(Y_test2,Y_pred2)) #混淆矩阵对角线元素之和 比上 混淆矩阵所有元素和
    #正确分类的样本数
    print(accuracy_score(Y_test2,Y_pred2,normalize=False))
    print("-------------------")
    
    #计算各个指标的宏平均、微平均、加权平均
    #不传labels参数也可以 会自动识别各个label
    print(f1_score(Y_test2,Y_pred2,average='micro'))
    print(f1_score(Y_test2,Y_pred2,average='macro'))
    print(f1_score(Y_test2,Y_pred2,labels=[0,1,2],average='weighted'))
    
    print(recall_score(Y_test2,Y_pred2,average='micro'))
    print(recall_score(Y_test2,Y_pred2,average='macro'))
    print(recall_score(Y_test2,Y_pred2,labels=[0,1,2],average='weighted'))
    

    3. 总结

    对于最终分类指标的选择, 在不同数据集,不同场景,不同时间下都会有不同的选择,但往往最好选出一个指标来做优化,对于二分类问题,我目前用 AUC 比较多一些, 多分类我还是看 F1 值(micro、macro、weighted)。

     

     

    展开全文
  • 新闻分类:多分类问题

    千次阅读 2018-09-13 21:25:54
    因为有多个类别,且每个数据点只能划分到一个类别,所以是单标签、多分类问题 准备数据 首先,加载数据 from keras.datasets import reuters (train_data, train_labels), (test_data, test_labels)...
  • 常用的分类问题中的损失函数

    万次阅读 2019-04-20 12:43:26
    在监督式机器学习中,无论是回归问题还是分类问题,都少不了使用损失函数(Loss Function)。**损失函数(Loss Function)**是用来估量模型的预测值 f(x) 与真实值 y 的不一致程度。若损失函数很小,表明机器学习...
  • 分类问题评价指标

    千次阅读 2019-05-05 17:14:20
    分类问题评价指标评价指标准确率精确率召回率F1值ROCAUC 评价指标 二分类问题评价指标的相关整理,持续更新。 评价指标是针对同样的数据,输入不同的算法,或者输入相同的算法但参数不同而给出这个算法或者参数...
  • 机器学习中的分类问题基本思路

    千次阅读 2018-11-19 06:08:43
    我们来讨论下分类问题。我们主要讨论的分类算法是逻辑回归,即logistic regression,它是当今最流行也是应用最为广泛的学习模型。不过,虽然这个模型名字里有”回归”字样,但它确确实实是标准的分类模型,而不是...
  • 深度学习---多标签分类问题

    万次阅读 多人点赞 2018-05-06 11:18:10
    由于本项目既有涉及multi-class(多类分类),也有涉及multi-label(多标记分类)的部分,multi-class分类网上已经很多相关的文章了。这里就说一说multi-label的搭建网络的部分。之后如果有时间的时候,再说一说...
  • 深度学习 | (3) Pytorch中的分类问题损失函数

    千次阅读 多人点赞 2019-12-11 20:40:15
    一、二分类损失函数 1.1 从一个简单的实例说起 对于一个二分类问题,比如我们有一个样本,有两个不同的模型对他进行分类,那么它们的输出都应该是一个二维向量,比如: 模型一的输出为:pred_y1=[0.8,0.2] 模型二的...
  • 这一节,用pytorch实现神经网络分类问题,再次熟悉pytorch搭建神经网络的步骤。 1. 问题的提出 分类问题是将数据划分种类的一种问题,常见的有二分类和多分类问题,这节就是做一个简单的二分类问题。 同样,我们先做...
  • 回归问题和分类问题

    千次阅读 2019-08-30 18:08:13
    1、回归问题通常是用来预测一个值,如预测房价、未来的天气情况等等,例如一个产品的实际价格为500元,通过回归分析预测值为499元,我们认为这是一个比较好的回归分析。一个比较常见的回归算法是线性回归算法(LR)...
  • 在机器学习中经常将多分类问题处理成二分类问题,给出三种以上的拆分策略 1) 一对一(One vs. One, 简称OvO) OvO将N个类别两两配对,从而产生N(N-1)/2个二分类任务。在测试阶段,新样本将同时提交给所有分类器,...
  • 补充:(1)、Guide To Multi-Class Multi-Label Classification With Neural Networks In Python(2)、多标签分类(multilabel classification )1、使用caffe训练一个多标签分类/回归模型2、keras解决多...
  • sklearn下对于二分类和多类分类问题的评估方法总结

    万次阅读 多人点赞 2019-08-16 17:10:15
    目录 二分类: 多分类: 一、什么是多类分类? ...二、如何处理多类分类?...评估指标:混淆矩阵,accuracy,precision,f1-score,AUC,ROC,P-R(不能用) ... 多类分类问题不能用P-R曲线 5.其他评...
  • 二分类器解决多分类问题

    千次阅读 2019-05-14 16:38:20
    两种思路: 以SVM为例 1.one-versus-rest 思想: 假设一共有1,2,3,4,5个类别的数据 ...在预测阶段,对于输入的待分类样本,分别从第一个分类器开始询问是否属于该类别,该分类器“承认”,就将该样本...
  • 机器学习之分类问题的评价指标

    万次阅读 多人点赞 2021-02-23 23:45:01
    分类问题的模型评价指标 在回归问题中,我们可能会采用均方误差衡量模型的好坏。但在分类问题中,我们需要判断模型是否被正确分类了,于是有如下的评价标准: True表示预测正确,False表示预测错误,将负例错误预测...
  • 【火炉炼AI】机器学习010-用朴素贝叶斯分类器解决多分类问题 【本文所使用的Python库和版本号】: Python 3.5, Numpy 1.14, scikit-learn 0.19, matplotlib 2.2   前面讲到了使用逻辑回归分类器解决多分类问题...
  • 分类问题下的评价指标分析(Precision, Recall, F1)二分类下的评价指标Accuracy几个常用的术语PrecisionRecallF1-score 二分类下的评价指标 Accuracy 分类算法有很多,不同分类算法有很多不同的变种。不同的分类...
  • 我们首先来看一下混淆矩阵,对于二分类问题,真实的样本标签有两类,我们学习器预测的类别有两类,那么根据二者的类别组合可以划分为四组,如下表所示: 上表即为 混淆矩阵 ,其中,行表示预测的label值,列...
  • 分类问题

    万次阅读 2018-11-23 14:30:06
    记录下,吴恩达老师课程 Classfication的一个笔记,主要是公式的推导。 笔记主要分为以下内容: 1、分类的用途 2、分类的假设函数选取 h...相比于回归问题,分类问题得到的 是 离散的值(discrete values),我们主要...
  • 关于少量数据的多分类问题

    千次阅读 2018-08-27 21:10:18
     原始数据可以从链接中下载,是一关于某项疾病的分类问题,表格中最后一列为标签,前面的278列是各项特征指标。其中标签为1 的为为患病样本,标签为2——15的为确定的患病的样本,标签为16的为不确定的患病样本。...
  • 分类问题的交叉熵损失函数; 在二分类问题中,损失函数为交叉熵损失函数。对于样本(x,y)来讲,x为样本 y为对应的标签。在二分类问题中,其取值的集合可能为{0,1},我们假设某个样本的真实标签为yt,该样本的yt=1...
  • 本文转载自:http://blog.csdn.net/login_sonata/article/details/54290402建议同时...举两个例子:①在一个二分类问题中,训练集中class 1的样本数比上class 2的样本数的比值为60:1。使用逻辑回归进行分类,最后结...
  • 1 前言 使用有监督学习的问题可以被分为两类:回归问题和分类问题。...分类问题:如果我们预测的结果是以离散形式表示的,即我们将多个输入变量与多个不同的类别建立映射关系时,则这样的问题称之为分类问题。 ...
  • 机器学习系列(七)——分类问题(classification)

    万次阅读 多人点赞 2018-08-19 19:28:41
    这一篇博客将介绍机器...与回归问题(regression)相比,分类问题的输出不再是连续值,而是离散值,用来指定其属于哪个类别。分类问题在现实中应用非常广泛,比如垃圾邮件识别,手写数字识别,人脸识别,语音识别...
  • 把问题转化为一个或多个单目标分类问题,或是回归问题。2)算法适应。修改学习算法使得能直接处理multilabel的数据。问题转化方法 dubbed PTx法。包括PT1 对有多标签的数据随机选取一个标签 PT2 直接把标签数大于1...
  • 分类问题中的数据不平衡问题

    万次阅读 2017-05-09 11:22:43
    即类别不平衡,为了使得学习达到更好的效果,因此需要解决该类别不平衡问题。Jason Brownlee的回答:原文标题:8 Tactics to Combat Imbalanced Classes in Your Machine Learning Dataset   当你在对一个类别不...
  • 用BP神经网络解决简单的分类问题

    万次阅读 多人点赞 2018-03-09 20:13:21
    而在解决分类问题中,每一层的神经元数目的设定,可以根据数据选择,我目前的建议是输入数据是多少维,输入层就设置多少个神经元,每一个输入层神经元对应一个维度上的分量。数据总共要分成多少类,输出层就设置多少...
  • ANN神经网络入门——分类问题(MATLAB)

    万次阅读 多人点赞 2018-02-06 20:50:37
    写在前面 本篇博客的鸢尾花分类程序来源于博客http://www.cnblogs.com/heaad/archive/2011/03/07/1976443.html在上述博客中,作者主要介绍了以下三部分内容:(1)神经网络基本原理(2)AForge.NET实现前向神经网络...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 986,650
精华内容 394,660
关键字:

分类问题