基于Adaboost的音乐情绪分类算法-2015实习设计总结

=========================================

  • 基于Adaboost的音乐情绪分类算法-2015实习设计总结

    • 写在开头

      • 1 感谢
      • 2 参考资料
    • 音乐情绪
    • Adaboost
      • 1 关于代码

        • 11 训练样本
        • 12 训练结果
        • 13 进行分类
      • 音乐特征

1. 写在开头

此次实习设计选题是基于Adaboost的音乐情绪分类算法,由于在公司实习期间,参与的项目刚刚起步连个雏形都没有,实在不合适直接拿来。无奈只能自己拟定一个题目,因为对于Sony Walkman上的音乐分析很感兴趣,所以就决定写个音乐情绪分类的算法,看了些论文,感觉大多使用Adaboost进行完成,所以最终拟定了这个题目。老师点头过了题目,同时要求将这个算法嵌入到一个音乐播放器中。

1.1 感谢

此次实习设计,主要目的是为了学习Adaboost算法的使用流程,大部分代码都是使用现成的,自己主要是将各个部分组合在一起。能够顺利完成此次的实习设计,需要感谢各位无私的开源精神,此次设计使用到了其他人的代码,在这里特别感谢它们的作者:
https://github.com/cbefus/CAMEL-A-Framework-for-Audio-Analysis
https://github.com/yamaguchi23/adaboost
https://github.com/FreedomZZQ/IcePlayer
https://github.com/keli/netease-music
再道一声感谢!

1.2 参考资料

参考资料不多,主要是一些论文以及博客,我这里列出来
Adaboost
http://blog.csdn.net/tiandijun/article/details/48036025
http://blog.csdn.net/haidao2009/article/details/7514787
http://wenku.baidu.com/link?url=77xTzysMJt7k90q1BUBpzuYmw5RWO_uEvpP6QeU0lgCrxH-lqPReMBlMXMd9UFG-oHg3eZa3ON5fMcn9kjNX5sFMQKlkwabAaEKcI8XUuP7
http://www.open-open.com/lib/view/open1436021046513.html
相关论文
基于AdaBoost的音乐情绪分类
基于情感的音乐分类系统的研究与实现
数字音频系统下音乐情绪分类算法的研究与实现

2 音乐情绪

音乐是表达情绪的艺术,它通过某种精确的组合,来传递某种特定的情绪,这种情绪可能因人而异,但是大多感受到的情绪很相似,而且往往不是简单的情绪。
关于情绪类型,可以参看《The biopsychology of mood and arousal》,其中的Thayer模型大概是这样的:

其中一个维度是Arousal,从Calm到Excited逐渐增加,Arousal与个体的生理活动性和音乐的能量有光。另一个维度是Valence,从Sad到Pleased逐渐增加,Valence与个体的内部心理活动有关。
为了简单起见,我们选择Thayer模型的Excited、Pleased、Calm、Sad四个情绪为分类类型。
这4个情绪中,Sad和Pleased是典型的负面情绪和正面情绪,Excited和Calm是音乐强度较高和较低的代表。

3 Adaboost

有关Adaboost的内容已经在这里给到,其中要说明的是Adaboost有很多种,在代码中可以进行选择Discrete AdaBoost、Real Adaboost、Gentle AdaBoost。虽然网上的一些关于Adaboost的资料都是Discrete Adaboost的,但是并不妨碍我们使用准确度更好的Gentle Adaboost。(๑•̀ㅂ•́)و✧

3.1 关于代码

Adaboost部分的代码使用的是https://github.com/yamaguchi23/adaboost 作者已经给出了使用的方法,简单明了。我对这个部分做一个补充的说明

3.1.1 训练样本

训练首先需要训练样本,作者提示说可以从这里获得一些训练样例。例如这个 a1a,是训练样本,a1a.t是测试样本。
样本格式符合这样的格式(libsvm格式):

<label><index1>:<value1><index2>:<value2>...

<script id="MathJax-Element-1" type="math/tex; mode=display"> ::...</script>
我们称这是一个”样本(sample)“
label 通常是 +1 或者 -1,代表“是”或者“不是”
index 是一个数字,代表特征的标号
value 是一个数字,代表对应特征的值
而训练样本就是由很多行样本组成的数据,大概长这样
+1 1:-0.137674 5:0.0218209 6:-0.616122 14:21387.2 16:83781.9

3.1.2 训练结果

在程序中我们选择训练次数,每次训练得到一个弱分类器,这个次数还是挺重要的,反正不要太少了。约5000个样本的训练样本,我采用的是3w次训练。
训练的结果是一组数据,这组数据就是Adaboost中的”弱分类器“了,这组数据构成了“强分类器”,大概长这样:
5
40 631.832 0.134146 -0.711574
26 34401.2 0.391827 -0.252791
26 22610.7 0.0810144 -0.382917
13 30358.9 0.910024 -0.0354104
40 448.577 0.134795 -0.133638

  • 5代表强分类器的个数,也是训练次数。
  • 第1列,强分类器的特征标号。对应训练样本中的index
  • 第2列,阈值或者说门限
  • 第3列,小于阈值时给出的”评分“
  • 第4列,大于阈值时给出的”评分“
  • 第3列和第4列,在Discrete Adaboost中数值相同,符号相反,但是在Real Adaboost和Gentle Adaboost中符号相反,但是数值并不一定相同。

3.1.3 进行分类

得到了训练结果,我们就可以说得到一个模型,我们通过这个模型来预测音乐的类型。大致流程是:先获得一个音乐特征值value,这个音乐特征的标号是index,然后再和所有特征标号等于index的强分类器进行比较,然后比较,得到”评分“,累加”评分“,最终如果”评分“大于0说明是,否则不是
用C++代码大概是这样的

    double score = 0.0;for (int classifierIndex = 0; classifierIndex < static_cast<int>(weakClassifiers_.size()); ++classifierIndex) {score += weakClassifiers_[classifierIndex].evaluate(featureVector);}return score;

在实际的使用当中,如果仅是以大于0来判定是否属于一个类型是不妥当的,因为经常出现都是小于0的情况,所以我通常都是去4个分类模型中得分最高的最为最终结果。

4 音乐特征

在Adaboost中,我们需要提前音乐的特征值来作为训练样本,同样在预测的时候我们也需要提取音乐特征作为依据。
音乐特征的提取采用的是https://github.com/cbefus/CAMEL-A-Framework-for-Audio-Analysis 代码也是简单明了的,我们需要做的就是讲提取出来的特征组合成符合libsvm格式,聪明的你们一定是没有问题的吧,这个部分可以参看我的代码SampleMaker那个类。
在使用这份代码之前,需要安装好fftw这个是做有关傅里叶变化的代码。
可以提取的特征大概有30种,其中calcWindowSpectralIrregularityK这个是有bug的(j-1这个位置)。特征越多当然效果越好,但是时间也会越慢,所以还是有选择性的挑选一些比较好。

基于Adaboost的音乐情绪分类算法相关推荐

  1. 滑动差分倒谱系数 matlab,【网安学术】基于音频特征参数的多语种分类算法

    原标题:[网安学术]基于音频特征参数的多语种分类算法 摘要:伴随着国际化的趋势,音频语种识别问题越来越受到重视.但是,现有的语种识别系统不能满足现代化日益增长的需求.处理小语种和混淆度高的语种分类时, ...

  2. python中文文本分析_基于CNN的中文文本分类算法(可应用于垃圾邮件过滤、情感分析等场景)...

    基于cnn的中文文本分类算法 简介 参考IMPLEMENTING A CNN FOR TEXT CLASSIFICATION IN TENSORFLOW实现的一个简单的卷积神经网络,用于中文文本分类任 ...

  3. 基于机器学习的音乐风格分类

    1 任务介绍 基于机器学习的音乐风格分类,包含数据的导入,特征选择,机器学习模型,超参数调整. 数据集连接:https://download.csdn.net/download/ww596520206 ...

  4. 基于 Word2Vec 的微博情绪分类

    本文仅供参考 文章目录 任务说明 一.基于 Word2Vec 的文本表示及文本分类方法 二.实验原理 三.具体步骤 1.引入库 2.读入数据 3.数据清洗 4.生成word2vec模型 5.文本表示 ...

  5. 基于Adaboost实现鸢尾花数据集分类

    写在之前 提交内容分为两大部分: 一为Adaboost算法实现,代码在文件夹<算法实现>中,<提升方法笔记>为个人学习笔记. 二为基于Adaboost模型实现鸢尾花数据集分类, ...

  6. 基于神经网络的微博情绪分类

    本文仅供参考 目录 任务说明 一.基于 Bert 的文本表示及文本分类方法 二.实验原理 三.具体步骤 1.构建句子向量 1.1导入库 1.2加载bert模型 1.3读取数据 1.4获得向量 1.5运 ...

  7. 深度学习 音乐分类_基于神经网络的音乐流派分类

    介绍本文讨论神经网络对声音样本的音乐类型进行分类的任务.当我决定在声音处理领域工作时,我认为声音类型分类和图像分类是相同的问题.但是图像非常火热,我并没有找到太多关于深度学习来解决这个问题的相关资料. ...

  8. 基于CNN的音乐流派分类

    文章目录 写在前面 正文开始 梅尔频谱图 收集和预处理数据 CNN是怎么做到的? 更深入的观察 蓝调还是爵士? 雷鬼还是嘻哈? 这是摇滚吗? 这告诉我们什么? 一个自然的问题 写在前面 笔者的上一篇翻 ...

  9. 基于 Python 的音乐流派分类

    音乐就像一面镜子,它可以告诉人们很多关于你是谁,你关心什么,不管你喜欢与否.我们喜欢说"you are what you stream" - Spotify Spotify 拥有 ...

最新文章

  1. 干货 | 只有100个标记数据,如何精确分类400万用户评论?
  2. MPLS 成为连接到云的绝佳方法的4个原因
  3. java web 程序---javabean实例--登陆界面并显示用户名和密码
  4. Android之实现RTL的ViewPager
  5. [mybatis]缓存_缓存有关的设置以及属性
  6. 蚂蚁金服OceanBase性价比是传统数据库的十倍
  7. [学习官方例子]TCustomComparer
  8. python实现异步的原理_一篇文章理解Python异步编程的基本原理
  9. 页面中超长字段只显示部分
  10. jQuery源码分析系列(35) : Ajax - jsonp的实现与原理
  11. 冷峭的 渗透测试入门DVWA教程001:环境搭建
  12. nps内网穿透p2p隧道实战
  13. [转]Phoenix综述(史上最全Phoenix中文文档)
  14. 公安大数据系统具有哪些功能
  15. FIL最新消息 Lotus是什么?与 FIL什么关系
  16. ctab提取dna流程图_DNA提取(CTAB法)
  17. Business Transaction Events BTE 增强
  18. 软件测试周刊(第59期):觉得自己生活的很好吗?为什么视而不见?
  19. 许一世情 陪你 浪尽天涯
  20. Spring Boot 实践折腾记(12):支持数据缓存Cache

热门文章

  1. python try exception类_python——异常类型
  2. fastjson反序列化过滤字段属性_Fastjsonlt;=1.2.47反序列化漏洞源码分析及复现
  3. mysql常用的备份命令有哪些_MySQL常用备份还原命令
  4. aix oracle监听配置_Oracle数据库03用户权限与数据库的连接
  5. 【论文阅读】Drug Similarity Integration Through Multi-view Graph Auto-Encoders | day4、5
  6. idbconnection mysql_基于IDbConnection接口实现修改配置文件切换数据源
  7. 8备份sqlserver_关于SQL server 巡检的要点你都知道吗?
  8. github 上 thoes更新了 找不到bootstrap.sh_因为这个工具,我在 GitHub 搜索源码的时间缩短了 50%!...
  9. python web生产环境_2020年了,python的web framework sanic 可以考虑生产环境部署了么?...
  10. c语言菜单输入字母死循环,C语言循环菜单的设计--让程序一直运行