您现在的位置: 首页 > 网站导航收录 > 百科知识百科知识
librosa(librosafeaturemelspectrogram)
数据,特征,音频librosa(librosafeaturemelspectrogram)
发布时间:2019-02-08加入收藏来源:互联网点击:
音频样本的长度都不同,这意味着频谱图也会有不同的长度。因此为了标准化所有录音,首先要将它们剪切到正好3秒的长度:太短的样本会被填充,而太长的样本会被剪掉。
一旦计算了所有这些频谱图,我们就可以继续对它们执行一些EDA!而且因为看到“性别”似乎与录音有特殊的关系,所以分别可视化两种性别的平均梅尔谱图,以及它们的差异。
男性说话者的平均声音低于女性。这可以通过差异图中的较低频率(在红色水平区域中看到)的更多强度来看出。
现在已经可以进行建模了。我们有多种选择。关于模型,我们可以……
·训练我们经典(即浅层)机器学习模型,例如LogisticRegression或SVC。
·训练深度学习模型,即深度神经网络。
·使用TensorflowHub的预训练神经网络进行特征提取,然后在这些高级特征上训练浅层或深层模型
而我们训练的数据是
·CSV文件中的数据,将其与频谱图中的“mel强度”特征相结合,并将数据视为表格数据集
·单独的梅尔谱图并将它们视为图像数据集
·使用TensorflowHub现有模型提取的高级特征,将它们与其他表格数据结合起来,并将其视为表格数据集
当然,有许多不同的方法和其他方法可以为建模部分创建数据集。因为我们没有使用全量的数据,所以在本文我们使用最简单的机器学习模型。
经典(即浅层)机器学习模型
这里使用EDA获取数据,与一个简单的LogisticRegression模型结合起来,看看我们能在多大程度上预测说话者的年龄。除此以外还使用GridSearchCV来探索不同的超参数组合,以及执行交叉验证。
fromsklearn.linear_modelimportLogisticRegression
fromsklearn.preprocessingimportRobustScaler,PowerTransformer,QuantileTransformer
fromsklearn.decompositionimportPCA
fromsklearn.pipelineimportPipeline
fromsklearn.model_selectionimportGridSearchCV
#Createpipeline
pipe=Pipeline(
("scaler",RobustScaler()),
("pca",PCA()),
("logreg",LogisticRegression(class_weight="balanced")),
#Creategrid
grid={
"scaler":[RobustScaler(),PowerTransformer(),QuantileTransformer()],
"pca":[None,PCA(0.99)],
"logreg__C":np.logspace(-3,2,num=16),
#CreateGridSearchCV
grid_cv=GridSearchCV(pipe,grid,cv=4,return_train_score=True,verbose=1)
#TrainGridSearchCV
model=grid_cv.fit(x_tr,y_tr)
#CollectresultsinaDataFrame
cv_results=pd.DataFrame(grid_cv.cv_results_)
#Selectthecolumnsweareinterestedin
col_of_interest=[
"param_scaler",
"param_pca",
"param_logreg__C",
"mean_test_score",
"mean_train_score",
"std_test_score",
"std_train_score",
cv_results=cv_results[col_of_interest]
#Showthedataframesortedaccordingtoourperformancemetric
cv_results.sort_values("mean_test_score",ascending=False)
作为上述DataFrame输出的补充,还可以将性能得分绘制为探索的超参数的函数。但是因为使用了有多个缩放器和PCA,所以需要为每个单独的超参数组合创建一个单独的图。
在图中,可以看到总体而言模型的表现同样出色。当降低C的值时,有些会出现更快的“下降”,而另一些则显示训练和测试(这里实际上是验证)分数之间的差距更大,尤其是当我们不使用PCA时。
下面使用best_estimator_模型,看看它在保留的测试集上的表现如何。
#Computescoreofthebestmodelonthewithheldtestset
best_clf=model.best_estimator_
best_clf.score(x_te,y_te)
>>>0.4354094579008074
这已经是一个很好的成绩了。但是为了更好地理解分类模型的表现如何,可以打印相应的混淆矩阵。
虽然该模型能够检测到比其他模型更多的20岁样本(左混淆矩阵),但总体而言,它实际上在对10岁和60岁的条目进行分类方面效果更好(例如,准确率分别为59%和55%)。
在这篇文章中,首先看到了音频数据是什么样的,然后可以将其转换成哪些不同的形式,如何对其进行清理和探索,最后如何将其用于训练一些机器学习模型。如果您有任何问题,请随时发表评论。
最后本文的源代码在这里下载:
作者:MichaelNotter
python怎么把输出保存为一个文件?
写入什么数据就用什么模式打开文件,写二进制数据就用二进制模式打开文件,这样就没问题了。
本文到此结束,希望对大家有所帮助呢。
上一篇:大连国际股吧(大连圣亚股吧)
下一篇:返回列表
相关链接 |
||
网友回复(共有 0 条回复) |