笔者寄语:机器学习中交叉验证的方式是主要的模型评价方法,交叉验证中用到了哪些指标呢?

交叉验证将数据分为训练数据集、测试数据集,然后通过训练数据集进行训练,通过测试数据集进行测试,验证集进行验证。

模型预测效果评价,通常用相对绝对误差、平均绝对误差、根均方差、相对平方根误差等指标来衡量。

只有在非监督模型中才会选择一些所谓“高大上”的指标如信息熵、复杂度和基尼值等等。

其实这类指标只是看起来老套但是并不“简单”,《数据挖掘之道》中认为在监控、评估监督模型时还是一些传统指标比较靠谱,例如平均绝对误差(MAE)、平均平方差(MSE)、标准平均方差(NMSE)和均值等,计算简单、容易理解;

三者各有优缺点,就单个模型而言,

——————————————————————————

相关内容:

1、 R语言︱ROC曲线——分类器的性能表现评价

2、机器学习中的过拟合问题

3、R语言︱机器学习模型评估方案(以随机森林算法为例)

——————————————————————————

1、绝对误差与相对误差

绝对误差(AbsoluteError)=原值-估计值

相对误差(RelativeError)=(原值-估计值)/原值

2、平均绝对误差(MeanAbsoluteError , MAE)

平均绝对误差=︱原值-估计值︱/n

其中n代表数据个数,相当于误差绝对值的加权平均值。

由于预测误差有正有负,为了避免正负相抵消,故取误差的绝对值进行综合并取其平均数,这是误差分析的综合指标法之一。

优缺点:虽然平均绝对误差能够获得一个评价值,但是你并不知道这个值代表模型拟合是优还是劣,只有通过对比才能达到效果;

3、均方误差(MeanSquaredError , MSE)≈方差

跟方差一样,均方误差是预测误差平方之和的平均数,它避免了正负误差不能相加的问题。

由于对误差进行了平方,加强了数值大的误差在指标中的作用,从而提高了这个指标的灵敏性,是一大优点。均方误差是误差分析的综合指标法之一。

优缺点:均方差也有同样的毛病,而且均方差由于进行了平方,所得值的单位和原预测值不统一了,比如观测值的单位为米,均方差的单位就变成了平方米,更加难以比较。

4、均方根误差(RootMeanSquaredError , RMSE)≈标准差

这是均方误差的平方根,代表了预测值的离散程度,也叫标准误差,最佳拟合情况为。均方根误差也是误差分析的综合指标之一。

优点:标准化平均方差对均方差进行了标准化改进,通过计算拟评估模型与以均值为基础的模型之间准确性的比率,标准化平均方差取值范围通常为0~1,比率越小,说明模型越优于以均值进行预测的策略,

NMSE的值大于1,意味着模型预测还不如简单地把所有观测值的平均值作为预测值,

缺点:但是通过这个指标很难估计预测值和观测值的差距,因为它的单位也和原变量不一样了,综合各个指标的优缺点,我们使用三个指标对模型进行评估。

5、平均绝对百分误差(MeanAbsolute PercentageError , MAPE)≈标准差

跟上面的均方根误差有点相似。

6、混淆矩阵(Confusion Matrix)

对角线元素=分类器正确识别的百分率,而非对角线元素=错误判断的百分率。

混淆矩阵表 预测类
  类=1 类=0
实际类 类=1 A B
  类=0 C D


7、受试者工作特性(Receiver Operating Characteristic,ROC)曲线

一种非常有效的模型评价方法,可为选定临界值给出定量提示。

该曲线下的积分面积(Area)大小与每种方法优劣密切相关,反映分类器正确分类的统计概率,其值越接近1说明该算法效果越好。

可以用ROCR包来实现,可参考博客( R语言︱ROC曲线——分类器的性能表现评价)

分类器算法最后都会有一个预测精度,而预测精度都会写一个混淆矩阵,所有的训练数据都会落入这个矩阵中,而对角线上的数字代表了预测正确的数目,即True Positive+True Nagetive。

同时可以相应算出TPR(真正率或称为灵敏度)和TNR(真负率或称为特异度)。

我们主观上希望这两个指标越大越好,但可惜二者是一个此消彼涨的关系。除了分类器的训练参数,临界点的选择,也会大大的影响TPR和TNR。有时可以根据具体问题和需要,来选择具体的临界点。

————————————————————————————————————

(转)模型出错的四大原因及如何纠错

可供选择的机器学习模型并不少。我们可以用线性回归来预测一个值,用逻辑回归来对不同结果分类,用神经网络来对非线性行为建模。

我们建模时通常用一份历史数据让机器学习模型学习一组输入特性的关系,以预测输出。但即使这个模型能准确预测历史数据中的某个值,我们怎么知道它是否能同样准确地预测新的数据呢?

简而言之,如何评估一个机器学习模型是否真的“好”呢?

在这篇文章里,我们将介绍一些看似很好的机器学习模型依然会出错的常见情况, 讨论如何用偏差(bias)vs 方差 (variance),精确率 (precision)vs 召回率(recall)这样的指标来评估这些模型问题, 并提出一些解决方案以便你在遇到此类情况时使用。

高偏差还是高方差

检验一个机器学习模型时要做的第一件事就是看是否存在“高偏差(High Bias)”或“高方差(High Variance)”。

高偏差指的是你的模型对实验数据是否“欠拟合(underfitting)”(见上图)。高偏差是不好的,因为你的模型没有非常准确或者有代表性地反映输入值和预测的输出值之间的关系, 而且经常输出高失误的值(例如模型预测值与真实值之间有差距)。

高方差则指相反情况。出现高方差或者“过拟合”时, 机器学习模型过于准确,以至于完美地拟合了实验数据。这种结果看上去不错,但需引起注意,因为这样的模型往往无法适用于未来数据。所以尽管模型对已有数据运行良好,你并不知道它在其他数据上能运行得怎样。

那怎样才能知道自己的模型是否存在高偏差或是高方差呢?

一种直接了当的方法就是把数据一分为二:训练集和测试集。例如把模型在 70% 的数据上做训练,然后用剩下的 30% 数据来测量失误率。如果模型在训练数据和测试数据上都存在着高失误,那这个模型在两组数据都欠拟合,也就是有高偏差。如果模型在训练集上失误率低,而在测试集上失误率高,这就意味着高方差,也就是模型无法适用于第二组数据。

如果模型整体上在训练集(过往数据)和测试集(未来数据)上都失误率较低,你就找到了一个“正好”的模型,在偏差度和方差度间达到了平衡。

低精确率还是低召回率

即使机器学习模型准确率很高,也有可能出现其他类型的失误。

以将电子邮件分类为垃圾邮件(正类别 positive class)和非垃圾邮件(负类别 negative class)为例。99% 的情况下, 你收到的邮件都并非垃圾邮件,但可能有1% 是垃圾邮件。假设我们训练一个机器学习模型,让它学着总把邮件预测为非垃圾邮件(负类别), 那这个模型 99% 的情况下是准确的,只是从未捕获过正类别。

在这种情况下,用两个指标——精准率和召回率来决定究竟要预测多少百分比的正类别就很有帮助了。

精准率是测量正类别多常为真, 可以通过计算“真正(true positive, 例如预测为垃圾邮件且真的为垃圾邮件)”与“真负(true negative, 例如预测为垃圾邮件但事实并非如此)”总和中“真正”的个数而得出。

召回率则用来测量实际上的正类别多常被准确预测, 以计算真正与假负(false negative, 例如预测邮件为非垃圾邮件,但事实上邮件是垃圾邮件)的总和里有多少个真正而得出。

另一种理解精确率与召回率区别的方法是,精确率测量的是对正类别的预测中有多少比例成真,而召回率则告诉你预测中多常能真正捕获到正类别。因此,当正类别预测为真的情况很少时, 就出现了低精确率,当正类别很少被预测到的时候,就出现了低召回率。

一个良好的机器学习模型目标在于,通过试图最大化“真正”的数量以及最小化“假负”和“假正”的数量来实现精确率与召回率的平衡(如上图所示)。

5 种改进模型的方法

如果模型面临高偏差 vs. 高方差的问题,或者在精确率和召回率之间难以平衡,有几种策略可以采用。

比如机器学习模型出现高偏差时,你可以试试增加输入特征(input feature)的数量。上文已讨论过,高偏差出现于模型对背后的数据欠拟合时,在训练集和测试集都会出现高失误率。如果把模型的失误以基于输入特征个数的函数画出(见上图), 我们发现特征越多,模型的拟合度越好。

同理,对于高方差,你可以减少输入特征的数量。如果模型对训练数据过拟合,有可能是你用了太多特征,减少输入特征的数量会使模型对测试或者未来数据更灵活 。同样,增加训练样本的数量对高方差也是有益的, 这会帮助机器学习算法建出一个更通用的模型。

对要平衡低精确率与低召回率的情况,你可以调整区分正负类别的概率临界值(probability threshold)。对低精确率可以提高概率临界值,以使模型在指定正类别时更为保守。反之,遇到低召回率时可以降低概率临界值,以能更常预测到正类别。

经过足够迭代,就很有可能找到一个能平衡偏差与方差,精确率与召回率的合适的机器学习模型了。

本文是基于 Andrew Ng 在 Coursera 上的斯坦福机器学习课程笔记里教授的概念。

原文地址:http://www.kdnuggets.com/2016/12/4-reasons-machine-learning-model-wrong.html

——————————————————————————

相关内容:

1、 R语言︱ROC曲线——分类器的性能表现评价

2、机器学习中的过拟合问题

3、R语言︱机器学习模型评估方案(以随机森林算法为例)

——————————————————————————

R语言︱机器学习模型评价指标+(转)模型出错的四大原因及如何纠错相关推荐

  1. 机器学习模型评价指标+模型出错的四大原因及如何纠错

    笔者寄语:机器学习中交叉验证的方式是主要的模型评价方法,交叉验证中用到了哪些指标呢? 交叉验证将数据分为训练数据集.测试数据集,然后通过训练数据集进行训练,通过测试数据集进行测试,验证集进行验证. 模 ...

  2. R语言机器学习Caret包(Caret包是分类和回归训练的简称)、数据划分、数据预处理、模型构建、模型调优、模型评估、多模型对比、模型预测推理

    R语言机器学习Caret包(Caret包是分类和回归训练的简称).数据划分.数据预处理.模型构建.模型调优.模型评估.多模型对比.模型预测推理 目录

  3. R语言rpartb包树回归模型构建:基于前列腺prostate数据集

    R语言rpartb包树回归模型构建:基于前列腺prostate数据集 决策树是一种机器学习的方法.决策树的生成算法有ID3, C4.5和C5.0等.决策树是一种树形结构,其中每个内部节点表示一个属性上 ...

  4. R语言使用lm构建线性回归模型、并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型预测中系统误差的一个例子 、自定义函数计算R方指标和均方根误差RMSE

    R语言使用lm构建线性回归模型.并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图.可视化模型的残差.模型预测中系统误差的一个例子 .自定义函数计算R方指标和均方根误差RMSE 目 ...

  5. R语言使用lm构建线性回归模型、并将目标变量对数化实战:可视化模型预测输出与实际值对比图、可视化模型的残差、模型系数(coefficient)、模型总结信息(summary)、残差总结信息

    R语言使用lm构建线性回归模型.并将目标变量对数化(log10)实战:可视化模型预测输出与实际值对比图.可视化模型的残差.模型系数(coefficient).模型总结信息(summary).残差总结信 ...

  6. R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数及可视化、lasso回归模型分类评估计算(混淆矩阵、accuracy、Deviance)

    R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数(lasso regression coefficients)及可视化.lasso回归模型分类评估计算(混淆矩阵.accura ...

  7. R语言glmnet拟合岭回归模型实战:岭回归模型的模型系数(ridge regression coefficients)及可视化、岭回归模型分类评估计算(混淆矩阵、accuracy、Deviance)

    R语言glmnet拟合岭回归模型(ridge regression)实战:岭回归模型的模型系数(ridge regression coefficients)及可视化.岭回归模型分类评估计算(混淆矩阵. ...

  8. R语言使用lm构建线性回归模型、并将目标变量对数化实战:模型训练集和测试集的残差总结信息(residiual summary)、模型训练(测试)集自由度计算、模型训练(测试)集残差标准误计算

    R语言使用lm构建线性回归模型.并将目标变量对数化实战:模型训练集和测试集的残差总结信息(residiual summary).模型训练(测试)集自由度计算.模型训练(测试)集残差标准误计算(Resi ...

  9. R语言构建xgboost文本分类模型(bag of words):xgb.cv函数交叉验证确定xgboost模型的最优子树个数、交叉验证获取最优子树之后构建最优xgboost模型并评估模型文本分类效能

    R语言构建xgboost文本分类模型(bag of words):xgb.cv函数交叉验证确定xgboost模型的最优子树个数.交叉验证获取最优子树之后构建最优xgboost模型并评估模型文本分类效能 ...

最新文章

  1. mssql sqlserver in 关键字在值为null的应用举例
  2. CleanFlight 源码分析 一,任务调度
  3. 大学本科 java教材,大学本科自学java之路——IO
  4. LeetCode篇:1(两数之和)
  5. 毕业一周年,工作一周年零七天
  6. GoLand 快速入门教程
  7. php at,PHP的at符号
  8. Python 动图、动画制作 —— moviepy、matplotlib.animation
  9. 考虑SOC蓄电池 双向DC/DC 充放电控制 matlab仿真模型 buck boost
  10. 怎么下载卫星地图导出为离线包
  11. linux版本信息i686,i686 linux gnu
  12. Paypal无限转圈
  13. 7-6 输出上三角队形
  14. html里如何定位背景图片,Html+Css CSS中背景图片定位方法
  15. python求次幂_python如何求次幂?
  16. 联想G40笔记本U盘重装win7系统问题笔记
  17. Linux系统的下载神器XDM
  18. 【poj1013】 Counterfeit Dollar
  19. c# orcale 用C#批量导入图片到orcale的表中
  20. jive论坛消息的threaded显示模式解析

热门文章

  1. [枚举] Jzoj P3387 终极武器
  2. MySQL 开发实践
  3. SpringMVC框架使用注解执行定时任务(转)
  4. 使用python开发windows应用程序
  5. Python的hasattr(),getattr(),setattr()
  6. 时态数据库的应用介绍(1)
  7. 题外话:我想立刻辞职,然后闭关学习编程语言,我给自己3个月时间学习C语言!这样行的通吗...
  8. SynchronizedMap和ConcurrentHashMap 区别
  9. linux   find acm time
  10. jquery 提交数据