其实这里所说的数据量不足,可以换一种方式去理解:在维度高的情况下,数据相对少。
举一个特例,比如只有一维,和1万个数据,那么这种情况下,我们可以认为数据量其实是足够的,因为数据密度相对来说很高。
如果数据的维度有1000维,数据量仍然有1万,这种情况下,数据的密度就相当低了。
引用wiki里的两句话:
- The common theme of these problems is that when the dimensionality increases, the volume of the space increases so fast that the available data become sparse. This sparsity is problematic for any method that requires statistical significance. In order to obtain a statistically sound and reliable result, the amount of data needed to support the result often grows exponentially with the dimensionality.
[3]
or Hughes phenomenon
具体可以查看链接:Curse of dimensionality
简单的翻译过来就是,当维度增加的时候,训练所需要的数据量需要成指数级别的增长才能满足要求。
维度很高,且数据量不足的情况下,训练模型仅仅是去“记忆”数据,而不是去“学习”数据。因为对于高维度来说,空间的自由度非常大,在数据量相对不高的情况下,其实每一个数据都可以看成是一个“特例”,这也是造成过拟合现象的原因。
但是,高维度的情况下也有一个好处:既然空间的自由度很高,那么数据就更可能线性可分,在维度高到一定程度的时候,我们就可以认为其线性可分的概率为1 (其实这个观点是缺少严谨的数学验证的,可以参考:如何证明无穷多维的情况下,数据一定线性可分? - 雷天琪的回答)。
所以得出的结论是,在数据量不足的情况下(相对于高维度下的数据量不足问题),我们可以使用线性分类器来解决问题,因为其“更可能线性可分”,比如,使用SVM来分类数据量少的问题。
最近做的一个项目就遇到了这个问题,从上面的分析的基础上,可以看出线性分类器可以保证在数据量很少的情况下的性能,但是我的实际项目不能验证这一点。 :(
我的实际项目中,效果最好的还是随机森林(可以应对线性不可分的情况),而SVM和其他的一些模型并无明显差别,唯一显著的效果是,False Positive很少,不过这一点在某些情况下很重要。至于原因,现在只能理解为数据中有错误。几千份样本对于大部分机器学习模型, 已经足够了(除了深度学习之类的)
根据"No free lunch"原则, 没有一个模型比另一个模型好的说法, 必须结合具体问题.
建议:
1 做好特征工程
2 不要用太多的特征
3 做好交叉验证