基于机器学习的音乐风格分类
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()
基于机器学习的音乐风格分类相关推荐
- Spotify 每周推荐功能:基于机器学习的音乐推荐
原文地址:Spotify's Discover Weekly: How machine learning finds your new music 原文作者:Sophia Ciocca 译文出自:掘金 ...
- 基于Adaboost的音乐情绪分类算法
基于Adaboost的音乐情绪分类算法-2015实习设计总结 ========================================= 基于Adaboost的音乐情绪分类算法-2015实习设 ...
- 基于机器学习的电力系统故障分类预测模型
电力系统是发电.输电.配电和利用系统的组合.简而言之,电力系统是任何电气系统的心脏.在电力系统中,故障或故障电流是任何异常电流.由于此类故障,整个系统可能会损坏并最终崩溃.这项工作的目的是将故障自动分 ...
- 音乐风格分类 - 使用CNN或CRNN模型在GTZAN数据集上进行音乐风格分类任务。
在音乐信息检索领域,音乐风格分类是一个重要的任务,它可以帮助我们更好地理解音乐,并提供更好的音乐推荐和分类服务.本篇博客将介绍如何使用卷积神经网络(CNN)和循环神经网络(CRNN)模型来在GTZAN ...
- 题外:分类篇(音乐风格分类)基于BP神经网络
语音特征参数MFCC的提取及识别 (2012-09-07 20:24:03) 转载▼ 耳蜗实质上相当于一个滤波器组,耳蜗的滤波作用是在对数频率尺度上进行的,在1000HZ下,人耳的感知能力与频率成线性 ...
- 基于 Python 的音乐流派分类
音乐就像一面镜子,它可以告诉人们很多关于你是谁,你关心什么,不管你喜欢与否.我们喜欢说"you are what you stream" - Spotify Spotify 拥有 ...
- 深度学习 音乐分类_基于神经网络的音乐流派分类
介绍本文讨论神经网络对声音样本的音乐类型进行分类的任务.当我决定在声音处理领域工作时,我认为声音类型分类和图像分类是相同的问题.但是图像非常火热,我并没有找到太多关于深度学习来解决这个问题的相关资料. ...
- 基于CNN的音乐流派分类
文章目录 写在前面 正文开始 梅尔频谱图 收集和预处理数据 CNN是怎么做到的? 更深入的观察 蓝调还是爵士? 雷鬼还是嘻哈? 这是摇滚吗? 这告诉我们什么? 一个自然的问题 写在前面 笔者的上一篇翻 ...
- 基于机器学习的新闻文本分类
Task1-数据探索分析 数据存储 由于用pandas一次性读取20w条数据显示memoryerror,内存不够,所以想到把数据存到数据库中,随用随取比较简便.把训练集20w条数据存到了mongodb ...
最新文章
- java 导入导出txt文件_Java读取和写入txt文件
- html中通过点击button标签实现页面跳转的三种方法
- 为啥HashMap的默认容量是16?
- 好玩小游戏来啦,免费拿走,一个赞一个关注就够啦
- 退出linux用户登录命令,Linux系统中用户的登入登出命令详解
- Spring单一类型依赖查找Bean
- mbot编程机器人怎么连接蓝牙_台式机蓝牙怎么连接
- 【c++】函数默认参数
- ads s参数拟合_在ADS仿真或者查看S参数的方法
- 计算机毕业设计论文题目分享
- 空气质量监测管理系统
- Display debug(Blue Screen , fliker)
- Flink任务失败,检查点失效:Exceeded checkpoint tolerable failure threshold.
- 如何做一个基于JAVA房产中介预约看房系统毕业设计毕设作品(springboot框架)
- vue项目转换服务器端渲染,vue-server-renderer实现vue项目改造服务端渲染
- [分享]方便的 windbg 命令 - !list
- 码云(Gitee)团队如何使用码云完成开发?
- 闲看花开花落,云卷云舒
- Arduino版读取程序的规则_如何在Arduino开发板上使用机器人操作系统(ROS)
- android 小窗口播放视频播放器,[安卓] 支持投屏、电视台和小窗口的视频播放器:MoboPlayer...