r语言liftchart_Learn R | 机器学习中的分类器评价(一)

前言

到目前为止,机器学习中常用的算法我们已经学习了不少,仅就分类而言就有支持向量机、朴素贝叶斯、决策树等,这也就意味着当面对一个具体的分类任务时我们有多种分类器可供使用,并从中选取具有最优效果的分类器。那么,不同分类器之间的性能优异是如何界定的呢?

接下来,我们将从最基本的混淆矩阵入手,简单学习几种常用的分类器评价方法。

一、混淆矩阵

混淆矩阵(Confusion Matrix)是机器学习中用于展示模型预测精度的一种较为常见的方法。实际上,在之前算法的学习中,我们把训练样本的预测情况与实际情况相对照所建立的矩阵就是混淆矩阵。它的本质就是一个

列联表(

为分类的类别数)。

以二分类为例,分类结果的混淆矩阵如下图所示

根据此表中的四个基本指标可以衍生出多个分类器评价指标,常用指标如下:训练精度:

训练误差:

查准率(

):

查全率(

):

二、混淆矩阵的R实现

1. 使用自带的table()函数直接计算

以支持向量机(SVM)中的代码为例,计算混淆矩阵与准确率

> iris_Freq_3

> iris_Freq_3

iris_pred_3

setosa versicolor virginica

setosa 50 0 0

versicolor 0 49 1

virginica 0 0 50

> iris_accuracy_3

> iris_accuracy_3

[1] 0.9933333

若要计算其他指标,可将混淆矩阵的行列自行指定,然后通过基本的数学运算求得,这里不再赘述。

2. 使用caret包进行指标计算

在R中,得到这些指标还有更为方便的做法,我们可以借助caret包中的confusionMatrix()函数进行计算。该函数既可以直接使用混淆矩阵的结果,也可以输入预测/目标两列原始数据进行指标计算。只要确定好positive分类是那个,就能得出和之前一样的结果。

> library(caret)

> confusionMatrix(iris_Freq_3, positive = "1")

Confusion Matrix and Statistics

iris_pred_3

setosa versicolor virginica

setosa 50 0 0

versicolor 0 49 1

virginica 0 0 50

Overall Statistics

Accuracy : 0.9933

95% CI : (0.9634, 0.9998)

No Information Rate : 0.34

P-Value [Acc > NIR] : < 2.2e-16

Kappa : 0.99

Mcnemar's Test P-Value : NA

Statistics by Class:

Class: setosa Class: versicolor Class: virginica

Sensitivity 1.0000 1.0000 0.9804

Specificity 1.0000 0.9901 1.0000

Pos Pred Value 1.0000 0.9800 1.0000

Neg Pred Value 1.0000 1.0000 0.9900

Prevalence 0.3333 0.3267 0.3400

Detection Rate 0.3333 0.3267 0.3333

Detection Prevalence 0.3333 0.3333 0.3333

Balanced Accuracy 1.0000 0.9950 0.9902

这就是混淆矩阵在R中的简单实现,当针对同一分类任务生成不同模型时,所对应的混淆矩阵及其相应指标将成为我们模型选取的标准之一。

不过需要注意的是, 如果数据集中不同类别呈现不平衡的情况时,混淆矩阵的实用性是非常有限的。比如对信用卡交易是否异常做分类的情形,很可能1万笔交易中只有1笔交易是异常的。一个将将所有交易都判定为正常的分类器,准确率是99.99%。这个数字虽然很高,但却没有任何现实意义。

因此,我们引入接下来要学习的收益图与提升图,它们将混淆矩阵的缺点有所改进。

三、收益图与提升图

前面我们所学习的是混淆矩阵是模型在总体样本的表现,而这一节所要学习的收益图和提升图评估的是模型捕捉到的所有正响应,对比真实分类情况的表现。

那么模型捕捉到的正响应是用什么来表示呢?根据混淆矩阵,可组合出指标

,公式为:

这个指标就表示在所有预测中,预测为正的比例,我们把累积的

值作为收益图与提升图的公共横轴。

纵轴需要评价模型在预测为正的事件中,正确的概率。也就是模型的

指标(即第一节中提到的查全率)。这里的

也可称为收益值(Gain Value),以它为纵轴所画的图就是收益图。提升值(Lift Value)则进一步考虑了在某个

下的

的相对性概念,用

计算。

在R语言里,我们可以使用ROCR包中的prediction()和performance()函数将模型结果转化为可以直接使用的指标,具体操作如下:

> library(ROCR)

# 使用包中自带的数据集,包含预测值与类别两个变量

> data(ROCR.simple)

# 相关指标计算

# prediction需要分别制定预测概率与类别值,主要目的是将概率值与类别值转换为performance函数所要求的对象格式

> pred

# 收益图与提升图的可视化展示

> par(mfrow = c(1, 2))

# performance函数的三个参数分别为对象名,纵坐标,横坐标(该函数会生成众多测度指标以供使用)

> gain

> lift

> plot(gain, main = "Gain Chart")

> plot(lift, main = "Lift Chart")一般来讲,对于收益图,理想的情况应该是快速达到很高的累计收益值,并很快趋于100%;而理想的提升图应该在很高的提升值上保持一段,或缓慢下降一段,然后迅速下降到1。

那么对上面两幅图形可以这样解释:如果选择40%的

,那么模型的

约为80%左右(收益图),同时将比不使用任何模型获得约1.8倍的正回应(提升图)。

References:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值