机器学习 - 歌曲分类

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
  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值