1 任务介绍

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

2 数据导入

data文件夹包含了所有数据,其中文件名为类别名称,可以发现共有6类,分别为:classical、country、edm、jazz、rap、rock,读取文件夹,计算每个类别的数目如下所示

import pandas as pd
import numpy as np
from sklearn.utils import shuffle
from sklearn.preprocessing import MinMaxScaler
from sklearn.svm import SVC
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier, AdaBoostClassifier
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import accuracy_score, recall_score, f1_score, confusion_matrix
import matplotlib.pyplot as pltclassical = pd.read_csv("data/classical_csv.csv")
country = pd.read_csv("data/country_csv.csv")
edm = pd.read_csv("data/edm_csv.csv")
jazz = pd.read_csv("data/jazz_csv.csv")
rap = pd.read_csv("data/rap_csv.csv")
rock = pd.read_csv("data/rock_csv.csv")print("classical num is "+str(len(classical)))
print("country num is "+str(len(country)))
print("edm num is "+str(len(edm)))
print("jazz num is "+str(len(jazz)))
print("rap num is "+str(len(rap)))
print("rock num is "+str(len(rock)))
classical num is 2119
country num is 2011
edm num is 2043
jazz num is 2178
rap num is 2162
rock num is 2035

2 数据处理

2.1 数据预处理,为每个数据添加类别

classical.insert(loc=10, column='class', value=0)
country.insert(loc=10, column='class', value=1)
edm.insert(loc=10, column='class', value=2)
jazz.insert(loc=10, column='class', value=3)
rap.insert(loc=10, column='class', value=4)
rock.insert(loc=10, column='class', value=5)
all_data = pd.concat([classical, country, edm, jazz, rap, rock])

2.2 特征: Unnamed: 0是每个歌曲的编号,对分类没有作用,可以丢掉

all_data.drop(["Unnamed: 0"],axis=1, inplace=True)

2.3 计算每个特征的方差,剔除掉方差过小的特征

all_data.std(axis=0)
all_data.drop(["speechiness"],axis=1, inplace=True)

最后保留的特征为:acousticness、danceability 、energy 、instrumentalness、key、loudness、tempo、valence ,共计8个。

3 特征分析

3.1 绘制每个特征的概率密度函数

for i, col in enumerate(all_data.columns[:-1]):plt.subplot(2, 4, i + 1)one_data = all_data.loc[:, col]one_data.plot(kind="kde")plt.title(col)
plt.show()

3.2 绘制每个特征的直方图

for i, col in enumerate(all_data.columns[:-1]):plt.subplot(2, 4, i + 1)feature_data = all_data.loc[:, col]feature_data.plot(kind="hist")plt.title(col)
plt.show()

4 模型训练和验证

4.1 对于训练集划分训练集和验证集,训练集占70%,验证集占30%,并且前11列为特征列,最后一列为标签列

all_data = shuffle(all_data)
train_num = int(len(all_data) * 0.7)
train_features, train_labels = all_data.iloc[:train_num, :-1].values, all_data.iloc[:train_num, -1].values
val_features, val_labels = all_data.iloc[train_num:, :-1].values, all_data.iloc[train_num:, -1].values

4.2 数据归一化

scaler = MinMaxScaler()
scaler.fit(train_features)
train_features = scaler.transform(train_features)
val_features = scaler.transform(val_features)

4.3 搭建模型,使用随机森林模型,使用cpu计算,随机森林是集成模型,包含了好多树模型。

model = RandomForestClassifier()
model.fit(train_features, train_labels) # 训练模型
train_pred = model.predict(train_features) # 在训练集测试
val_pred = model.predict(val_features) # 在验证集测试
print("train acc: {}".format(accuracy_score(train_labels, train_pred)))
print("val acc:{}".format(accuracy_score(val_labels, val_pred)))

4.4 使用交叉验证评估参数

score_list = []
cv_num = 10
for n_estimators in [25, 50, 70]:model = RandomForestClassifier(n_estimators=n_estimators)score = cross_val_score(model, train_features, train_labels, cv=cv_num)score_list.append(score)plt.plot(range(cv_num), score_list[0],range(cv_num), score_list[1],range(cv_num), score_list[2],)
plt.legend(["n=25","n=50","n=70"])
plt.show()

基于机器学习的音乐风格分类相关推荐

  1. Spotify 每周推荐功能:基于机器学习的音乐推荐

    原文地址:Spotify's Discover Weekly: How machine learning finds your new music 原文作者:Sophia Ciocca 译文出自:掘金 ...

  2. 基于Adaboost的音乐情绪分类算法

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

  3. 基于机器学习的电力系统故障分类预测模型

    电力系统是发电.输电.配电和利用系统的组合.简而言之,电力系统是任何电气系统的心脏.在电力系统中,故障或故障电流是任何异常电流.由于此类故障,整个系统可能会损坏并最终崩溃.这项工作的目的是将故障自动分 ...

  4. 音乐风格分类 - 使用CNN或CRNN模型在GTZAN数据集上进行音乐风格分类任务。

    在音乐信息检索领域,音乐风格分类是一个重要的任务,它可以帮助我们更好地理解音乐,并提供更好的音乐推荐和分类服务.本篇博客将介绍如何使用卷积神经网络(CNN)和循环神经网络(CRNN)模型来在GTZAN ...

  5. 题外:分类篇(音乐风格分类)基于BP神经网络

    语音特征参数MFCC的提取及识别 (2012-09-07 20:24:03) 转载▼ 耳蜗实质上相当于一个滤波器组,耳蜗的滤波作用是在对数频率尺度上进行的,在1000HZ下,人耳的感知能力与频率成线性 ...

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

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

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

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

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

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

  9. 基于机器学习的新闻文本分类

    Task1-数据探索分析 数据存储 由于用pandas一次性读取20w条数据显示memoryerror,内存不够,所以想到把数据存到数据库中,随用随取比较简便.把训练集20w条数据存到了mongodb ...

最新文章

  1. java 导入导出txt文件_Java读取和写入txt文件
  2. html中通过点击button标签实现页面跳转的三种方法
  3. 为啥HashMap的默认容量是16?
  4. 好玩小游戏来啦,免费拿走,一个赞一个关注就够啦
  5. 退出linux用户登录命令,Linux系统中用户的登入登出命令详解
  6. Spring单一类型依赖查找Bean
  7. mbot编程机器人怎么连接蓝牙_台式机蓝牙怎么连接
  8. 【c++】函数默认参数
  9. ads s参数拟合_在ADS仿真或者查看S参数的方法
  10. 计算机毕业设计论文题目分享
  11. 空气质量监测管理系统
  12. Display debug(Blue Screen , fliker)
  13. Flink任务失败,检查点失效:Exceeded checkpoint tolerable failure threshold.
  14. 如何做一个基于JAVA房产中介预约看房系统毕业设计毕设作品(springboot框架)
  15. vue项目转换服务器端渲染,vue-server-renderer实现vue项目改造服务端渲染
  16. [分享]方便的 windbg 命令 - !list
  17. 码云(Gitee)团队如何使用码云完成开发?
  18. 闲看花开花落,云卷云舒
  19. Arduino版读取程序的规则_如何在Arduino开发板上使用机器人操作系统(ROS)
  20. android 小窗口播放视频播放器,[安卓] 支持投屏、电视台和小窗口的视频播放器:MoboPlayer...

热门文章

  1. ios获取本机号码等
  2. 计算机高级培训测试题答案,计算机经典测试题及的答案.doc
  3. JavaScript DOM编程艺术学习心得系列 ——(二)DOM与浏览器战争
  4. 即构SDK支持对焦、变焦、曝光调整,让直播细节清晰呈现
  5. 如何直接下载优酷视频?不用优酷下载器下载视频方法技巧
  6. Ubuntu 使用pipy 镜像
  7. VS配置PCL“无法解析外部符号”
  8. ubuntu+appium+testng+android真机运行
  9. 下列关于虚拟存储器的叙述中,正确的是( )
  10. PageHelp问题