我有一组由35个功能列表组成的数据。我注意到当我将数据提供给 svmtrain 时,我收到了消息:
no convergence achieved within maximum number of iterations
然而,如果迭代次数“ MaxIter ”增加到大约1,000,000,则上述错误消失,我开始使用“ svmclassify ”获得良好的分类。
另一方面,当我将数据提供给“ fitcsvm ”时,它会在默认的迭代次数“15,000”内快速收敛。然而,问题是当我尝试使用“预测”对数据进行分类时,我的分类错误。
简而言之,最后“ svmtrain ”在增加迭代次数后正确地对数据进行分类。但是,“ fitcsvm ”既没有正确地对数据进行分类,也没有给我机会增加迭代次数,因为它通过检查 ConvergenceInfo.Converged 属性看起来成功收敛
有什么建议吗?注意我是matlab和SVM的新手。
答案 0 :(得分:3)
fitcsvm和svmtrain在其他算法中使用SMO进行优化。该软件在两个函数之间实现了不同的SMO,但数值研究表明结果存在明显的一致性。
来源:http://in.mathworks.com/help/stats/classificationsvm-class.html
SMO是顺序最小优化的地方。这是培训SVM的步骤之一。
显然,SMO的两个实现具有不同的参数来配置。这就是为什么在fitcsvm的实现中,你无法设置迭代次数。
看看上面的链接,它还提到了其他差异。