常见问题
和svm相关的
如何组织训练数据
1)将数据分开为训练集、测试集;
2)对训练集寻优,构建好决策函数,训练分类器;
3)用测试集验证准确率,达到满足需要的准确率后,就可以用新数据分类。
如何调节惩罚因子
惩罚因子(参数C):为了使用松弛变量才引入的,表示对离群点的重视程度。C越大越重视,越不想丢掉离群点。可用来解决数据集偏斜问题,方法是调整惩罚因子,给样本数量少的类更大的惩罚因子。
惩罚因子C决定了你有多重视离群点带来的损失,显然当所有离群点的松弛变量的和一定时,你定的C越大,对目标函数的损失也越大,此时就暗示着你非常不愿意放弃这些离群点,最极端的情况是你把C定为无限大,这样只要稍有一个点离群,目标函数的值马上变成无限大,马上让问题变成无解,这就退化成了硬间隔问题。
惩罚因子C不是一个变量,整个优化问题在解的时候,C是一个你必须事先指定的值,指定这个值以后,解一下,得到一个分类器,然后用测试数据看看结果怎么样,如果不够好,换一个C的值,再解一次优化问题,得到另一个分类器,再看看效果,如此就是一个参数寻优的过程,但这和优化问题本身决不是一回事,优化问题在解的过程中,C一直是定值,要记住。
详细可参见:
http://blog.csdn.net/qll125596718/article/details/6910921
如何防止过拟合
过拟合表现为在训练数据上模型的预测很准,在未知数据上预测很差。过拟合主要是因为训练数据中的异常点,这些点严重偏离正常位置。我们知道,决定SVM最优分类超平面的恰恰是那些占少数的支持向量,如果支持向量中碰巧存在异常点,那么我们傻傻地让SVM去拟合这样的数据,最后的超平面就不是最优的。
解决过拟合的办法是为SVM引入了松弛变量ξ。
详细可参见:
http://blog.csdn.net/vincent2610/article/details/52033250
综上,可以得出:为了解决离群的异常点引入了松弛变量,为了解决松弛变量的引入带来的分类精度的影响问题,引入了惩罚因子,松弛变量用来舍弃离群点,而惩罚因子用来保护离群点。
除却svm,一般防止模型过拟合,提高模型泛化能力时,最常用的方法是:正则化,即在对模型的目标函数或代价函数加上正则项。此外,为了防止过拟合,我们也会用到一些其他方法,如:early stopping、数据集扩增(Data augmentation)、Dropout等。
详细可参见:
http://blog.csdn.net/heyongluoyao8/article/details/49429629
svm的泛化能力
泛化能力是指机器学习算法对新鲜样本的适应能力。学习的目的是学到隐含在数据对背后的规律,对具有同一规律的学习集以外的数据,经过训练的网络也能给出合适的输出,该能力称为泛化能力。
svm进阶可参考:
http://www.cnblogs.com/tornadomeet/archive/2013/05/26/3100603.html
增量学习
增量式学习是计算机视觉中的一种学习算法,主要用于分类问题中。
增量式算法:就是每当新增数据时,并不需要重建所有的知识库,而是在原有知识库的基础上,仅做由于新增数据所引起的更新,即只需修改因数据变化而涉及的规则。
交叉验证
交叉验证的基本思想是把在某种意义下将原始数据进行分组,一部分做为训练集,另一部分做为验证集,首先用训练集对分类器进行训练,再利用验证集来测试训练得到的模型,以此来做为评价分类器的性能指标。
常见的交叉验证形式:
1)Holdout 验证
常识来说,Holdout 验证并非一种交叉验证,因为数据并没有交叉使用。 随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。 一般来说,少于原本样本三分之一的数据被选做验证数据。
2)K-fold cross-validation
K折交叉验证,初始采样分割成K个子样本,一个单独的子样本被保留作为验证模型的数据,其他K-1个样本用来训练。交叉验证重复K次,每个子样本验证一次,平均K次的结果或者使用其它结合方式,最终得到一个单一估测。这个方法的优势在于,同时重复运用随机产生的子样本进行训练和验证,每次的结果验证一次,10折交叉验证是最常用的。
3)留一验证
正如名称所建议, 留一验证(LOOCV)意指只使用原本样本中的一项来当做验证资料, 而剩余的则留下来当做训练资料。 这个步骤一直持续到每个样本都被当做一次验证资料。 事实上,这等同于和K-fold 交叉验证是一样的,其中K为原本样本个数。 在某些情况下是存在有效率的演算法,如使用kernel regression 和Tikhonov regularization。