如何使用 svmtrain 在 matlab 中绘制误差与训练样本数
how to plot error vs training sample number in matlab using svmtrain
我有一个包含 1960 个样本和 12 个特征的数据集,并尝试使用 980 个训练样本和 980 个测试样本来解决二元分类问题。对于训练,我使用 "svmtrain",为了分类,我使用 "svmclassify"。是否可以绘制训练误差 VS 训练样本数?
有什么建议吗?
我是 matlab 和 SVM 的新手。
重要的是要考虑 SVM 和神经网络等方法之间的区别。训练神经网络时,您从初始权重开始训练,然后 逐步 完成训练样本。您基本上会有一个 for 循环遍历每个训练样本并应用任何训练算法。因此很容易评估训练中的错误分类错误,例如每 100 个样本后。
SVM 然而工作方式不同:训练 SVM 时,您构建 一个 方程,它描述了整个问题。这通常是
的一种形式
Minimize the norm of ||w||
, subject to y_i ( w * x_i - b) >= 1
for all i
training samples.
其中w
是分离超平面上的法向量,b
是超平面到原点的偏移量,x_i
是训练样本,y_i
是训练样本的标签。这是一个优化问题,因此您要搜索最小化 ||w||
的解决方案,一旦找到这样的 w
,算法就完成了。 但是:你所有的训练样本都用于训练,所以你没有神经网络中的逐个样本过程,错误分类错误只能在整个之后进行评估所有 个样本的训练已完成。
为了能够绘制错误分类误差与支持向量机中训练样本数量的关系,您将必须 运行 SVM 函数 svmtrain
(或者如果您有较新的 MATLAB version fitcsvm
) 多次使用不同数量的训练样本并评估错误。
最后一点:如果你只验证训练错误,你就会为过度拟合敞开大门。这意味着您的算法准确地学习了训练数据的特征,但无法将这些知识推广到新数据。因此,您在训练中的错误率将非常低,但在新数据上会失败。为防止过度拟合,您可以使用不用于训练的小型 verification 数据集(可能占训练数据的 5-10%)。 SVM 训练完成后,可以在验证数据集上评估误分类错误,检查训练数据集和验证数据集的错误率是否非常相似,这样就可以确定新数据也能正确分类。
我有一个包含 1960 个样本和 12 个特征的数据集,并尝试使用 980 个训练样本和 980 个测试样本来解决二元分类问题。对于训练,我使用 "svmtrain",为了分类,我使用 "svmclassify"。是否可以绘制训练误差 VS 训练样本数? 有什么建议吗? 我是 matlab 和 SVM 的新手。
重要的是要考虑 SVM 和神经网络等方法之间的区别。训练神经网络时,您从初始权重开始训练,然后 逐步 完成训练样本。您基本上会有一个 for 循环遍历每个训练样本并应用任何训练算法。因此很容易评估训练中的错误分类错误,例如每 100 个样本后。
SVM 然而工作方式不同:训练 SVM 时,您构建 一个 方程,它描述了整个问题。这通常是
的一种形式Minimize the norm of
||w||
, subject toy_i ( w * x_i - b) >= 1
for alli
training samples.
其中w
是分离超平面上的法向量,b
是超平面到原点的偏移量,x_i
是训练样本,y_i
是训练样本的标签。这是一个优化问题,因此您要搜索最小化 ||w||
的解决方案,一旦找到这样的 w
,算法就完成了。 但是:你所有的训练样本都用于训练,所以你没有神经网络中的逐个样本过程,错误分类错误只能在整个之后进行评估所有 个样本的训练已完成。
为了能够绘制错误分类误差与支持向量机中训练样本数量的关系,您将必须 运行 SVM 函数 svmtrain
(或者如果您有较新的 MATLAB version fitcsvm
) 多次使用不同数量的训练样本并评估错误。
最后一点:如果你只验证训练错误,你就会为过度拟合敞开大门。这意味着您的算法准确地学习了训练数据的特征,但无法将这些知识推广到新数据。因此,您在训练中的错误率将非常低,但在新数据上会失败。为防止过度拟合,您可以使用不用于训练的小型 verification 数据集(可能占训练数据的 5-10%)。 SVM 训练完成后,可以在验证数据集上评估误分类错误,检查训练数据集和验证数据集的错误率是否非常相似,这样就可以确定新数据也能正确分类。