本为是对Liblinear和Libsvm的官方实践文档的初略翻译:
Liblinear是一个可快速进行计算的大规模线性分类库。
A Practical Guide to Liblinear (Liblinear实践指南)
1.什么时候使用线性分类(Liblinear)而不是非线性分类器(Libsvm)
2.数据准备
对应Liblinear来说,典型的数据有如下两个特点:1)特征数量的多(成千上万维特征) 2)每一个示例都非常稀疏因为大部分值都是0
3.标准化
原因:特征值在大范围内变化的数据会严重影响变化范围小的特征的效果
最优化方法会花费更长的时间
可能导致计算溢出。
我们常用的标准化方法是归一化
4.方案选择
首选默认方案,如果训练很慢,则需要重新审查方案。
对于L1-regularized问题,我们进提供首选方案,即默认方案。
如果在L1和L2regulariztion之间选择,我们首选使用L2,因为L1不但没有更高的准确度,而且更慢。
5.参数选择
在线性分类中,仅有的参数是C,
1)线性问题对于C不是很敏感
2)使用更大的C值通常会导致更长的训练时间
通常推荐默认的C=1,慢慢增加C值,如果结果没有大的改变,就没有必要将c的值设置更大。
A Practical Guide to Support Vector Classification (SVM实践指南)
1.介绍
1.1SVM的常用核函数
linear :线性
polynomial :多项式
radial basis function (RBF):径向基函数
sigmod
1.2.建议的处理步凑
将数据变成libsvm的处理格式
将数据进行简单的标准化(scale)
考虑使用RBF核函数
用交叉验证和网格寻参法找到最好的参数C和参数γ
测试
数据处理
2.将标签类别使用0和1表示,且每个类别只使用一个1,其余都用0表示,如{红,绿,蓝}表示为{(0,0,1),(0,1,0),(1,0,0)}
scaling 数据
3.1模型选择
默认选择使用RBF核函数,
多项式核函数参数太多,而且容易出现很大和很小的值,导致结果为无穷或者为0
sigmod有时候会无效
当在有些情况下RBF核函数不适合,特别是特征值很大的时候,这时候最好使用线性核函数。
3.2交叉验证和网格搜索
交叉验证
常用的精度测试方法主要是交叉验证,例如10折交叉验证(10-fold cross validation),将数据集分成十份,轮流将其中9份做训练1份做测试,10次的结果的均值作为对算法精度的估计,一般还需要进行多次10折交叉验证求均值,例如:10次10折交叉验证,以求更精确一点。
libsvm进行 网格搜索的原因: 1)从心理上讲,不进行全面的参数搜索而是使用近似算法或启发式算法让人感觉不安全。
2)如果参数比较少,“网格搜索”的复杂度比高级算法高不了多少。
3)“网格搜索”可并行性高,因为每个(C, g)对是相互独立的。
4.在scale训练和测试数据时常见的错误
对训练和测试数据不使用同样的方法进行scale,或者只对一个进行scale
5.什么时候使用Linear而不是RBF核函数
不需要将数据映射到高维空间
主需要寻找参数C,而不需要参数γ(gama)
实例数远小于特征数目
实例数目和特征数目都非常大
实例数目远远大于 特征数目