这几天一直想总结一下课题的思路和一些构想,正好借着最近找实习学习的机会回顾了一下用过的模型和方法。好像现在基于多生理信号进行情绪识别的课题渐渐发展起来,所以给正入坑的同学一些研究思路吧。文章可能很多地方是自己口语写的,不够学术。

一、简介

首先介绍一下什么是情绪识别,什么是多生理信号。情绪一定要和情感分开,情绪(mood)是指的顺时或者短时的情绪波动,而情感(emotion)是指一个人长时间的状态。很多文章包括中文英文都把这个要点混淆了,想要检测情感是一件很难的事,至少暂时不太可能,所以我们主要是针对情绪进行识别。

多生理信号指的是常用的一些医学上的生理信号如:EEG、ECG、HRV、SC、PPG、EMG(肌电这个是真不好用,不知道为什么很多文章都用了)等。很多时候我们看文章都有一句话:生理信号是人体副交感神经的反应,是无法掩盖的。。。具体是不是还真不确定,不过我个人分析利用多生理信号有几个好处:隐私性好不会像脸那样泄漏隐私、现在随着穿戴式的发展生理信号的获取变得简单(准确性待提高)、对于这些多生理信号有许多医学上成熟的特征或是代表意义能够比较好的解释情绪的发生。当然利用多生理信号还能检查人的健康性。

针对情绪识别公认做的最好的应该是MIT的Picard可以看看她实验室的一些论文,不过虽然比较出名,但是个人来看可能在情绪识别上他们实验室应该不是最出色的,因为遇到过很多更好的文章。

二、难点

基于多生理信号的情绪识别有几个难点:

1、生理信号的处理比较复杂,很多很多去噪算法都在提出。

如果你们信号采集设备很出色,那么你们做的工作就会少一些,如果不是那就有的做了,因为生理信号毕竟是一个比较精确的信号,一点噪声就可能引起很大的变化。就噪声而言,每种信号都有自己独特的去噪方法,我也是属于调用代码包的人,个人的信号处理水平真的处理不好这种信号。通常的噪声就那几种:由于传感器移动产生的运动伪迹、工频噪声(50Hz)、基线漂移。后两种还比较好处理,运动伪迹真是头疼,前几天看到一种用机器学习方法识别运动伪迹并去除的方法,个人感觉不一定好用,不过不失为一种方法。

2、情绪的定性问题。

目前的情绪就两大类定性方法:离散情绪定义和维度情绪定义。不管哪种定义都需要一个自评估或者是人工打标签的过程,这就给情绪识别的整体框架带来了很大的主观性。而且现在心理学上也没说那种方法好,但是从实验的角度而言,离散情绪在情绪种类少且明确的时候识别效果比较好(但不等于这样就好,因为只是在实验场景下的结果,真的到了现实不可能人就有比如高兴或悲伤两种情绪,一个针对几种特殊情绪的模型个人感觉是过于狭隘了)。利用维度情绪是现在的大趋势,很多文章都在用,因为这样情感描述的比较模糊,带一点误差也是允许的,但是也就是说情绪的定性更加不确定了。总之这一问题不解决,情绪识别这么大的命题就不可能完成。

3、生理信号的个人差异问题。

用生理信号建模型的时候最恶心的地方就是个人差异。有的数据库就针对一个人建的模型,这样效果很好。可是一到多个人识别度就差的要命。一个场景可能有的人反映强烈有的人毫无波动,生理信号也是一个人可能血压心跳本来就快,总不能就说是有情绪变化。这个目前我个人认为有两种方法解决,一个就是检测一个平静状态下的基础状态,与情绪状态下特征规则化一下(这个方法我现在在用,但是效果不好不坏,有点提升但是不多)。另一个就是建立一个单独的个人模型,多给这个人测一些数据建模,识别时根据这个人有没有历史数据,有的话就用个人模型,没有就用上面那种规则化模型。(这里讲的不是很明白我也知道)

三、整体流程

其实就是模式识别的基本流程:信号采集、信号处理、特征提取,特征降维(这个我没有用,我进量使用的模型都是可以在维度高时也不会有太严重过拟合的模型,因为生理信号和其他信号不太一样,每种生理信号特征都有自己的生理意义在,所以不建议 用非线性的降维方法,因为这样会在结果分析的时候造成很大的困惑)、模型建立、结果分析。
这个流程中每一个环节对于多生理信号的情绪识别都是很重要的一部分,其实每一个部分都可以作为一个课题讨论的。个人感觉用多生理信号情绪识别这个命题实在太大了,不过也不得以为之,总也要做个粗糙的模型出来。

四、建模过程具体叙述

原来没有针对机器学习每个模型的用法做过非常细致的分析,但是这几天的学习让我有了很多新的看法产生。
我将会详细论述我用过的方法,但是首先强调一点我情绪识别的主要思路:我的目的是让情绪识别的整个过程变得更有效率,因为情绪毕竟是相对短暂的,这时许多特征就不适用了,比如很多频域特征,比如HRV的低频功率谱就不准确,因为这至少需要5分钟以上的时间才能够得到这一特征。而且很多非线性特征、高维度特征也因为提取时间过长(有的特征要一个小时才能提出来,这明显不能用了)我没有采用,但是不代表这些特征无效,只不过我还没有测试哪些特征的计算时间可以接受,这也是一个很好的切入点。我用的特征:时域频域和一些速度较快许多文章都在用的特征。

建模思路:如果你也用的是维度模型那下面的模型思路你也可以试试。假设用效价(valence)唤醒度(arousal)模型。

分类or回归

其实这个问题用什么都可以,比如你可以把效价唤醒度分为4类:HVHA高效价高唤醒度、HVLA、LVHA、LVLA四种,也可以用两个标签,变为两个二分类问题(这里只是举个例子,你如果分高低中三种也可以)。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

特征首先要进行归一化,毕竟是不同信号,可能量纲也不一样,

这里叙述一下为什么要进行归一化:

首先要知道,能不归一化最好不归一化。归一化主要针对量纲不同的特征进行。

有些模型在进行不均匀的伸缩之后,最优解与原理不等价(如SVM)。因为SVM用的欧拉距离,一个很大的值就会使其他特征失效

有些模型伸缩后和原理差不多(如LR,只要调整权重就好了)。但是因为一般用的都是梯度下降求解,如果目标函数太扁就可能不收敛,所以也需要归一化。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1、分类。

这里针对分类的思路可以用的模型有很多,但是无论分类还是回归都要遵循一个原则就是模型的可解释性,也就是不要破坏原来特征,因为这样可以通过模型结果分析特征,而所有特征都带有其生理意义。不破坏可解释性的模型有:逻辑回归、决策树、甚至XGBoost等,还可以向更有深度的角度发展:多标签学习(正好我们有两个标签)、多任务学习(后面论述)等。这些模型各有特点,首先从最简单的模型线性回归说起。

逻辑回归:优点模型简单,训练速度比较快。缺点:在样本数少特征多的情况下有很严重的过拟合也就是需要规则化、线性模型不能处理非线性(可以用映射的方法解决,但是怎么映射是个问题)、而且由于我们的生理特征之间可能有很明显相关性产生多重共线性这也使得模型会有失真。这里不得不提的是一种规则化方法叫弹性网络,大概思想就是如果单纯用LASSO进行规则化会把相关的特征只取一个,而先用Ridge减小系数降低过多重共线性的问题后,就可以用LASSO进行选择,这时的特征既能够保证有相关性的特征没有完全去掉,又能够提高模型稳定性。再加上逻辑回归在处理非线性连续的数据时需要进行特征离散化,以保证能够 更准确的拟合数字(这个我接下来会分析一下离散化和不离散化的区别)。

决策树:可以使用CART树因为GINI指数已经证明了是有效的一种方式。用决策树的好处是因为决策树是非线性的分类器,而且对特征之间的相关性不是很敏感,再加上不需要进行特征离散化,所以总的来说还是比较方便的,当然最好的还是决策树的可视化形式,非常适合进行特征分析。当然决策树也有其缺点,首先是容易过拟合,而且决策树是一种利用贪心思想构建的,以局部的最优化为主,没有考虑整体性。而且决策树是一种离散的模型,不需要进行特征的离散化。

随机森林:一种树的混合方法吧。

XGBOOST:用这个有点大材小用了,不考虑了。

总之各有缺点,但是可能用逻辑回归处理时需要进行的工作更多一点,但是怎么才能够利用树和逻辑回归两者的优点进行识别是我一直在想的。我之所以没有使用SVM或是其他的分类方法,是因为首先逻辑回归很快,再有就是模型比较直观,解释性比较好适合做分析。没有用降维的思路和这个是一样的。

我的想法是首先用随机森林或是决策树对所有的特征进行一个建模,利用这个模型的结果进行人工的特征选择,选择那些表现优异的特征作为逻辑回归所使用的特征。这种方法虽然比较初级,但是毕竟是起始阶段,尝试一下未尝不可。比如我们有100个特征,利用树选择了40个有效的特征,又能降维去除一定的多重共线性,又能对所有的特征进行一下人工理解,这是不错的。

再加上两种新的方式我在这里给个思路,一种是多标签学习,一种是多任务学习。

多标签学习是指我们因为有几个维度标签,所以想尝试能不能利用标签之间的相似性对模型做一个提升,多标签的方法有很多可以自己查一查,但是我个人水平有限自己实现不了,所以可以用sklearn的工具包试一试。

多任务学习,这个我感觉有很大的潜力,想法就是利用每一个任务之间的相似性对模型进行提升。任务是指一个识别任务,比如我有10个人的数据,每个人有100个数据,那么我当然可以把对每个人的识别当成一个任务,然后分别进行建模识别。但是如果多任务的思路就在于把这10个任务结合起来,利用任务之间的相关性提升整体的性能。多任务的方法也有很多,现成的工具包也有,但是这个方法比较难,资料比较少,而且需要的数据相对比较大。不过我们再一想现在有很多关于情绪识别的数据库,我们用这种方法正好能把所有的数据库结合起来使用,这样数据量顿时就增加了,我相信还没有人这么做过(可能是我读的论文太少)。

2、回归

回归的大体思路和分类差不多,回归针对的是离散模型,而且用了自评表这种东西得到了一堆连续的值表示情绪。用回归也可以先得到回归的值,在把这些值离散化得到类别标签,这里就不介绍了。

就这么多,后面想到了再写

关于课题的一点思考(基于多生理信号的情绪识别)相关推荐

  1. 情感计算-基于肢体动作和生理信号的情感识别

    基于肢体动作的情感识别 面部表情+ 肢体动作(更多的与表情.声音特征相结合进行识别),识别细微的情感 背景与研究现状 没有面部表情贡献那么大,辅助面部表情进行分析. 肢体动作的情感表现 肢体动作包含: ...

  2. DEAP:使用生理信号进行情绪分析的数据库(三、实验分析与结论)

    来源CSDN网友HaZyiCe的授权分享 在此非常感谢HaZyiCe! 本篇文章是关于用于情绪分析的生理信号数据库DEAP简介的第三部分:实验分析与结论.用于情绪分析的生理信号数据库DEAP简介内容包 ...

  3. DEAP:使用生理信号进行情绪分析的数据库(二、实验设计与主观分析)

    来源CSDN网友HaZyiCe的授权分享 在此非常感谢HaZyiCe! 本篇文章是关于用于情绪分析的生理信号数据库DEAP简介的第二部分:实验设计与主观分析,用于情绪分析的生理信号数据库DEAP简介内 ...

  4. (论文加源码)基于DEAP的脑电情绪识别(CNN,RNN和两种不同的注意力机制)

    论文及源码见个人主页:https://download.csdn.net/download/qq_45874683/85063985 (论文加源码)基于DEAP的脑电情绪识别(CNN,RNN和两种不同 ...

  5. 基于DEAP的脑电情绪识别论文源码改进版本(附论文代码,lstm和rnn)

    论文及改进版源码链接: (论文加源码)基于DEAP的脑电情绪识别论文源码改进版本(附论文代码,lstm和rnn) https://download.csdn.net/download/qq_45874 ...

  6. DEAP:使用生理信号进行情绪分析的数据库(一、背景介绍与刺激选择)

    来源CSDN网友HaZyiCe的授权分享 在此非常感谢HaZyiCe! 本篇文章主要介绍了用于情绪分析的生理信号数据库DEAP的简介,包括创建该数据库的目的.实验的设计.数据的采集以及实验的分析等. ...

  7. 最新最全论文合集——基于机器学习/深度学习的情绪识别

    AMiner平台(https://www.aminer.cn)由清华大学计算机系研发,拥有我国完全自主知识产权.平台包含了超过2.3亿学术论文/专利和1.36亿学者的科技图谱,提供学者评价.专家发现. ...

  8. 深度学习基于DEAP的脑电情绪识别情感分类(附代码)

    DEAP数据集: DEAP数据集来源: DEAP: A Dataset for Emotion Analysis using Physiological and Audiovisual Signals ...

  9. 基于生理信号的多模态情绪识别模型

    这里写目录标题 Abstract Method 结论 Abstract 提出了一种基于三维卷积神经网络模型.一维卷积神经网络模型和基于生物启发的决策级多模态融合的多模态情绪识别模型. 用这个模型来区分 ...

  10. (论文加源码)基于DEAP脑电数据集的脑电情绪识别(利用生成对抗性网络进行特征提取和数据扩充)

    本篇论文发表于2022年的顶级期刊,代码可以完整运行,详情见第八节或者个人主页 论文源码见个人主页:https://download.csdn.net/download/qq_45874683/876 ...

最新文章

  1. java调用xdotool_【转】java Map 遍历速度最优解
  2. Github 移动端上架!把世界最大同性交友社区装进口袋
  3. java反射减少servlet_利用java 反射机制来实现一个servlet处理多种请求
  4. activemq安全设置 设置admin的用户名和密码
  5. Redis构建分布式锁——Redlock
  6. 内核堆栈 用户堆栈_堆栈痕迹从何而来?
  7. “机器换人”之潮涌向珠三角,蓝领工人将何去何从
  8. angular路由传递参数_Angular路由——在路由时候传递数据
  9. SQL语句使用大全,最常用的sql语句
  10. 数据库 proc编程七
  11. 获取iOS任意线程调用堆栈(三)符号化理论:从Mach-o结构分析类名方法名
  12. 动画效果-基础动画设置(改变大小,改变透明度,翻转,旋转,复原)
  13. 高质量灵感图片素材网站分享!
  14. [原创]错误提示:disagrees about version of symbol module_layout,解决方法
  15. 移动互联网初创型团队需要什么样的云计算服务?
  16. Vicdas实时历史数据库
  17. U盘恢复软件,U盘格式化后怎么恢复数据
  18. c++中DLL文件的编写与实现——三步走
  19. C语言学习笔记-P1 初识C语言(1)
  20. VectorCAST/C++在汽车电子C++代码测试的应用

热门文章

  1. 手机录像出现arn无响应
  2. 猎聘、BOSS、智联、前程无忧这几个招聘网站我都用过
  3. 小僧尽知他的备细出 水浒
  4. 同行评审就是个笑话!Nature爆料:计算机生成的垃圾文章竟还能被接受,64%来自中国...
  5. wireshark如何抓取本机包
  6. 11.1 项目风险管理
  7. ggplot多图叠加_R作图 ggplot2图片的布局排版
  8. ERROR: failed to establish dependency between database sgerp5 and diskgroup resource ora.DATA.dg
  9. 益聚星荣:核心数据持续上扬,亏损持续扩大,我们究竟该如何看待B站?
  10. 数据结构期末考试错点汇总