机器学习——简单歌曲分类
歌曲文件特征处理
将歌曲.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: ...
最新文章
- 最新消息!阿里四舍五入无限期延迟复工,字节跳动、腾讯......等企业也再次延迟!...
- tuple 方法总结整理
- Daily Scrum02 12.04
- 解决: Intellij IDEA 运行报错 Command line is too long
- Numpy数据分析数值范围调整、计算
- CentOS7救援模式以及救援模式的网络配置
- 完美C语言通讯录(含代码)
- JZ2440.jflash配置
- 哈工大计算机系统大作业:程序人生-Hello’s P2P
- matlab提取电压基波分量,有源电力滤波器三种基波提取方法的对比分析
- jsp实现简单用户登录(用户7天内免登录)
- web前端基础——实现动画效果
- 红米手机5获取Root超级权限的步骤
- 三针重叠问题算法整理
- 【Android】Activity详解
- 生成酷炫代码注释(根据图片生成)
- python 自动生成word文档,用 Python 自动生成 Word 文档
- 网站会员与动网论坛会员同步整合非官方方法
- UCML.NET开发平台 - 产品简介
- 全新的松松软文平台上线公告