主要内容

训练序列与不平衡类分类网络使用数据

这个例子展示了如何利用一维卷积神经网络分类序列使用类权重修改培训占不平衡类。

类权重定义每个类的相对重要性的培训过程。类权重各自的频率成反比类因此增加的重要性不流行类的培训过程。

这个例子训练序列分类卷积神经网络使用一个包含综合数据集生成的波形与不同数量的锯齿波、正弦波,方波,三角波。

加载序列数据

加载的数据的例子WaveformData.mat。数据是一个numObservations1单元阵列的组合,numObservations是序列的数量。每个序列都是一个numChannels——- - - - - -numTimeSteps数字数组,numChannels频道的顺序和数量吗numTimeSteps是时间序列中的步骤的数量。在相应的目标numObservations1分类数组。

负载WaveformData

视图的观察。

numObservations =元素个数(数据)
numObservations = 1000

视图的通道数序列。网络培训,每个序列必须有相同数量的渠道。

{1}numChannels =大小(数据,1)
numChannels = 3

波形的视图类的数量。

numClasses =元素个数(独特(标签)
numClasses = 4

想象情节的头几个序列。

图tiledlayout (2, 2)i = 1:4 nexttile stackedplot({我}”)包含数据(“时间步”标题(标签(i))结束

准备培训资料

类权重影响训练一个分类网络,一个或多个类必须比其他人更普遍,换句话说,类必须是不平衡的。展示的效果不平衡类对于本例,保留所有正弦波和删除大约30%的锯齿波,方波的50%,和70%的三角波。

idxImbalanced = = =(标签“锯齿”和兰德(numObservations 1) < 0.7)| = =(标签“正弦”)| = =(标签“广场”和兰德(numObservations 1) < 0.5)| = =(标签“三角形”和兰德(numObservations 1) < 0.3);dataImbalanced =数据(idxImbalanced);labelsImbalanced =标签(idxImbalanced);

视图类的平衡。

图直方图(labelsImbalanced) ylabel (“阶级频率”)

预留数据验证和测试。使用trainingPartitions附加到这个例子作为支持文件,数据分割成包含70%的数据训练集,验万博1manbetx证集包含15%的数据,和一个测试集包含了剩下的15%的数据。

numObservations =元素个数(dataImbalanced);[idxTrain, idxValidation idxTest] = trainingPartitions (numObservations [0.7 0.15 0.15]);XTrain = dataImbalanced (idxTrain);XValidation = dataImbalanced (idxValidation);XTest = dataImbalanced (idxTest);TTrain = labelsImbalanced (idxTrain);TValidation = labelsImbalanced (idxValidation);tt = labelsImbalanced (idxTest);

确定Inverse-Frequency类权重

对于典型的分类网络,一个分类层通常遵循softmax层。在培训期间,分类层通过接收损失值计算叉将softmax层和分配每个输入值之一 K 互斥类为1——使用熵函数 K 编码方案[1]:

损失 = 1 N n = 1 N = 1 K w t ln y

N 样品的数量, K 类的数量, w 类的重量吗 , t 的指标吗 n 样品属于 th类, y 是收到的值将softmax层样品吗 n 为类 。类具有较高权重因此造成更多的损失。

防止网络被偏向更普遍的类,类权重计算的频率成反比的类:

w = N K n = 1 N t

类=独特(labelsImbalanced) ';i = 1: numClasses classFrequency (i) =总和(TTrain(:) = =类(i));classWeights (i) =元素个数(XTrain) / (numClasses * classFrequency(我));结束
类=1×4分类锯齿波正弦平方三角形
classWeights
classWeights =1×40.9888 0.5456 1.3343 2.4611

定义网络体系结构

创建一个卷积分类网络。

  • 使用序列输入层和一个输入大小相匹配的渠道数量的输入数据。

  • 为更好的适应和防止培训不同,设置归一化选择的顺序输入层“zscore”。这样做可实现零均值和单位方差序列数据。

  • ReLU层使用一层一维卷积,卷积和一批标准化层,宽度10层有10个过滤器。

  • 作为一维卷积层要求输入至少有尽可能多的时间步过滤大小,设定最小长度等于接受序列输入层过滤器的大小。

  • 帮助防止网络过度拟合,指定一个辍学层。

  • 减少卷积的输出层为一个向量,使用一维全球最大池层。

  • 输出映射到一个向量的概率,指定一个完全连接层和一个输出大小匹配的类的数量。

  • 指定一个softmax层和一层分类,分类的类和相应的类权重层。

filterSize = 10;numFilters = 10;layersWeighted = [sequenceInputLayer (numChannels正常化=“zscore”,最小长度= filterSize) convolution1dLayer (filterSize numFilters) batchNormalizationLayer reluLayer dropoutLayer globalMaxPooling1dLayer fullyConnectedLayer (numClasses) softmaxLayer classificationLayer(类=类,ClassWeights = ClassWeights)];

相比之下,创建第二个卷积分类网络,不使用类权重。

层= layersWeighted;层(结束)。ClassWeights =“没有”;

指定培训选项

指定培训选项

  • 火车用亚当优化器。

  • 火车500时代。对于更大的数据集,您可能不需要为尽可能多的火车时代一个不错的选择。

  • 指定序列和类用于验证。

  • 设置学习速率为0.01。

  • 截断在每个mini-batch序列有相同的长度最短的序列。删除序列确保没有添加填充物,在丢弃的成本数据。时间序列的所有步骤的序列可能包含重要信息,截断可以防止网络实现一个不错的选择。

  • 输出网络验证最低的损失。

  • 显示训练过程在一个阴谋。

  • 禁用详细输出。

选择= trainingOptions (“亚当”,MaxEpochs = 500,ValidationData = {XValidation, TValidation},InitialLearnRate = 0.01,SequenceLength =“最短”,OutputNetwork =“best-validation-loss”,Verbose = false,情节=“训练进步”);

培训网络

火车的卷积网络使用指定的选项trainNetwork函数。

netWeighted = trainNetwork (XTrain TTrain、layersWeighted选项);

网= trainNetwork (XTrain、TTrain层,选择);

比较性能的网络

使用测试数据做出预测。

YWeighted =分类(netWeighted XTest);Y =分类(净,XTest);

在混乱中可视化预测图表。

图tiledlayout (2, 1) nexttile CWeighted = confusionchart (tt, YWeighted Title =“类权重”RowSummary =“row-normalized”);nexttile C = confusionchart (tt, Y, Title =“没有阶级权重”RowSummary =“row-normalized”);

计算预测的分类精度。

AccuracyWeighted =意味着(YWeighted = = tt)
AccuracyWeighted = 0.8438
精度=意味着(Y = = tt)
精度= 0.8333

与不平衡类分类应用,精度指标的模型表现不佳。例如,模型通常可以实现高精度的分类每个样本的多数类。

访问模型性能的两个指标精度(也被称为阳性预测值),回忆(也称为灵敏度)。

精度 = 真正的 积极的 真正的 积极的 + 积极的

回忆 = 真正的 积极的 真正的 积极的 +

结合的精度和召回到单个指标,计算出F1分数[2]。F1分数通常用于评估模型的性能。

F 1 = 2 ( 精度 * 回忆 精度 + 回忆 )

一个值接近1表明,模型表现良好。

计算精度、召回和F1得分为每个类的网络。

i = 1: numClasses PrecisionWeighted (i) = CWeighted.NormalizedValues(我)/笔(CWeighted.NormalizedValues(我,:));RecallWeighted (i) = CWeighted.NormalizedValues(我)/笔(CWeighted.NormalizedValues(:,我));f1Weighted (i) = max (0, (2 * PrecisionWeighted(我)* RecallWeighted(我))/ (PrecisionWeighted(我)+ RecallWeighted(我)));结束i = 1: numClasses精度(i) = C.NormalizedValues(我)/笔(C.NormalizedValues(我,:));回忆(i) = C.NormalizedValues(我)/笔(C.NormalizedValues(:,我));f1 (i) = max(0,(2 *精密(i) *回忆(我))/(精密(i) +召回(我)));结束

计算平均F1分数所有类(macro-average)网络和可视化F1分数在一个条形图。

classesCombined =[类“Macro-average”];f1Combined = [f1的意思(f1);f1Weighted意味着(f1Weighted)];图酒吧(classesCombined f1Combined) ylim ([0 1]) ylabel (“F1分数”)传说(“没有阶级权重”,“类权重”)

而加权类根据频率可以降低整体的精度预测,这样做可以提高模型的分类能力不流行类。

引用

[1]主教,克里斯托弗·M。模式识别和机器学习。纽约:施普林格,2006年。

[2]Sokolova、码头和家伙Lapalme。“绩效指标的系统分析分类任务。”信息处理与管理45岁的没有。4 (2009):427 - 437。

另请参阅

|||||

相关的话题