美文网首页大数据,机器学习,人工智能
机器学习之旅---如何评价一个模型的好坏

机器学习之旅---如何评价一个模型的好坏

作者: Caesar_6953 | 来源:发表于2019-11-13 18:06 被阅读0次

2019/11/13 Caesar

前言

  上一篇文章我们初探了机器学习领域的第一个算法-kNN算法,今天我们就kNN算法来讨论,如何来评价一个模型是好是坏。

分类准确度

  在上一篇文章中,我们最终将 kNN算法实现出来,看似非常顺利,但是,我们有没有想过,这个结果一定是准确的吗?想到这个,我们必须来亲身验证下。现在我们已经训练好一个模型,但绝对不是立马可以拿到真实环境中跑,我们需要自己测试下。这里介绍一种方法,我们可以这样来操作,将原始数据中的一部分作为训练数据、另一部分作为测试数据。使用训练数据训练模型,再用测试数据看好坏。即通过测试数据判断模型好坏,然后再不断对模型进行修改。
  当我们将原始数据划分为训练数据、测试数据后,就可以进行下一步,计算分类准确度(accuracy),我们使用sklearn自带的手写识别的数据集进行计算准确度,进而巩固之前学的kNN算法,代码如下:

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
 
 
digits = datasets.load_digits()
 
x = digits.data #获取特征值
y = digits.target #获取标记
 
#将数据分为两部分,训练数据和测试数据
 
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2)
 
#指定key值
knn = KNeighborsClassifier(n_neighbors=3)
 
#进行拟合
knn.fit(x_train,y_train)
 
y_predict = knn.predict(x_test)
 
ratio = sum(y_predict==y_test)/len(y_test)
 
print(ratio)
 
#当我们不想要预测值的时候,我们可以直接使用knn对象的score函数进行得出准确度
ratio_bak = knn.score(x_test,y_test)
print(ratio_bak)

模型评价指标

  下面我将对几类机器学习模型评价指标做个总结,主要有混淆矩阵、精准率、召回率、F1 Score、ROC曲线等。

1.混淆矩阵

  所谓混淆矩阵,并没有名字那么唬人,其实就是一张表,如实记录统计样本被分类的结果,我们通过计算样本被正确归类的数量,就可以得到分类器的准确率。
  对于k分类问题,混淆矩阵为k✖k的矩阵,它的元素cij表示第i类样本被分类器判定为第j类的数量:

c11 ... c1k
... ... ...
ck1 ... ckk

以分类模型中最简单的二分类为例,对于这种问题,我们的模型最终需要判断样本的结果是0还是1,或者说是positive还是negative。我们通过样本的采集,能够直接知道真实情况下,哪些数据结果是positive,哪些结果是negative。同时,我们通过用样本数据跑出分类型模型的结果,也可以知道模型认为这些数据哪些是positive,哪些是negative。
因此,我们就能得到这样四个基础指标,我称他们是一级指标(最底层的):

真实值是positive,模型认为是positive的数量(True Positive=TP)
真实值是positive,模型认为是negative的数量(False Negative=FN):这就是统计学上的第一类错误(Type I Error)
真实值是negative,模型认为是positive的数量(False Positive=FP):这就是统计学上的第二类错误(Type II Error)
真实值是negative,模型认为是negative的数量(True Negative=TN)

将这四个指标一起呈现在表格中,就能得到如下这样一个矩阵,我们称它为混淆矩阵(Confusion Matrix):


image.png

2.精度与召回率

  精准率(查准率)与召回率(查全率)是分类问题的评价指标。对于二分类问题,它的样本只有正样本和负样本。举个栗子,在垃圾邮件分类中,正样本是垃圾邮件,负样本是正常邮件。
  测试样本中正样本被分类器判定为正样本的数量记为TP(True Positive),正样本被判定为负样本的数量记为FN(False Negative);负样本被判定为负样本的数量记为TN(True Negative),负样本被判定为正样本的数量记为FP(False Positive)。

精度定义为 TP/(TP+FP),精度是被分类器判定为正样本的样本中真正的正样本所占的比例,反映的是正样本分类的准确率。我们关注的那个事件,预测的有多准。
召回率定义为TP/(TP+FN),召回率是所有正样本中被分类器判定为正样本的比例。我们关注的那个事件真实的发生情况下,我们成功预测的比例是多少。

  那么这两个指标我们在实际工业环境下,如何取舍,毕竟当精准率(查准率)上去了,召回率(查全率)可能就下降了。关键是视场景而定
  比如我们做了一个股票预测系统,未来股票是📈还是📉这样一个二分类问题。很显然“涨”才是我们关注的焦点,那么我们肯定希望:系统预测上涨的股票中,真正上涨的比例越大越好,这就是希望查准率高。那么我们是否关注查全率呢?在大盘中有太多的真实上涨股票,虽然我们漏掉了一些上升周期,但是我们没有买进,也就没有损失。但是如果查准率不高,预测上涨的结果下跌了,那就是实实在在的亏钱了。所以在这个场景中,查准率更重要。
  当然也有追求召回率的场景,在医疗领域做疾病诊断,如果召回率低,意味着本来有一个病人得病了,但是没有正确预测出来,病情就恶化了。我们希望尽可能地将所有有病的患者都预测出来,而不是在看在预测有病的样例中有多准。
  但是,在实际业务场景中,也有很多没有这么明显的选择。那么在同时需要关注精准率和召回率,如何在两个指标中取得平衡呢?在这种情况下,我们使用一种新的指标:F1 Score。

3.F1 Score

  F1 分数(F1 Score),是统计学中用来衡量二分类模型精确度的一种指标。它同时兼顾了分类模型的精确率和召回率。F1 分数可以看作是模型精确率和召回率的一种加权平均,它的最大值是1,最小值是0。(出自百度百科)

F1 分数:我认为精确率和召回率同等重要,一视同仁,权重相同。

image.png

Fβ 分数:更一般的式子,有 F2 分数和 F0.5 分数。 F1 分数认为召回率和精确率同等重要,F2分数认为召回率的重要程度是精确率的2倍,而 F0.5 分数认为召回率的重要程度是精确率的一半。

image.png

  

4. ROC曲线

  在学习 ROC 曲线前,先了解三个相关概念:分类阈值、 TPR 和 FPR 。

4.1相关概念

4.1.1分类阈值

  分类阈值,即设置判断样本为正例的阈值thr。举个栗子,在垃圾邮件检测中,预测模型对一封邮件的预测分数为0.8,那它应该是属于垃圾邮件还是正常邮件。因此我们必须设定一个分类阈值 thr,假设阈值为0.6,那么这封邮件将会被归类为垃圾邮件。

4.1.2真阳率(召回率、 TPR)

  真阳率是所有正样本被分类器判定为正样本的比例。 TPR = TP/(TP+FN)

4.1.3假阳率(FPR)

  假阳率是所有负样本被分类器判定为正样本的比例。 FPR = FP/(FP+TN)

4.2 ROC概念

  ROC曲线用来描述TPR和FPR之间的关系。x轴是FPR,y轴是TPR。TPR越大越好,FPR越小越好,但这两个指标通常是矛盾的。为了增大TPR,可以预测更多的样本为正例,与此同时也增加了更多负例被误判为正例的情况。


image.png

  我们可以关注图中ROC曲线以下的面积,也就是AUC面积,来评价一个模型的好坏。

4.3 AUC面积

  ROC曲线下方由梯形组成,矩形可以看成特征的梯形。因此,AUC的面积可以这样算:(上底+下底)* 高 / 2,曲线下面的面积可以由多个梯形面积叠加得到。AUC越大,分类器分类效果越好。

AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
AUC = 0.5,跟随机猜测一样,模型没有预测价值。
AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

相关文章

  • 机器学习常用评价指标

    机器学习常用评价指标 在机器学习任务中,如何对模型的好坏对模型的优化/定量评价/改进具有重大的作用,通过不同的指标...

  • 机器学习之旅---如何评价一个模型的好坏

    2019/11/13 Caesar 前言 上一篇文章我们初探了机器学习领域的第一个算法-kNN算法,...

  • 如何评价模型好坏

    数据集(训练&验证&测试)评价分类结果混淆矩阵分类评价指标准确率precision:召回率recallF1-sco...

  • 如何评价模型的好坏

    1.训练数据集&测试数据集 将原始数据中的一部分作为训练数据、另一部分作为测试数据。使用训练数据训练模型,再用测试...

  • 机器学习中的评价指标

    机器学习中的评价指标 当一个机器学习模型建立好了之后,即模型训练已经完成,我们就可以利用这个模型进行分类识别。 正...

  • 交叉验证与算法评价

    机器学习问题中如何评价一个算法的好坏尤为重要,它决定了算法的改进方向。 有人想直接用训练集的误差来评价算法的优劣。...

  • 如何评价分类模型好坏

    前言 在上一篇文章中,我们了解了k近邻算法,也学习了KNN算法的流程,并且手动实现了python代码和封装。那么在...

  • 交叉验证(Cross Validation)比较

    模型评价的目的:通过模型评价,我们知道当前训练模型的好坏,泛化能力如何?从而知道是否可以应用在解决问题上,如果不行...

  • 深度学习之偏差与方差

    机器学习就是利用训练数据去训练一个模型(model),使得这个模型尽可能逼近真实,用来衡量模型好坏的依据是模型的误...

  • 第二章 模型评估与选择 (需要概率论和数理统计知识)

    机器学习最终目标就是希望得到泛化误差比较小的模型, 如何利用现有的数据得到泛化误差小的模型以及模型评价的量化标准...

网友评论

    本文标题:机器学习之旅---如何评价一个模型的好坏

    本文链接:https://www.haomeiwen.com/subject/xsphictx.html