机器学习算法的性能评估
来源:互联网 发布:2017年国产动漫数据 编辑:程序博客网 时间:2024/06/07 03:31
本文介绍机器学习算法的性能评估的方法,包括算法高偏差还是高方差的诊断,学习曲线等。从工程应用的角度来讲,算法只需要知道原理,并不需要真正去实现,数值专家们帮我们实现了大量的开源算法可供我们使用。而怎么样评估某个算法的性能以及怎么样去优化性能反而是工程应用领域最重要的问题。
为什么需要评估机器学习算法的性能
当我们辛苦开发出来的机器学习算法不能很好地预测新数据时,我们该怎么办呢?一般情况下,有以下几个方法:
- 获取更多的训练数据
- 减少输入的特征数量,避免出现过拟合
- 增加有价值的特征,即重新解读并理解训练数据
- 增加多项式特征
- 减小正则化参数
λ - 增大正则化参数
λ
如何评估机器学习算法,以便遇到问题时能知道用上面方法中的哪个方法?
- 对机器学习算法的性能进行评估,接下来就要介绍机器学习算法性能评估的方法
- 对机器学习算法进行诊断,诊断是指通过对机器学习算法进行测试,以便找出算法在哪种情况下能良好地工作,哪种情况下无法良好地工作。进而找出算法性能优化的方向和方法。
预测函数模型性能评估
怎么样判断我们的预测函数模型的性能是可以接受的呢?
我们可以把训练数据集分成两部分,随机选择 70% 的训练数据作为训练数据集,用来训练机器学习算法;另外 30% 作为测试数据集,用来验证训练出来的机器学习算法针对这些测试数据集的误差。一个好的机器学习算法应该是对训练数据集成本比较低,即较准确地拟合数据,同时对测试数据集误差比较小,即对未知数据有良好的预测性。
如何计算测试数据集的误差呢?
简单地说,就是用测试数据集和训练出来的机器学习算法参数,代入相应的成本函数里计算测试数据集的成本。
针对线性回归算法,我们可以使用下面的公式计算测试数据集的误差,其中 m 是测试数据集的个数:
针对逻辑回归算法,可以使用下面的公式计算测试数据集的误差,其中 m 是测试数据集的个数:
针对分类问题时,还可以用分类错误率来代替成本函数算法,从而更直观地观察到一个算法对测试数据集的误差情况。我们定义错误率为:
如何直观地理解错误率?如果预测出错了 (即实际值是 1 预测为 0 ,或者实际值是 0 预测为 1) ,则成本算为 1 。如果预测正确了,成本算为 0 。
测试数据集的错误率定义为:
其中,m 为测试数据集的个数,
模型选择
模型选择问题包括怎么样选择多项式来拟合数据,怎么样把数据集分成训练数据集,验证数据集,测试数据集,怎么样确定正则化参数 lambda 的值等等。
以多项式模型选择为例。假设我们用一阶多项式,二阶多项式,三阶多项式 … 十阶多项式来拟合数据,多项式的阶数我们记为 d。我们把数据集分成训练数据集和测试数据集。先用训练数据集训练出机器学习算法的参数
为了解决这个问题,我们把数据分成三部分,随机选择 60% 的数据作为训练数据集,其成本记为
在模型选择时,我们使用训练数据集来训练算法参数,用交叉验证数据集来验证参数,选择交叉验证数据集的成本
当然,在实践过程中,很多人直接把数据集分成训练数据集和测试数据集,然后通过比较测试数据集选择的成本来选择模型。
方差与偏差 Bias vs. Variance
假定
正则化与方差及偏差的关系
当 lambda 为零时,容易产生过拟合,即
可以把数据集的成本作为纵坐标,lambda 作为横坐标,把
学习曲线
我们可以把
我们可以观察到当高偏差 (High Bias, Under Fitting) 时,随着训练数据集的增加,
当高方差产生时 (High Variance, Over Fitting),比如我们用 100 阶的多项式来拟合数据。随着训练数据集 m 的增加,
当需要改进学习算法时,可以画出学习曲线,以便判断算法是处在高偏差还是高方差问题。
决定下一步行动
回到本周开始的地方,我们可以总结那些行动可以解决哪些算法问题。
- 获取更多的训练数据 -> 解决高方差问题 (High Variance, Over Fitting)
- 减少输入的特征数量,避免出现过拟合 -> 解决高方差问题
- 增加有价值的特征,即重新解读并理解训练数据 -> 解决高偏差问题 (High Bias, Under Fitting)
- 增加多项式特征 -> 解决高偏差问题 (High Bias, Under Fitting)
- 减小正则化参数 lambda -> 解决高偏差问题 (High Bias, Under Fitting)
- 增大正则化参数 lambda -> 解决高方偏差问题 (High Variance, Over Fitting)
神经网络的过拟合
针对神经网络时,我们可以设计两套方案。第一套方案是使用小型的神经网络,即只有一个隐藏层,隐藏层的神经单元个数也比较少。第二套是使用大型的神经网络,可以有多个隐藏层,每个隐藏层有多个神经单元。
一般来讲,方案一可能会导致高偏差,即欠拟合,但计算成本很低。而方案二可能会导致过拟合,且计算成本很高。针对欠拟合的情况,我们可以通过调整正则项参数 lambda 来解决。一般来讲,针对一个实际问题,选择一个大一点的神经网络,通过 lambda 纠正过拟合现象,这样的神经网络架构会比小型神经网络性能要好。
另外一个问题,多个隐藏层好还是一个隐藏层好呢?针对不同的实际问题结论是不一样的。一个通用的方法是在不同隐藏层个数的神经网络里进行比较,通过计算交叉验证数据集的成本
- 机器学习算法的性能评估
- 机器学习--算法评估
- 机器学习-2算法的评估
- 机器学习性能评估指标
- 机器学习性能评估指标
- 机器学习性能评估指标
- 机器学习性能评估指标
- 机器学习性能评估指标
- 机器学习性能评估指标
- 机器学习性能评估指标
- 机器学习中评估算法的常用评价指标
- 机器学习模型性能评估方法笔记
- 机器学习性能评估指标 ROC
- 机器学习性能评估指标资料汇总
- 系统学习机器学习之算法评估
- 机器学习的模型评估
- 机器学习 --- 分类算法模型评估
- Machine Learning第六讲[应用机器学习的建议] --(一)评估学习算法
- git更新代码
- go 语言
- 学习源代码内核一定要独立思考、勤于实践
- AndroidManifest.xml
- java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{
- 机器学习算法的性能评估
- 1023. Have Fun with Numbers (20)【字符串操作】——PAT (Advanced Level) Practise
- hdoj2018--母牛故事
- 装饰模式实例与UML
- [iOS 开发问题解决]kCFStreamNetworkServiceTypeVoIP' is deprecated
- 更改实体字段类型,引用实体的类会重新编译【java.lang.NoSuchMethodError】
- 易错
- 三个有意思的php函数
- python核心编程-函数-内嵌函数