【发布时间】:2014-12-09 01:17:47
【问题描述】:
我对支持向量机 (SVM) 感到困惑。
我正在使用 OpenCV 库中的 SVM 实现面部表情识别。我有一个分类器,它从不同人的七种基本人类表达(中性、快乐、悲伤、惊讶、愤怒、恐惧和厌恶)的集合中训练出来。假设有一个新人进来,SVM 试图预测这个人。它会正确猜测(或至少以较低的识别率识别它)吗?
我尝试这样做并使用交叉验证(我将训练集和测试集分开)进行检查,经过多次迭代后,识别率平均约为 50%。但是,如果我测试它已经在训练集中学习的面部图像,识别率会提高到 90%。
This paper 也做面部表情识别说:
我们的方法基于机器学习系统 支持向量机 (SVM)。面部特征跟踪器 从特征运动中收集一组位移 视频流。这些随后用于训练 SVM 识别以前看不见的表达
的分类器
所以我的主要问题是,
这是否意味着 SVM 无法正确预测看不见的样本(模仿上述表达方式之一的新人)?
希望有人可以提供帮助,我希望我足够清楚
P.S 我所说的看不见的表情是指一个新人(SVM 以前从未见过),但这个人模仿了我上面提到的一种表情。不是其他表达方式。
【问题讨论】:
-
你想要的是
generalization。泛化的质量取决于您为训练选择的样本和特征。通常,您只使用 x% 的训练样本进行训练,其余的用于测试泛化。测试您的(用于训练)训练集没有多大意义。因此,通常您会随机拆分训练集并进行训练。如果泛化不够好,重置并选择不同的随机选择的样本进行训练。如果您没有得到好的结果,请获取更多样本或选择不同的特征。
标签: c++ opencv machine-learning svm