SVM 可以预测看不见的表达吗

Posted

技术标签:

【中文标题】SVM 可以预测看不见的表达吗【英文标题】:Can SVM predict unseen expression 【发布时间】:2014-12-09 01:17:47 【问题描述】:

我对支持向量机 (SVM) 感到困惑。

我正在使用 OpenCV 库中的 SVM 实现面部表情识别。我有一个分类器,它从不同人的七种基本人类表达(中性、快乐、悲伤、惊讶、愤怒、恐惧和厌恶)的集合中训练出来。假设有一个新人进来,SVM 试图预测这个人。它会正确猜测(或至少以较低的识别率识别它)吗?

我尝试这样做并使用交叉验证(我将训练集和测试集分开)进行检查,经过多次迭代后,识别率平均约为 50%。但是,如果我测试它已经在训练集中学习的面部图像,识别率会提高到 90%。

This paper 也做面部表情识别说:

我们的方法基于机器学习系统 支持向量机 (SVM)。面部特征跟踪器 从特征运动中收集一组位移 视频流。这些随后用于训练 SVM 识别以前看不见的表达

的分类器

所以我的主要问题是,

这是否意味着 SVM 无法正确预测看不见的样本(模仿上述表达方式之一的新人)?

希望有人可以提供帮助,我希望我足够清楚

P.S 我所说的看不见的表情是指一个新人(SVM 以前从未见过),但这个人模仿了我上面提到的一种表情。不是其他表达方式。

【问题讨论】:

你想要的是generalization。泛化的质量取决于您为训练选择的样本和特征。通常,您只使用 x% 的训练样本进行训练,其余的用于测试泛化。测试您的(用于训练)训练集没有多大意义。因此,通常您会随机拆分训练集并进行训练。如果泛化不够好,重置并选择不同的随机选择的样本进行训练。如果您没有得到好的结果,请获取更多样本或选择不同的特征。 【参考方案1】:

“previously unseen expressions”指的是未见过的样本,模型可以是支持向量机、决策树或其他分类模型。

我认为看不见的面部图像精度下降的原因与您选择的特征有关,这可能与特定的人高度相关。特征选择方法会有所帮助,模型中的 L1 正则化(L1-SVM)可能会有所帮助。

【讨论】:

嗯.. 我使用 LBP 来获取特征向量。我可能需要改变它。谢谢,这真的很有帮助。【参考方案2】:

当然,SVM 可以正确预测看不见的表达式——这就是“泛化”的真正含义。但是,它无法预测除您在训练集中收集的人类表情之外的其他人类表情(这不是问题)。

而且,自然地,预测看不见的面孔比预测模型训练过的数据更难。所以,不用担心,只需像以前一样使用您的机器。另一方面,如果你想减少泛化误差,你可以尝试使用其他特性。

【讨论】:

我知道如果一个人模仿其他表达方式是行不通的。我觉得对于预测看不见的面孔,50% 太低了。这会因为我的样本量小而发生吗?到目前为止,我有 25 个样本(25 人)。 @AdhiputraPerkasa: 25 看起来确实有点小,因为你有 7 个类,因此每个表达式几乎只有 3 个样本(然而,这里的小/大还取决于 OpenCV 使用了多少特征,我不知道)。您能否更详细地说明您的设置?在 25 个样本中,您使用多少用于训练,多少用于泛化? 50% 这个数字是怎么来的? 我训练了 25 个人,所有人都模仿了所有 7 种表达方式。我为每个表情捕获了 20 帧,因此 1 个对象有 140 个面部图像。所以总共 25*140 = 3500 张面部图像。我使用 LBP 从面部图像中获取特征向量。我使用交叉验证来划分训练/测试集,我通常选择 K=10。然后我运行我的代码,我得到了 50% 。我的代码可能有一些错误,但到目前为止我检查了一切似乎都很好。【参考方案3】:

我不知道如何理解你的问题...

首先,您在识别您的known expressions(即(neutral, happy, sad, surprise, anger, fear, and disgust))时似乎存在泛化问题。

通常,使用机器学习的目的是将一张新的人脸图像分类为其中一种表情。学习到的泛化将是识别未知面孔(或只是已知面孔的新/未知图像)上的那些表情。

但是你要求分类到新的表达方式,例如confused,这不是整个学习过程中的主题,也与已知的表达方式无关(例如,如果困惑是惊讶和愤怒的混合体)?阿法克那是不可能的。 你可以做的是有一个班级unknown expression。每当您识别unknown expression 时,您都会保存这些信息。从所有收集的unknown expression 样本中,您可以手动或自动尝试分离新的表达簇!

【讨论】:

对不起,我不清楚。我的意思是,当一个新人模仿其中一种表达方式时,SVM 会正确预测吗?对此感到抱歉。 这就是训练的目的,所以是的(如果你选择了好的特征和样本进行训练)。

以上是关于SVM 可以预测看不见的表达吗的主要内容,如果未能解决你的问题,请参考以下文章

SVM 方法可以处理一维数据进行预测吗?

通过先前训练的模型预测看不见的数据

我需要在 SVM 的预测时间计算 hist 吗?

sklearn如何使用保存的模型来预测新数据

sklearn之svm-葡萄酒质量预测(11)

sklearn之svm-葡萄酒质量预测(11)