本文是对 Hands-On Machine Learing with Scikit-Learn and TensorFlow 书中的 main changllenges of machine learning 一节做一个总结。
简而言之,我们使用机器学习做任务的时候,就是将数据投入到所选择的算法中,获取满意的模型。所以数据与算法是两个很重要的部分,也是我们在做机器学习时需要注意,下面就来聊一下做项目时遇到的挑战。
1. 数据量不足
数据是驱动机器学习算法的动力,数据量不足是大家做机器学习经常会遇到的问题,主要有两个原因,一是获取数据的难度很大,二是获取数据的成本很高。下图是微软的研究者在处理自然语言消歧问题时,不同算法随着数据量增多,准确率变化的情况。
大家可以很清楚的看到,随着数据量的增大即使很简单的算法也可以表现得很好的,但是小或者中等的数据量是很常见的,换句话说在同等数据量的情况下算法的选择显得很关键。
2. 数据没有代表性
数据没有代表性,那么数据量即使很大,效果依旧不行。举个例子,假设要了解一个地区的初一新生的身高状况,而得到的数据只是来自这个地区的一个学校,这样的话,这样的数据就不具备代表性。
3. 低质量的数据
采集到的数据如果存在着许多错误,那么就很大程度上发现不了数据下潜藏的秘密,得到的系统也不会表现得好。在处理数据的时候,一是要丢弃掉异常值,二是要考虑如何处理缺失值。
4. 特征工程
在把数据扔进算法之前,我们需要对数据的特征进行处理,一般是这样三个操作,一是特征选择,二是特征提取,三是产生新特征。
上面四点都是关于数据的可能存在的问题,下面来谈谈算法。
我们在选择算法做机器学习项目的时候,经常会遇到两种情况:
一 、生成的模型在训练集效果不好 这是欠拟合
二 、生成的模型在训练集效果好,但是测试集效果差,这是过拟合
相当于是在博弈,最终的效果要达到生成的模型在训练集效果好,而且在测试集效果也要好。