机器学习如何用于音频分析?

news2024/9/23 7:30:42

机器学习如何用于音频分析?

一、说明

近十年来,机器学习越来越受欢迎。事实上,它被用于医疗保健、农业和制造业等众多行业。随着技术和计算能力的进步,机器学习有很多潜在的应用正在被创造出来。由于数据以多种格式大量可用,因此现在是使用机器学习和数据科学从数据中提取各种见解并使用它们进行预测的合适时机。

机器学习最有趣的应用之一是音频分析和分别了解不同音频格式的质量。因此,使用各种机器学习和深度学习算法可确保使用音频数据创建和理解预测。
在这里插入图片描述
照片由 Med Badr Chemmaoui on Unsplash

二、机器学习处理音频

在进行音频分析之前,必须单独采集和分析信号样本。我们取样的速率也称为采样率或奈奎斯特率。将时域信号转换为频域信号,以便对信号有很好的逻辑理解,同时计算有用的分量,如功率和能量,这将非常方便。所有这些都可以作为我们的机器学习模型的特征,这些模型将使用它们进行预测。

音频信号通常可以转换为频谱图(图像),以便将其提供给卷积神经网络 (CNN) 进行预测。频谱图可以捕获音频信号的重要特征并给出 2D 表示,因此可以与基于图像的网络一起使用。

如果给它们一个图像,有很多 ML 模型可以很好地预测输出标签。因此,由振幅和不同频率单位组成的音频信号也可以转换为图像并用于稳健的 ML 预测。

在本文中,我们将通过考虑一个随机示例并绘制它来理解其图形表示,从而介绍如何读取音频文件。稍后,我们将使用图像数据执行特征工程,并在音频转换为图像时执行卷积运算。最后,我们将获得未见过数据的样本预测。请注意,此代码用于演示,不考虑特定的数据集。

读取数据

import matplotlib.pyplot as plt
import numpy as np
from scipy.io.wavefile import read

# Read in the audio file
sample_rate, audio_data = read('audio_file.wav')

# Convert the audio data to a numpy array
audio_data = np.array(audio_data)

# Get the length of the audio data
length = audio_data.shape[0] / sample_rate

# Create a time axis
time = np.linspace(0., length, audio_data.shape[0])

# Plot the audio data
plt.plot(time, audio_data)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.show()

我们将导入必要的库,这些库用于以主要以 ‘.wav’ 格式的形式读取音频文件。读取文件后,我们将得到一个数组表示形式,如上面的代码单元所示。最后,我们将绘制输出,只是为了看看它在 matplotlib 中的外观。

特征工程

import librosa

# Calculate the short-term Fourier transform (STFT) of the audio data
stft = librosa.stft(audio_data)

# Extract the magnitude and phase of the STFT
magnitude, phase = librosa.magphase(stft)

# Calculate the mel-scaled spectrogram of the audio data
mel_spec = librosa.feature.melspectrogram(audio_data, sr=sample_rate)

# Extract the Mel-frequency cepstral coefficients (MFCCs) from the mel-scaled spectrogram
mfccs = librosa.feature.mfcc(S=librosa.power_to_db(mel_spec), n_mfcc=20)

# Transpose the MFCCs so that each row represents a time frame and each column represents a coefficient
mfccs = mfccs.T

现在,数据已经绘制和可视化以查看 ‘.wav’ 文件中的异常情况,我们现在将使用一个名为 ‘librosa’ 的流行库,该库可用于计算音频数据的短期傅里叶变换。这是为了确保信号被分解成其组成频率,是一种在大量行业中广泛使用的技术。

训练模型

# Convert the audio data to a spectrogram
X = compute_spectrogram(X)

# Split data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)

# Build machine learning model
# In this case, let's use a random forest classifier with 100 trees
model = RandomForestClassifier(n_estimators = 100)

# Train model on training data
model.fit(X_train, y_train)

# Evaluate model on test data
accuracy = model.score(X_test, y_test)
print("Test accuracy:", accuracy)

现在我们已经使用 ‘librosa’ 来获取频率分量,我们将使用机器学习模型进行预测。需要注意的是,这是一个分类问题,因此,我们继续使用随机森林分类器。但是,请随意使用适合您的需求和业务的任何其他机器学习模型。

我们现在将使用相同的代码,但用于输出是连续而不是离散的回归任务。下面是有关如何在随机森林回归器的帮助下进行训练和监控性能的编码单元。

# Convert the audio data to a spectrogram
X = compute_spectrogram(X)

# Split data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)

# Build machine learning model
# In this case, let's use a random forest regressor with 100 trees
model = RandomForestRegressor(n_estimators = 100)

# Train model on training data
model.fit(X_train, y_train)

# Evaluate model on test data
accuracy = model.score(X_test, y_test)
print("Test accuracy:", accuracy)

超参数优化
在实时部署模型 (Random Forest) 之前,确定模型 (Random Forest) 的正确超参数非常重要。当涉及到深度神经网络时,有很多超参数需要搜索。由于我们使用随机森林作为基准模型,因此我们应该能够在最小的搜索空间中获得正确的超参数。让我们看看如何在常规数据集上执行超参数优化。

# Define hyperparameters to tune
param_grid = {'max_depth': [2, 4, 6, 8], 'min_samples_split': [2, 4, 6, 8]}

# Create a grid search object with 5-fold cross-validation
grid_search = GridSearchCV(model, param_grid, cv=5)

# Fit the grid search object to the training data
grid_search.fit(X_train, y_train)

# Print the best hyperparameters and score
print("Best hyperparameters:", grid_search.best_params_)
print("Best cross-validation score:", grid_search.best_score_)

# Evaluate the model on the test data
best_model = grid_search.best_estimator_
accuracy = best_model.score(X_test, y_test)
print("Test accuracy:", accuracy)

在代码单元中,我们指定估计器的数量和我们搜索的树的最大深度,以便在测试集上获得最佳结果。最后,我们监控分数,看看超参数的变化如何使模型获得更好的性能。

模型部署

import pickle

# Save the model to a file
with open('model.pkl', 'wb') as f:
    pickle.dump(model, f)

# Load the model from a file
with open('model.pkl', 'rb') as f:
    model = pickle.load(f)

# Use the model to make predictions on new data
predictions = model.predict(new_data)

现在,我们已经执行了超参数优化以给出最准确的预测,是时候保存提供最佳结果的机器学习模型了。因此,我们将在 python 中使用 pickle 库,这样我们就可以自由地保存机器学习模型,以便以后用于服务。

保存模型后,我们将在构建生产就绪代码时再次加载它,并使用它来预测传入的批次或数据流。需要注意的是,在训练数据期间用于执行特征化的步骤集也必须在测试集上执行,以便数据中没有偏斜。

三、持续监控

我们知道,该模型在接收来自用户的传入数据的地方提供数据方面表现良好,这也是一个重要但被忽视的步骤,即监控模型的预测质量。通常,模型可能无法像训练期间那样执行。这可能是因为训练数据和服务数据之间存在差异。例如,可能存在概念漂移或数据漂移等情况,这些情况可能会对投入生产的推理模型的性能产生重大影响。

持续监控可确保采取措施检查预测模型并了解它们在变化数据中的行为。如果预测最不准确,并且导致企业收入损失,则应采取措施再次使用这些偏差数据训练模型,以便模型的行为不会发生意外变化。

四、结论

阅读本文后,您可能已经对如何对音频数据执行机器学习并了解整个工作流程有了很好的了解。我们已经看到了读取数据、特征工程、训练模型、超参数调整、模型部署以及持续监控等步骤。应用这些步骤中的每一个并确保在开发管道时没有错误,这将导致一个强大的机器学习生产系统。

以下是您可以联系我或查看我的作品的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2099950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电赛2024年H题智能小车基于MSPM0G3507主控MCU(利用8路灰度加上MPU6050的解决方式)

一.前言 前段时间,激烈的电赛刚刚结束,很荣幸啊,也是十分的不甘心,本次的湖北赛区H题只拿到了一个省二,看最终的排名,在H题中我们离省一也就差几名。但是整个比赛已经过去了,现在不甘与不舍&…

浏览器按F12进入开发者模式后频繁因为异常而暂停导致无法分析页面xpath

在分析某个内部页面xpath时,遇到一个问题,因为频繁异常而自动暂停导致无法分析页面xpath,如下图: 折腾良久发现把下图右侧的两个抛出异常自动暂停的开关 取消勾选就可以了

微信小程序接入客服功能

前言 用户可使用小程序客服消息功能,与小程序的客服人员进行沟通。客服功能主要用于在小程序内 用户与客服直接沟通用,本篇介绍客服功能的基础开发以及进阶功能的使用,另外介绍多种客服的对接方式。 更多介绍请查看客服消息使用指南 客服视…

2.4 堆栈

🎓 微机原理考点专栏(通篇免费) 欢迎来到我的微机原理专栏!我将帮助你在最短时间内掌握微机原理的核心内容,为你的考研或期末考试保驾护航。 为什么选择我的视频? 全程考点讲解:每一节视频都…

数据结构——排序【下】

目录 一、计数排序 二、快速排序 三、归并排序 四、八大排序时间复杂度及其稳定性 一、计数排序 计数排序是一个非基于比较的排序算法,元素从未排序状态变为已排序状态的过程,是由额外空间的辅助和元素本身的值决定的。该算法于1954年由 Harold H. S…

Github 2024-09-03 Python开源项目日报 Top10

根据Github Trendings的统计,今日(2024-09-03统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10HCL项目1JavaScript项目1Payloads All The Things - 有用的Web应用程序安全负载和绕过列表 创建周期:2639 天开发语言:Python协议…

Go语言?IDEA能支持吗?增删查走起?

序: 最近突然身边突然开始冒出关于go语言的只言片语,很好奇这个go语言是怎么样的?这几天有空就会去网上浏览一遍各位大咖的简介。这边主要是已学习为目的,关键人家都说它好这边记录一下学习过程的进坑和爬坑过程供大家娱乐一下。…

echarts3D地图:旋转、添加纹理图片(vue3)

首先安装echarts和echarts-gl依赖,注意的是,echarts-gl版本需安装低版本,且与echarts5版本不兼容,需要单独安装4版本,这里我安装的4.2.1版本。 $ npm install echarts4npm:echarts4.2.1 echarts-gl1.1.0npm可以安装ec…

帧中继了解

定义 帧中继工作在OSI参考模型的数据链路层,是数据链路层使用简化的方法传送和交换数据单元的一种方式。 帧中继的重要特点之一是将X.25分组交换网中分组节点的差错控制、确认重传、流量控制、拥塞避免等处理过程进行简化,缩短了处理时间,这…

论文速读|通过人类远程操作的深度模仿学习框架:人型机器人的行走操纵技能

项目地址:Deep Imitation Learning for Humanoid Loco-manipulation through Human Teleoperation 本文详细介绍了 TRILL(Teleoperation and Imitation Learning for Loco-manipulation)框架,它是一个用于人型机器人行走操纵技能训…

华为OD机试真题 - 中文分词模拟器(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 2024E卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试真题(Python/JS/C/C)》。 刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,…

Spark-Yarn模式如何配置历史服务器

在Spark程序结束之后我们也想看到运行过程怎么办? Yarn模式下,通过以下步骤配置历史服务器即可: mv spark-defaults.conf.template spark-defaults.conf修改spark-default.conf 文件,配置日志存储路径 spark.eventLog.enabled true spark.…

pg小版本升级

文章目录 一、升级计划二、升级步骤1、安装目标版本数据库2、停止数据库实例3、备份数据目录4、调整环境变量,PGHOME/LD_LIRARAY_PATH5、使用新版本启动数据库 三、检查升级后的数据库 一、升级计划 pg14.0 -> pg14.9 查看当前版本信息: select ve…

24 - 第三方库的使用支持

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 第三方库的使用支持1.1 问题1.2 经验假设1.3 第三方库在项目中的位置 2. 第三方库的编译阶段支持3. 第三方库的链接阶段支持4. 实验 1. 第三方库的使用支持 1.1 问题 当需要使用第三方库文件时,编译环境中的 makef…

vue2中用到了 vuex 实现一个 留言板效果

一.效果图展示&#xff1a; 二.静态网页&#xff08;html&#xff09;代码 <template><div><h1>班级留言板</h1><ol><li v-for"(msg, index) in classmsgs" :key"index">{{ msg }} <a href"#" click.p…

折叠屏、曲面屏始终都是少数派,凭啥挑战iPhone16?

国内手机市场是一个很特别的市场&#xff0c;眼见着在处理器性能、拍照等方面都已无法再挑战苹果&#xff0c;国产手机这几年紧紧抓住折叠屏、曲面屏等差异化技术&#xff0c;试图与苹果掰手腕&#xff0c;然而从现实来看&#xff0c;这些技术其实都已失败了。 曲面屏基本可以说…

直接计算法计算CRC-32/MPEG-2

代码&#xff1a; #include<stdio.h>#define BUFFER_SIZE 114typedef unsigned int uint32_t; typedef unsigned char uint8_t;uint8_t output[BUFFER_SIZE*4]; static const uint32_t aDataBuffer[BUFFER_SIZE] {0x00001021, 0x20423063, 0x408450a5, 0x60c670e7, …

引领八亿人的“发现感”,深度旅游时代正式到来

原文链接&#xff1a;深度旅游新纪元已降临&#xff0c;我们正带领八亿旅行者开启探索之旅&#xff0c;发现世界的无限精彩 一些人在旅行时渴望探索全新的城市&#xff0c;体验那里独特的风情&#xff1b;而另一些人则被“必住榜”上的苏州平江华府酒店吸引&#xff0c;想要亲…

计算机毕业设计Spark+PyTorch股票推荐系统 股票预测系统 股票可视化 股票数据分析 量化交易系统 股票爬虫 股票K线图 大数据毕业设计 AI

《SparkPyTorch股票推荐与预测系统》开题报告 一、研究背景与意义 随着信息技术的飞速发展和全球金融市场的日益繁荣&#xff0c;股票投资已成为广大投资者的重要选择之一。然而&#xff0c;股票市场的复杂性和不确定性使得投资者在做出投资决策时面临巨大的挑战。传统的股票…

ceph中pg与pool关系

在Ceph中&#xff0c;PG&#xff08;Placement Group&#xff09;和Pool是非常重要的概念&#xff0c;它们在Ceph的存储架构中扮演着关键角色。理解这些概念有助于更好地管理和优化Ceph集群。下面详细介绍这两个概念及其相互关系。 Pool&#xff08;存储池&#xff09; 定义&am…