在 SVM 的缺点中,他们说
如果特征的数量远大于样本的数量,则该方法很可能表现不佳。
在这种情况下有什么好的选择?
您可以密切关注libsvm 初学者指南,在 C.1 部分中,它为您提供了答案以及您所问问题的示例:
C.1 实例数 << 特征数 许多微阵列数据
生物信息学属于这种类型。我们考虑来自 LIBSVM 数据集 ( http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets ) 的白血病数据。训练集和测试集分别有 38 个和 34 个实例。特征数为 7,129,远大于实例数。我们合并这两个文件并比较使用 RBF 和线性内核的交叉验证准确性:
带参数选择的 RBF 内核
$ cat leu leu.t > leu.combined
$ python grid.py leu.combined
...
8.0 3.0517578125e-05 97.2222
(最佳 C=8.0,= 0:000030518,五折交叉验证率=97.2222%)
带参数选择的线性核
$ python grid.py -log2c -1,2,1 -log2g 1,1,1 -t 0 leu.combined
...
0.5 2.0 98.6111
(最佳 C=0.5,五折交叉验证率=98.61111%)
尽管 grid.py 是为 RBF 内核设计的,但上述方式使用线性内核检查各种 C(-log2g 1,1,1 设置一个 dummy )。
使用线性核的交叉验证精度与使用 RBF 核的交叉验证精度相当。显然,当特征数量非常多时,可能不需要映射数据。
除了 LIBSVM,下面提到的 LIBLINEAR 软件也对这种情况下的数据有效。
如您所见,您可以将 SVM 与线性内核一起使用并获得良好的结果。