在样本数据上摸爬滚打
一、模型怎么就不行了呢!
在验证集和测试集与机器学习有什么关系一文中看到这样一段描述[1]:
假设你是一个初创公司的老板,你们公司的目标是给爱猫人士提供源源不断的猫猫图片。于是,你利用神经网络,搭建了一个计算机视觉体系,专门用来检测图片中的猫猫。
你创建了一个手机app,用户可以将各种各样的图片上传到这个app上。你想自动识别出哪些是猫猫的图片。
通过从不同网站下载猫猫的图片和不是猫猫的图片,你的团队可以获得一个比较大的训练集。他们将数据集进行三七划分,其中30%为测试集(test set),70%为训练集(training set)。利用这些数据,你的团队就可以建立一个在训练集和测试集上都可以运行良好的猫猫检测系统。
但是,当你将这个分类器部署到手机app上时,你会发现,这个效果实在太差了!
这样的场景其实经常遇到,明明模型建设的准确率不要太好,却在实际检验中摔的一塌糊涂,还得个“模型不行”的结果,郁闷的一塌糊涂。
很大程度而言,问题出在样本数据上。
例如上面场景的原因是:
用户上传的图片与你的训练集中的图片并非一样:
用户上传的图片通常由他们的手机拍摄,而手机拍摄的图片往往分辨率较低,像素模糊,光线较差。
而你在训练集中所使用的图片来自于网络,因此你的算法并不能很好地识别用户上传在app上的图片。
因此样本数据的选择是个很值得注意的问题。
二、样本构建要考虑哪些因素?
(1)黑白样本的比例
样本数据中,黑样本要多少?白样本要多少?黑白样本的比例怎样才合理?
这里需要引入 样本不平衡 理念[3]。
所谓的样本不平衡问题:指的是数据集中各个类别的样本数量极不均衡。
以二分类问题为例,假设正类的样本数量远大于负类的样本数量,通常情况下把样本类别比例超过4:1(也有说3:1)的数据就可以称为不平衡数据。
那么训练数据不均衡会导致什么问题呢[4]?
如果训练集的90%的样本是属于同一个类的,而我们的分类器将所有的样本都分类为该类,在这种情况下,该分类器是无效的,尽管最后的分类准确度为90%。
所以在数据不均衡时,准确度(Accuracy)这个评价指标参考意义就不大了。
实际上,如果不均衡比例超过4:1,分类器就会偏向于大的类别。
有很多因数据限制导致样本不均衡的解决方法[4],但在数据条件充沛的情况下,需保障黑白样本比例。
(2)样本数据是否越多越好?
在到底需要多少数据?一文中指出:数据比模型更重要,数据重要性 >> 模型重要性。机器学习模型的表现高度依赖于数据量 ,选择对的模型只是其次。
但数据不是越多越好,大量数据不代表一定有显著的意义[2]。
另外,如果10万的数据量已经能够训练出较好精确度的模型了,大规模提高数据量只能提升少量精确度,一般情况下是没有必要的。
(3)提取的特征越多越好吗?
样本的数据特征是不是提取的越多越好?越细越好?
例如同样一个项目求解,是否特征多的模型更优?“你看XXX用来那么多个特征,你的模型怎么只用这些特征?”
一般来说,我们追求尽量细分的数据,但并不追求过度拆解。
但同时大规模特征往往会面临稀疏矩阵的处理。
(4)数据量与特征量的比例
数据量和特征之间有什么关系吗?
在到底需要多少数据?一文中指出:谈论数据量,不能光说有多少条数据,一定也要考虑数据的特征数。
人们讨论数据量,往往讨论的是有多少条数据。但这个是不准确的,因为更加适合的评估应该是 数据条数
特征数,也就是样本量除以特征数。
如果你只有100条数据,但只有2个特征。如果用线性函数来拟合,相当于给你100个点来拟合到二次函数上,这个数据量一般来说是比较充裕的。但还是100个数据点,每个数据的特征数是200,那么很明显你的数据是不够的,过拟合的风险极高。
(5) 数据量与模型选择
不同算法在不同数据量下精度、效率都是不一样的。
例如在到底需要多少数据?一文中提到:
数据量很小,用朴素贝叶斯、逻辑回归或支持向量机等
数据量适中或者较大,用树模型,优先 xgboost和lightgbm等
数据量较大,尝试使用神经网络。
三、参考资料
有大量书籍介绍各种算法,但是对于样本采集方面的信息少之又少,可实际上样本是很关键的一步。写本文是为了解答一些疑问,感谢各种分享。
[1]验证集和测试集与机器学习有什么关系:https://www.jianshu.com/p/2a45762420c9
[2] 到底需要多少数据:https://www.jianshu.com/p/e90850b6a0d5
[3] 样本不平衡问题:https://www.jianshu.com/p/8df2d2d78b16
[4] 样本不均衡:https://blog.csdn.net/akon_wang_hkbu/article/details/78196704