1, 配置环境,需要安装两个包,
① pydub, 命令:pip install pydub ----> 把mp3格式文件转化为wav格式
② python_speech_features ,命令:pip install python_speech_features \
----->完成傅里叶变化和梅尔倒谱(MFCC)
③ 安装ffmpeg:
从http://www.ffmpeg.org/download.html下载对应自己电脑版本的软件包,在本地解压,
并将解压后文件夹中的bin目录添加到本地的环境变量中。
2, 特征工程:
如何把音频转化为数值矩阵,至于标签列,只需通过zip映射即可完成。
如果我们了解了一首歌是如何转化为数值矩阵的,那么只需要将这个定义好的函数做for loop;
即可完成音乐文件的批量处理。
其中,涉及达到降维的部分,我们不再用sklearn中的库进行调包处理,而是用自己的一套
算法达到降维的目的。总的宗旨是:每1个实例,只能是1行。
具体方法是:讲原来5999×13的矩阵,在0方向上取均值得到一个1×13的矩阵,然后在1方向上,
对列两两之间计算协方差,得到1×91维的向量,再与之前1×13维的向量进行append,最终得到一个
1×104维的向量来表征1首歌的特征.
对label的处理,先将music_info.csv 转化为list之后,再转化为字典;
[['不生气了,好吗', '清新'], ['回不去的过往', '清新'],
['Bady I Love You', '清新'], ['心与心', '清新'], ['我默念的好朋友', '清新'],
['是我太软弱', '清新'], ['可惜不是你', '清新'], ["I don't know", '清新'],
['love line', '清新'], ['叶子', '清新'], ['刚好', '清新'], ['Run To You', '清新'],
['Ready Aim Fire', '兴奋'], ['Ready For War', '兴奋'], ['Is She with You?', '兴奋'],
['Everybody Knows', '兴奋'], ['Icky Thump', '兴奋'], ['我还有点小糊涂', '快乐'],
['海绵宝宝片尾曲', '快乐'], ['神奇宝贝·胖丁之歌', '快乐'], ['四季的问候', '快乐'],
['晚安喵', '快乐'], ['让她开心(童声版)', '快乐'], ['简单爱', '快乐']]
3, 建模调参:
对选择的模型-支持向量机(svm)进行网格交叉验证(gridSearch),打印出最有的参数来构造一个新
的模型。用新的模型来训练样本,并将训练好的模型进行持久化保存,以便于后来预测的时候调用。
最优参数:{'C': 0.1, 'decision_function_shape': 'ovo', \
'kernel': 'rbf', 'probability': True}
最优模型准确率:0.25757575757575757
寻找最佳模型共耗时2.33
4, 预测:
feature.py 特征提取
#coding:utf-8
import pandas as pd
import numpy as np
import glob#搜索歌单路径
from pydub.audio_segment import AudioSegment
from scipy.io import wavfile
from python_speech_features import mfcc
import os#.remove("")
import sys
import time#计算程序运行时间
def 获取歌单():#extract_label
'''获取歌单,为正反向字典制作做准备'''
data = pd.read_csv(歌单路径)
data = data[['name','tag']]
return data
def 获取单首歌曲特征(file):#fetch_index_label
'''转换音乐文件格式并且提取其特征'''
'''./data/music\\50 Cent - Ready For War.mp3'''
items = file.split('.')
file_for