MATLAB使用后期融合实现声音场景识别(四)——训练与评估集成分类器

本文是对MATLAB官网文档Acoustic Scene Recognition Using Late Fusion训练集成分类器部分的翻译与解析,请参考原网页进行理解。

Feature Extraction for Ensemble Classifier集成分类器的特征提取

[4]中显示小波散射可以很好地表示声学场景。定义一个waveletScattering(小波工具箱)对象。通过反复试验确定不变性量表和品质因数。

sf = waveletScattering('SignalLength',size(data,1), ...% 针对一个样本
                       'SamplingFrequency',fs, ...
                       'InvarianceScale',0.75, ...
                       'QualityFactors',[4 1]); % 得到一个小波时间散射对象

将音频信号转换为单声道,然后调用featureMatrix(小波工具箱)以返回散射分解框架sf的散射系数。

dataMono = mean(data,2);% 得到样本每一行的平均值
scatteringCoeffients = featureMatrix(sf,dataMono,'Transform','log');% 得到散射特征矩阵
featureVector = mean(scatteringCoeffients,2);%10秒音频片段上的散射系数求平均值
fprintf('Number of wavelet features per 10-second clip = %d\n',numel(featureVector))%10秒剪辑的小波特征数量

对全部样本,辅助函数HelperWaveletFeatureVector执行上述步骤。辅助函数HelperWaveletFeatureVector执行上述步骤。使用带有cellfun和HelperWaveletFeatureVector的tall数组来并行化特征提取。提取训练集和测试集的小波特征向量。

scatteringTrain = cellfun(@(x)HelperWaveletFeatureVector(x,sf),train_set_tall,'UniformOutput',false);
xTrain = gather(scatteringTrain);
xTrain = cell2mat(xTrain')';
   
scatteringTest = cellfun(@(x)HelperWaveletFeatureVector(x,sf),test_set_tall,'UniformOutput',false);
xTest = gather(scatteringTest);
xTest = cell2mat(xTest')';

Define and Train Ensemble Classifier定义和训练集成分类器

使用fitcensemble创建训练有素的分类集成模型(ClassificationEnsemble)。

subspaceDimension = min(150,size(xTrain,2) - 1);
numLearningCycles = 30;
classificationEnsemble = fitcensemble(xTrain,adsTrain.Labels, ...
    'Method','Subspace', ...
    'NumLearningCycles',numLearningCycles, ...
    'Learners','discriminant', ...
    'NPredToSample',subspaceDimension, ...
    'ClassNames',removecats(unique(adsTrain.Labels)));

Evaluate Ensemble Classifier评估集成分类器

对于每个10秒钟的音频剪辑,调用预测以返回标签和权重,然后将其映射到相应的预测位置。调用混淆图以可视化测试集的准确性,并打印平均值。

[waveletPredictedLabels,waveletResponses] = predict(classificationEnsemble,xTest);
figure
cm = confusionchart(adsTest.Labels,waveletPredictedLabels,'title','Test Accuracy - Wavelet Scattering');
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
fprintf('Average accuracy of classifier = %0.2f\n',mean(adsTest.Labels==waveletPredictedLabels)*100)

Apply Late Fusion使用后期融合

对于每个10秒的剪辑,在小波分类器上调用预测,然后CNN返回一个向量,该向量指示对其决策的相对置信度。将waveletResponses与cnnResponses相乘以创建后期融合系统。

fused = waveletResponses .* cnnResponses;
[~,classIdx] = max(fused,[],2);
predictedLabels = classes(classIdx);

Evaluate Late Fusion评估后期融合

调用混淆图以可视化融合的分类准确性,将平均精度打印到命令窗口。

figure
cm = confusionchart(adsTest.Labels,predictedLabels,'title','Test Accuracy - Fusion');
cm.ColumnSummary = 'column-normalized';
cm.RowSummary = 'row-normalized';
fprintf('Average accuracy of fused models = %0.2f\n',mean(adsTest.Labels==predictedLabels)*100)

Close the parallel pool结束并行计算

delete(pp)
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值