应用高斯分布来解决异常检测问题(二)

(原创文章,转载请注明出处!)

在文章应用高斯分布来解决异常检测问题(一)中对如何使用高斯分布来解决异常检测问题进行了描述,本篇是使用R编程实现了第一篇中所描述的两个模型:多个一元高斯分布模型和一个多元高斯分布模型。

一、 多个一元高斯分布模型

 1 ## parameters:
 2 ##     x  -  a vector, which is the data of new samples.
 3 ##     X  -  a matrix, which stores samples‘ data.
 4 ##     parameterFile - path of paramter file,
 5 ##                     the paramter file stores the paramters of the MultiUnivariate Norm model.
 6 ##     isTraining - flag, TRUE will trigger the training,
 7 ##                        FALSE will skip the training.
 8 funMultiUnivariateNorm <- function(x, X = NULL, parameterFile = ".MultiUnivariateNorm", isTraining = FALSE)
 9 {
10     if (isTraining == TRUE) {
11         if (is.null(X) == TRUE) {
12             cat("X is NULL, MultiUnivariateNorm model Can‘t be trained\n")
13             return
14         }
15         numOfSamples <- dim(X)[1]
16         numOfFeatures  <- dim(X)[2]
17
18         vectrMean <- colMeans(X)
19         vectrSD <- numeric(0)
20         for (i in 1:numOfFeatures) {
21             vectrSD[i] <- sd(X[,i])
22         }
23
24         ## write the parameters to the file
25         ##   1st line is means divided by one blank
26         ##   2nd line is SDs divided by one blank
27         matrixMeanSD <- matrix(c(vectrMean, vectrSD), ncol=numOfFeatures, byrow=TRUE)
28         # checking of parameterFile leaves to write.table
29         write.table(x=matrixMeanSD, file=parameterFile, row.names=FALSE, col.names=FALSE, sep=" ")
30     } else {
31         matrixMeanSD <- read.table(file=parameterFile)
32         matrixMeanSD <- as.matrix(matrixMeanSD)
33         vectrMean <- matrixMeanSD[1,]
34         vectrSD <- matrixMeanSD[2,]
35     }
36
37     vectrProbabilityNewSample <- dnorm(x, mean = vectrMean, sd = vectrSD, log = FALSE)
38     prod(vectrProbabilityNewSample)  # probability of the new sample
39 }

二、 一个多元高斯分布模型

 1 ## Before using this function the package mvtnorm need to be installed.
 2 ## To install package mvtnorm, issuing command install.packages("mvtnorm")
 3 ## and using command library(mvtnorm) to load the package to R workspace.
 4 ##
 5 ## parameters:
 6 ##     x  -  a vector, the data of one samples that need to be calculate the output by the MultiUnivariate Norm model.
 7 ##           a matrix, each line is one sample that need to be calculate the output by the MultiUnivariate Norm model.
 8 ##     X  -  a matrix, which stores samples‘ data.
 9 ##     parameterFile - path of paramter file,
10 ##                     the paramter file stores the paramters of the MultiUnivariate Norm model.
11 ##     isTraining - flag, TRUE will trigger the training,
12 ##                        FALSE will skip the training.
13 funMultivariateNorm <- function(x, X = NULL, parameterFile = ".MultivariateNorm", isTraining = FALSE)
14 {
15     if (isTraining == TRUE) {
16         if (is.null(X) == TRUE) {
17             cat("X is NULL, MultivariateNorm model Can‘t be trained\n")
18             return
19         }
20
21         vectrMean <- colMeans(X)
22         matrixSigma <- cov(X)
23         ## write the parameters to the file
24         ##   1st line is means divided by one blank
25         ##   from the 2nd line to the last line are variances divided by one blank
26         matrixMeanCov <- rbind(vectrMean, matrixSigma)
27         # checking of parameterFile leaves to write.table
28         write.table(x=matrixMeanCov, file=parameterFile, row.names=FALSE, col.names=FALSE, sep=" ")
29     } else {
30         matrixMeanCov <- read.table(file=parameterFile)
31         matrixMeanCov <- as.matrix(matrixMeanCov)
32         vectrMean <- matrixMeanCov[1,]
33         matrixSigma <- matrixMeanCov[c(2:dim(matrixMeanCov)[1]),]
34     }
35
36     dmvnorm(x, mean = vectrMean, sigma = matrixSigma, log = FALSE) # probability of the new samples37 }
时间: 2024-10-19 18:52:34

应用高斯分布来解决异常检测问题(二)的相关文章

异常检测: 应用多元高斯分布进行异常检测

多元高斯(正态)分布 多元高斯分布有两个参数u和Σ,u是一个n维向量,Σ协方差矩阵是一个n*n维矩阵.改变u与Σ的值可以得到不同的高斯分布. 参数估计(参数拟合),估计u和Σ的公式如上图所示,u为平均值,Σ为协方差矩阵 使用多元高斯分布来进行异常检测 首先用我我们的训练集来拟合参数u和Σ,从而拟合模型p(x) 拿到一个新的样本,使用p(x)的计算公式计算出p(x)的值,如果p(x)<ε就将它标记为一个异常点 当我们对上图中那个绿色的点进行异常检测时,这些红色的点服从多元高斯正态分布(x1与x2正

斯坦福机器学习视频笔记 Week9 异常检测和高斯混合模型 Anomaly Detection

异常检测,广泛用于欺诈检测(例如"此信用卡被盗?"). 给定大量的数据点,我们有时可能想要找出哪些与平均值有显着差异. 例如,在制造中,我们可能想要检测缺陷或异常. 我们展示了如何使用高斯分布来建模数据集,以及如何将模型用于异常检测. 我们还将涵盖推荐系统,这些系统由亚马逊,Netflix和苹果等公司用于向其用户推荐产品. 推荐系统查看不同用户和不同产品之间的活动模式以产生这些建议. 在这些课程中,我们介绍推荐算法,如协同过滤算法和低秩矩阵分解. Problem Motivation

ng机器学习视频笔记(十三) ——异常检测与高斯密度估计

ng机器学习视频笔记(十三) --异常检测与高斯密度估计 (转载请附上本文链接--linhxx) 一.概述 异常检测(anomaly detection),主要用于检查对于某些场景下,是否存在异常内容.异常操作.异常状态等.异常检测,用到了一个密度估计算法(density estimation)--高斯分布(Gaussian distribution),又称正态分布(normal distribution). 该算法只用到了样本的特征值,不需要分类标签,故该算法是无监督学习算法 主要内容是,对于

Auto Encoder用于异常检测

对基于深度神经网络的Auto Encoder用于异常检测的一些思考 from:https://my.oschina.net/u/1778239/blog/1861724 一.前言 现实中,大部分数据都是无标签的,人和动物多数情况下都是通过无监督学习获取概念,故而无监督学习拥有广阔的业务场景.举几个场景:网络流量是正常流量还是攻击流量.视频中的人的行为是否正常.运维中服务器状态是否异常等等.有监督学习的做法是给样本标出label,那么标label的过程肯定是基于某一些规则(图片除外),既然有了规则

异常检测及欺诈

一.无监督异常检测模型   1.在线流数据异常检测(iforest隔离森林算法) 该方法的主要思想是,通过随机选定样本属性及其值将样本空间进行随机划分,分割的过程可以看成类似于随机森林中树建立的过程,对于新的样本,基于建立的隔离树求其分割深度,深度值越小,表明越容易被隔离,也就意味着异常的概率越大:反之则为正常样本.该方法是基于异常数据"少且不同"的特征,来采用随机隔离的思想设计异常检查. 该方法的主要优点是,在构建初始模型时不需要任何实际的数据,从而能快速构建初始探测模型,它符合数据

基于机器学习的web异常检测

基于机器学习的web异常检测 Web防火墙是信息安全的第一道防线.随着网络技术的快速更新,新的黑客技术也层出不穷,为传统规则防火墙带来了挑战.传统web入侵检测技术通过维护规则集对入侵访问进行拦截.一方面,硬规则在灵活的黑客面前,很容易被绕过,且基于以往知识的规则集难以应对0day攻击:另一方面,攻防对抗水涨船高,防守方规则的构造和维护门槛高.成本大. 基于机器学习技术的新一代web入侵检测技术有望弥补传统规则集方法的不足,为web对抗的防守端带来新的发展和突破.机器学习方法能够基于大量数据进行

异常检测(anomaly detection)

异常检测(anomaly detection) 关于异常检测(anomaly detection)本文主要介绍一下几个方面: 异常检测定义及应用领域 常见的异常检测算法 高斯分布(正态分布) 异常检测算法 评估异常检测算法 异常检测VS监督学习 如何设计选择features 多元高斯分布 多元高斯分布在异常检测上的应用 一.异常检测定义及应用领域 先来看什么是异常检测?所谓异常检测就是发现与大部分对象不同的对象,其实就是发现离群点.异常检测有时也称偏差检测.异常对象是相对罕见的.下面来举一些常见

# URL异常检测

(Isolation Forest无监督)这个算法是随机森林的推广. iTree树构造:随机选一个属性,再随机选该特征的一个值,对样本进行二叉划分,重复以上操作. iTree构建好了后,就可以对数据进行预测啦,预测的过程就是把测试记录在iTree上走一下,看测试记录落在哪个叶子节点.iTree能有效检测异常的假设是:异常点一般都是非常稀有的,在iTree中会很快被划分到叶子节点,因此可以用叶子节点到根节点的路径h(x)长度来判断一条记录x是否是异常点. 越接近1表示是异常点的可能性高: 越接近0

异常检测(2)——基于概率统计的异常检测(1)

某个工厂生产了一批手机屏幕,为了评判手机屏幕的质量是否达到标准,质检员需要收集每个样本的若干项指标,比如大小.质量.光泽度等,根据这些指标进行打分,最后判断是否合格.现在为了提高效率,工厂决定使用智能检测进行第一步筛选,质检员只需要重点检测被系统判定为“不合格”的样本. 智能检测程序需要根据大量样本训练一个函数模型,也许我们的第一个想法是像监督学习那样,为样本打上“正常”和“异常”的标签,然后通过分类算法训练模型.假设xtest是数据样本,predict(xtest)来判断xtest是否是合格样