我有一个分类问题,目前的特征向量似乎无法提供足够的信息。我的训练集有10,000个条目,并且使用的是支持向量机(SVM)作为分类器(使用scikit-learn)。
合理的最大特征向量大小是多少(即维度有多少)?
(使用笔记本电脑CPU进行训练和评估)
100?1,000?10,000?100,000?1,000,000?
回答:
问题的关键不在于对于一定数量的样本(即条目)应该有多少特征,而是相反的情况:
赢的不是拥有最佳算法的人,而是拥有最多数据的人。(Banko和Brill,2001)
Banko和Brill在2001年对4种不同的算法进行了比较,他们不断增加训练集大小至数百万,最终得出了上述结论。
此外,Andrew Ng教授也明确讨论了这个话题,我在这里引用他的话:
如果一个学习算法存在高方差问题,增加更多的训练数据可能会有所帮助。
如果一个学习算法存在高偏差问题,仅增加更多的训练数据本身并不会有太大帮助
因此,作为一个经验法则,你的数据样本数必须大于数据集中特征的数量,同时要尽可能确保所有特征都是有信息量的(即特征之间没有高度共线性,即冗余)。
我在多个地方读到过,包括Scikit-Learn的文档中,输入的数量(即样本数)必须至少是特征数量的平方(即n_samples > n_features ** 2)。
尽管如此,对于SVM来说,特征数量n与条目数量m之间的关系是一个重要的因素,用于最初指定要使用的核类型,根据Andrew Ng教授的说法,以下是关于SVM的第二个经验法则:
- 如果特征数量远大于条目数量(即
n最多10,000而m最多1,000)——> 使用SVM不带核(即”线性核“)或使用逻辑回归。 - 如果特征数量较少且条目数量中等(即
n最多1,000而m最多10,000)——> 使用SVM带高斯核。 - 如果特征数量较少且条目数量远大(即
n最多1,000而m> 50,000)——> 创建/添加更多特征,然后使用SVM不带核或使用逻辑回归。