我有一个1960年样本的数据集,有12个特征,并尝试使用980样本进行训练和980样本进行测试来解决二进制分类问题。对于训练我使用“svmtrain”并分类我正在使用“svmclassify”。是否可以绘制训练误差VS训练样本编号? 有什么建议吗? 我是matlab和SVM的新手。
答案 0 :(得分:1)
重要的是要考虑SVM和神经网络等方法之间的区别。在训练神经网络时,您可以使用初始权重开始训练,然后逐步训练样本一步一步。你基本上会有一个for循环遍历每个训练样本并应用任何训练算法。因此,很容易评估训练中的错误分类错误,例如每100个样本后。
然而,SVM的工作方式不同:在训练SVM时,您构造一个方程,它描述了整个问题。这通常是
的一种形式最小化
||w||
的标准,所有y_i ( w * x_i - b) >= 1
个训练样本均以i
为准。
w
是分离超平面上的法向量,b
是超平面到原点的偏移量,x_i
是训练样本,y_i
是训练样本的标签。这是一个优化问题,因此您搜索最小化||w||
的解决方案,一旦找到这样的w
,算法就完成了。 但是:您的所有训练样本都用于培训,因此您没有像神经网络那样的逐个样本程序,并且错误分类错误只能在整个培训后进行评估所有样本已完成。
为了能够在支持向量机中绘制错误分类错误与训练样本数量,您必须运行SVM函数svmtrain
(或者如果您有更新的MATLAB版本fitcsvm
)多次使用不同数量的训练样本并评估错误。
最后一点注意事项:如果您只验证训练错误,则将门打开以进行过度安装。这意味着您的算法可以准确地学习训练数据的功能,但不能将这些知识推广到新数据。因此,您将在培训中具有极低的错误率,但新数据失败。为了防止过度拟合,您可以使用您不会用于培训的小型验证数据集(可能是您培训数据的5-10%)。在训练SVM之后,您可以评估验证数据集上的错误分类错误,并检查训练数据集和验证数据集中的错误率是否非常相似,因此您可以确保新数据也可以正确分类。