为了实现后期oneclass 语音异常分类,笔者收集总结了异常检测的几种算法分析。
一、基于传统的Oneclass机器学习
下面的方法在sklearn库中都有实现的方法以及案例。
1.1、EllipticEnvelope 协方差决定-基于统计的方法
该算法假定正常实例是根据单个高斯分布生成的,可以根据数据做一个鲁棒的协方差估计,然后学习到一个包围中心样本点并忽视离群点的椭圆。远离边界的样本点定义为异常点。
1.2、OneClassSVM 单类SVM-基于分类方法
One-Class-SVM算法的思路就是寻找一个超平面将样本中的正例圈出来,预测就是用这个超平面做决策,在圈内的样本就认为是正样本。
1.3、IsolationForest 隔离森林-基于集成的方法
该算法构建一个随机森林,每个决策树都是随机生长,在每个节点随机选择一个特征,然后选择一个随机阈值将数据分为两部分。数据集以这种方式逐渐切成分支,直到所有实例与其他实例隔离开来,异常值通常与替他实例隔离开来。
1.4、DBSCAN-基于密度的聚类方法
此算法将集群定义为高密度的连续区域,计算在一小段距离内有多少个实例,任何不是和新实例且邻居中没有实例的实例都被视为异常。DBSCAN有fit_predict()方法,但是没有predict方法,此算法无法预测新实例属于哪个集群,需要其他分类算法来完成不同的任务。DBSCAN可以识别任意形状的集群。
1.5、LocalOutlierFactor 局部离群因子-基于密度的方法
此算法将给定实例周围的实例密度与相邻实例周围的密度进行比较,异常值通常比最邻近的更加孤立。LocalOutlierFactor 也没有适用于新数据的预测方法。
1.6、KNN 近邻算法-基于距离的方法
K-NN是最简单的异常检测算法之一,基本思路是对每一个点,计算其与最近k个相邻点的距离,通过距离的大小来判断它是否为离群点。
1.7、Kmeans -基于距离的聚类方法
Kmeans 和KNN 近邻算法算法的思路差不多,不同的是Kmeans 将数据分成是多个簇,然后使用待预测的样本和这多个簇中心,二者计算距离,最后使用一个阈值来比较。
1.8、PCA 主成分分析降维重构-基于重构的方法
使用pca.inverse_transform方法将正常实例的重建误差和异常实例的重建误差进行比较,则后者通常会大很多。这个算法可以参考文章-Olivetti人脸数据集探索与识别。
二、基于深度学习的One-Class Neural Networks(OC-NN)
2.1、AutoEncoder 自动编码器
通用的自动编码器由编码器和解码器组成,编码器将原始数据映射到低维特征空间,而解码器试图从投影的低维空间恢复数据。在 Replicator Neural Networks 中,输入的变量也是输出的变量,模型中间层节点的个数少于输入层和输出层节点的个数。这样的话,模型就起到了压缩数据和恢复数据的作用。整体的误差是由所有的样本误差之和除以样本的个数得到的,异常值的分数就可以定义为重构误差(reconstruction error)。
2.2、Recurrent AutoEncoder 循环自动编码器
此类算法是为序列构建的自动编码器,例如时间序列和文本数据,循环自动编码器可以处理任何长度的序。编码器通常为序列到向量的RNN,能够将输入序列压缩为单个向量。其可以处理任何长度的序列。
网友评论