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

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

一、说明

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

机器学习最有趣的应用之一是音频分析和分别了解不同音频格式的质量。因此,使用各种机器学习和深度学习算法可确保使用音频数据创建和理解预测。
在这里插入图片描述
照片由 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.mfbz.cn/a/872835.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

EasyExcel实现复杂Excel的导入

最近项目中遇到一个复杂的Excel的导入,并且数据量较大。因为数据不规则,所以只能使用POI进行自定义读取,但是发现数据量大之后,读取数据非常耗时。后面换成EasyExcel,性能起飞。 1. Excel样板 如上图,需要…

USB - 笔记

1.USB接口区分 2 充电宝 图中提到的各种充电协议都是用于快速充电技术的标准,适用于不同品

Chrome 浏览器插件获取网页 window 对象(方案三)

前言 最近有个需求,是在浏览器插件中获取 window 对象下的某个数据,当时觉得很简单,和 document 一样,直接通过嵌入 content_scripts 直接获取,然后使用 sendMessage 发送数据到插件就行了,结果发现不是这…

JAMA network open|自动化定量评估胃肠道肿瘤中三级淋巴结构的机器学习模型|文献精析·24-09-07

小罗碎碎念 这篇文章报道了一种基于机器学习模型的自动化方法,用于在常规组织病理学图像中检测和分类胃肠道癌症中的三级淋巴结构,并验证了其与患者生存预后的关联。 在这项多中心诊断/预后研究中,开发了一种基于机器学习的计算工具&#xff…

【pyhton】python如何实现将word等文档中的文字转换成语音

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

数据结构基本知识

一、什么是数据结构 1.1、组织存储数据 ---------》内存(存储) 1.2、研究目的 如何存储数据(变量,数组....)程序数据结构算法 1.3、常见保存数据的方法 数组:保存自己的数据指针:是间接访问已经存在的…

移远通信高端5G智能模组SG560D-NA率先通过PTCRB认证

近日,移远通信宣布,其基于高通QCM6490平台打造的高端5G智能模组SG560D-NA顺利通过PTCRB认证。 在此之前,该模组还获得了美国FCC和加拿大IC认证,这意味着,其已完全满足北美地区的相关标准和规定,能够支持相关…

【AI大模型应用开发】2.1 Function Calling连接外部世界 - 入门与实战(1)

Function Calling是大模型连接外部世界的通道,目前出现的插件(Plugins )、OpenAI的Actions、各个大模型平台中出现的tools工具集,其实都是Function Calling的范畴。时下大火的OpenAI的GPTs,原理就是使用了Function Cal…

C++ | Leetcode C++题解之第355题设计推特

题目&#xff1a; 题解&#xff1a; class Twitter {struct Node {// 哈希表存储关注人的 Idunordered_set<int> followee;// 用链表存储 tweetIdlist<int> tweet;};// getNewsFeed 检索的推文的上限以及 tweetId 的时间戳int recentMax, time;// tweetId 对应发送…

828华为云征文 | 华为云Flexus X实例上实现Docker容器的实时监控与可视化分析

Docker容器监控之 CAdvisorInfluxDBGranfana 需要了解 本文章主要讲述在 华为云Flexus X 实例上搭建开源的容器管理平台&#xff0c;使用的Web UI界面来简化和优化容器及集群的管理和监控选择合适的云服务器&#xff1a; 本文采用的是 华为云服务器 Flexus X 实例&#xff08;…

Prefetch文件分析

目录 介绍步骤 介绍 Prefetch&#xff08;预读取&#xff09;&#xff0c;从Windows XP开始引入&#xff0c;用来加速应用程序启动过程。Prefetch包含可执行文件的名称、文件时间戳、运行次数、上次执行时间、Hash等。Win7上记录最近128个可执行文件的信息&#xff0c;Win8-10…

正点原子STM32F103+ESP8266+DS18B20+DHT11连接阿里云

文章目录 MQTT协议1. 基础知识2. 报文形式3. 连接报文4. 心跳报文5. 订阅报文5.1. 订阅主题报文SUBSCRIBE5.2. 订阅确认SUBACK5.3. 取消订阅UNSUBSCRIBE5.4. 取消订阅确认UNSUBACK 6. 发布报文6.1. 发布消息PUBLISH6.2. 发布确认PUBACK 7. 阿里云账号创建8. 网络调试助手接入阿…

Java | Leetcode Java题解之第389题找不同

题目&#xff1a; 题解&#xff1a; class Solution {public char findTheDifference(String s, String t) {int ret 0;for (int i 0; i < s.length(); i) {ret ^ s.charAt(i);}for (int i 0; i < t.length(); i) {ret ^ t.charAt(i);}return (char) ret;} }

Matplotlib 颜色设置详解

在使用matplotlib进行颜色绘制的时候,如绘制图表、背景色或者对文字设置的时候都可以配置颜色, 以下说明主流的三种颜色使用方法 颜色名称 可以是直接使用颜色名称的字符串对color进行赋值,包括可以使用首字母缩写或者完整拼写的形式,以下为部分颜色的书写形式 缩写版 • …

Spring Boot 多数据源配置(JPA)

目录 前言 前置环境 pom yml Entity Dao Config Controller 演示 前言 一般一个系统至少有一个数据源&#xff0c;用来持久化业务数据以及查询。单个数据源的系统很常见&#xff0c;在 Spring Boot 框架下配置也很简单。在约定大于配置这个思想下&#xff0c;只需要在…

递推,CF 353D - Queue

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 353D - Queue 二、解题报告 1、思路分析 手玩一下&#xff0c;我们发现相…

[数据集][目标检测]人脸口罩佩戴目标检测数据集VOC+YOLO格式8068张3类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;8068 标注数量(xml文件个数)&#xff1a;8068 标注数量(txt文件个数)&#xff1a;8068 标注…

uniapp写的一个年月日时分秒时间选择功能

代码: <template><view><picker mode"multiSelector" :value"multiIndex" :range"multiRange" change"onMultiChange"><view class"picker">当前选择&#xff1a;{{ formattedDateTime }}</vie…

VisualStudio环境搭建C++

Visual Studio环境搭建 说明 C程序编写中&#xff0c;经常需要链接头文件(.h/.hpp)和源文件(.c/.cpp)。这样的好处是&#xff1a;控制主文件的篇幅&#xff0c;让代码架构更加清晰。一般来说头文件里放的是类的申明&#xff0c;函数的申明&#xff0c;全局变量的定义等等。源…

大路灯护眼灯有必要吗安全吗?性价比高落地护眼灯推荐

大路灯护眼灯有必要吗安全吗&#xff1f;近几年来&#xff0c;随着生活节奏的加快&#xff0c;目前青少年的近视率呈现一个直线上升的趋势&#xff0c;其中占比达到了70%以上&#xff0c;并且最令人意外的是小学生竟然也占着比较大的比重&#xff0c;这一系列的数据不仅表明着近…