机器学习——简单歌曲分类
歌曲文件特征处理
将歌曲.MP3格式文件转化成.wav格式文件,然后做傅里叶变换
- 安装pydub包,在anaconda3环境中:
pip install pydub
- 安装ffmpeg包,在anaconda3环境中:
pip install ffmpeg
,也可以在官网下载后配置环境变量http://ffmpeg.org/
安装后运行demo发现一直报这样错误:
然后根据错误描述去相应文件夹下找到utils.py文件,加入下面图片中的一行代码:
但是Jupyter还是提示找不到系统文件,遂放弃,用Pycharm运行几个demo都成功(真是醉了)。
(多说一句,歌曲文件在网易云音乐等音乐类软件按分类下载就行)
3、将每种类别的歌曲都转成.wav模式
from pydub import AudioSegment
import wave#将每种类别的歌曲.mp3格式转化为.wav格式
def trans_awv(class_name,n):path = "E:/CloudMusic/" + class_name + "/" + str(n).zfill(2) + ".mp3"song = AudioSegment.from_file(path, format='mp3')ex_path = "E:/CloudMusic/" + class_name + "/" + str(n).zfill(2) + ".wav"song.export(ex_path, format='wav')class_namelist = ["ballad", "classical", "metal", "pop", "rock"]
for list in class_namelist:for n in range(10):trans_awv(list, n)
4、 将歌曲.wav格式文件做fft转换(傅里叶变换)
def trans_fft(class_name ,n):path = "E:/CloudMusic/" + class_name + "/" + str(n).zfill(2) + ".wav"# sample_rate:采样率(采样率越高,如果单位时间采样点越多,信息损失的越少)# X 就是音乐文件sample_rate, X = wavfile.read(path)# 用傅立叶变化处理头1000的赫兹fft_data = abs(fft.fft(X)[:1000])ex_path = "E:/CloudMusic/" + class_name + "/" + str(n).zfill(2) + ".fft"# 把特征存到某个具体的路径下面去np.save(ex_path, fft_data)class_namelist = ["ballad", "classical", "metal", "pop", "rock"]
for list in class_namelist:for n in range(10):trans_fft(list, n)
构造训练集
"""
构造训练集
"""
X = []
Y = []
for list in class_namelist:for n in range(10):#转换后会有后缀.npypath = "E:/CloudMusic/" + list + "/" + str(n).zfill(2) + ".fft.npy"# 加载声音文件的前1000频率fft_data = np.load(path)X.append(fft_data[:,0])#取每种类别歌曲的索引号作为标签Y.append(class_namelist.index(list))#sklearn处理数组,所以将list转为数组
X = np.array(X)
Y = np.array(Y)
模型训练
"""
用逻辑回归训练模型
"""
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(multi_class="ovr",solver="liblinear",max_iter=10000)
model.fit(X, Y)
构建测试集并做预测
"""
构建测试集(这里只取一个歌曲作为测试集)
"""
#同样的先做mp3转wav处理,再进行傅里叶变换处理
song = AudioSegment.from_file("E:/CloudMusic/test/test.mp3", format='mp3')
song.export("E:/CloudMusic/test/test.wav", format='wav')
sample_rate, test = wavfile.read("E:/CloudMusic/test/test.wav")
test_data = abs(fft.fft(test)[:1000])
np.save("E:/CloudMusic/test/test.fft", test_data)
t = np.load("E:/CloudMusic/test/test.fft.npy")
new_testdata = []
new_testdata.append(t[:,0])
new_testdata = np.array(new_testdata)
#print(new_testdata)
#print(new_testdata.shape)
type_index = model.predict(new_testdata)
print(type_index)
print(class_namelist[type_index[0]])
E:\Users\Byan\anaconda3\python.exe E:/pycharm/test.py
[3]
popProcess finished with exit code 0
训练集测试集都很小很小 (小到都不能称为训练测试集),但分类结果竟然是对的 (只是运气比较好),所以只是学习过程中小小的实验一下,准确率的什么的就不测了哈哈哈。
补个所有导入的包,pycharm直接导入anaconda3的环境即可。可参考我另一篇博文:pycharm导入Anaconda3环境
from pydub import AudioSegment
import wave
import numpy as np
from scipy import fft
from scipy.io import wavfile
机器学习——简单歌曲分类相关推荐
- 基于统计概率和机器学习的文本分类技术
基于统计概率和机器学习的文本分类技术 -- 社区产品机器审核机制 一.现状 目前,所在公司社区类产品(论坛.博客.百科)每天都会接收到大量的垃圾.灌水信息,高峰期16小时内(晚6点以后到第二天9点前) ...
- Paper:《Multimodal Machine Learning: A Survey and Taxonomy,多模态机器学习:综述与分类》翻译与解读
Paper:<Multimodal Machine Learning: A Survey and Taxonomy,多模态机器学习:综述与分类>翻译与解读 目录 <Multimoda ...
- 基于scikit-learn机器学习库的分类预测
一旦你在scikit-learn中选择好机器学习模型,就可以用它来预测新的数据实例.初学者经常会有这样的疑问: 如何在scikit-learn中用我自己的模型进行预测? 在本教程中,你将会发现如何在P ...
- NLP(新闻文本分类)——基于机器学习的文本分类
文本表示方法 在机器学习算法的训练过程中,假设给定NNN个样本,每个样本有MMM个特征,这样组成了N×MN×MN×M的样本矩阵,然后完成算法的训练和预测.同样的在计算机视觉中可以将图片的像素看作特征, ...
- 基于Keras机器学习库的分类预测
在前面的博文中,我们分享了<基于scikit-learn机器学习库的分类预测>,本文将分享Keras机器学习库的分类预测. 一旦你在Keras中选择好机器学习模型,就可以用它来预测新的数据 ...
- 【机器学习】多分类学习的拆分策略
[机器学习]多分类学习 现实中常遇到多分类学习任务.有些二分类学习方法可直接推广到多分类,但在更多情形下,我们是基于一些基本策略,利用二分类学习器来解决多分类问题.所以多分类问题的根本方法依然是二分类 ...
- 机器学习的五大分类,监督学习 无监督学习 半监督学习 迁移学习 增强学习
机器学习的五大分类,监督学习 无监督学习 半监督学习 迁移学习 增强学习@监督学习 无监督学习 半监督学习 监督学习 在监督学习中,给定一组数据,我们知道正确的输出结果应该是什么样子,并且知道在输入和 ...
- 机器学习中的分类算法
机器学习中的分类算法 机器学习,模式识别中很重要的一环,就是分类,因为计算机其实无法深层次地理解文字图片目标的意思,只能回答是或者不是.当然现在卷积神经网络正在希望计算机能够看懂东西,这次我们先来看一 ...
- 在托马斯·哈代的五月中学习机器学习之新闻分类
先送上一首托马斯·哈代的诗 Growth in May I enter a daisy-and-buttercup land, And thence thread a jungle of grass: ...
最新文章
- UCloud全年营收 11.9 亿元,净利润 7715 万元
- 450g吐司烘烤温度_教你一手如何判断吐司面包是否烤熟
- 学习笔记整理之对象的转型
- GODOT 3.0 开发进度汇报 #6
- Mac OS X 在Finder新建文本文件
- 群晖linux怎么进入u盘,黑群辉直接更改启动u盘的sn、mac等信息
- 究竟是什么在影响着我?
- encodeURI、encodeURIComponent、btoa及其应用场景
- 【MySQL查询】复杂查询:别名、外键join
- Windows使用msi安装MySQL安装教程
- linux 批量部署 pdf,Linux服务之批量部署篇
- Qt工作笔记-QGraphicsProxyWidget放自定义界面实现拖动
- 并行计算(一)——初步认识
- ruby和python比较_为什么说Ruby比Python容易阅读
- Java知识导航总图
- python成绩管理系统设计 gui csdn_用golang简单编写学生信息管理系统
- Hyperledger Fabric教程(10)-- peer命令-链码chaincode
- 实验11——指针的基础应用
- 【知识图谱】Louvain、LPA等5类经典社区发现算法 Python 实战
- c语言常见头文件大全,C语言头文件大全(free)