异常检测算法的Octave仿真

基于高斯分布的异常检测算法一文中,详细给出了异常检测算法的原理及其公式,本文为该算法的Octave仿真。实例为,根据训练样例(一组网络服务器)的吞吐量(Throughput)和延迟时间(Latency)数据,标记出异常的服务器。

可视化的数据集如下:

我们根据数据集X,计算其二维高斯分布的数学期望mu与方差sigma2:

function [mu sigma2] = estimateGaussian(X)
%ESTIMATEGAUSSIAN This function estimates the parameters of a
%Gaussian distribution using the data in X
%   [mu sigma2] = estimateGaussian(X),
%   The input X is the dataset with each n-dimensional data point in one row
%   The output is an n-dimensional vector mu, the mean of the data set
%   and the variances sigma^2, an n x 1 vector
% 

% Useful variables
[m, n] = size(X);

mu = zeros(n, 1);
sigma2 = zeros(n, 1);

mu = sum(X,1)‘/m;
%note:mu and sigma are both n-demension.
for(i=1:m)
e=(X(i,:)‘-mu);
sigma2 += e.^2;
endfor

sigma2 = sigma2/m

end

计算概率密度:

function p = multivariateGaussian(X, mu, Sigma2)
%MULTIVARIATEGAUSSIAN Computes the probability density function of the
%multivariate gaussian distribution.
%    p = MULTIVARIATEGAUSSIAN(X, mu, Sigma2) Computes the probability
%    density function of the examples X under the multivariate gaussian
%    distribution with parameters mu and Sigma2. If Sigma2 is a matrix, it is
%    treated as the covariance matrix. If Sigma2 is a vector, it is treated
%    as the \sigma^2 values of the variances in each dimension (a diagonal
%    covariance matrix)
%

k = length(mu);

if (size(Sigma2, 2) == 1) || (size(Sigma2, 1) == 1)
    Sigma2 = diag(Sigma2);
end

X = bsxfun(@minus, X, mu(:)‘);
p = (2 * pi) ^ (- k / 2) * det(Sigma2) ^ (-0.5) * ...
    exp(-0.5 * sum(bsxfun(@times, X * pinv(Sigma2), X), 2));

end

可视化后:

根据预留的一部分已知是否异常的训练样例(CV集),来选择阈值:

function [bestEpsilon bestF1] = selectThreshold(yval, pval)
%SELECTTHRESHOLD Find the best threshold (epsilon) to use for selecting
%outliers
%   [bestEpsilon bestF1] = SELECTTHRESHOLD(yval, pval) finds the best
%   threshold to use for selecting outliers based on the results from a
%   validation set (pval) and the ground truth (yval).
%

bestEpsilon = 0;
bestF1 = 0;
F1 = 0;

stepsize = (max(pval) - min(pval)) / 1000;
for epsilon = min(pval):stepsize:max(pval)

    pred = (pval<epsilon); 

    p_e_1 = (pred==1);
    y_e_1 = (yval==1);
    p1 = 0;
    m = size(p_e_1,1);
    for(i=1:m)
      if((p_e_1(i)==1)&&(p_e_1(i)==y_e_1(i)))
        p1++;
      endif
    endfor
    p_12 = sum(pred);
    p_13 = sum(y_e_1);

    p=p1/p_12;
    r=p1/p_13;

    F1 = 2*p*r/(p+r);

    if F1 > bestF1
       bestF1 = F1;
       bestEpsilon = epsilon;
    end
end

end

最终的标记结果:

时间: 2024-10-13 14:12:26

异常检测算法的Octave仿真的相关文章

如何开发一个异常检测系统:如何评价一个异常检测算法

利用数值来评价一个异常检测算法的重要性 使用实数评价法很重要,当你用某个算法来开发一个具体的机器学习应用时,你常常需要做出很多决定,如选择什么样的特征等等,如果你能找到如何来评价算法,直接返回一个实数来告诉你算法的好坏,那样你做决定就会更容易一些.如现在有一个特征,要不要将这个特征考虑进来?如果你带上这个特征运行你的算法,再去掉这个特征运行你的算法,得到返回的实数,这个实数直接告诉你加上这个特征算法是变好了还是变坏了,这样你就有一种更简单的算法来确定是否要加上这个特征. 为了更快地开发出一个异常

异常检测算法--Isolation Forest

南大周志华老师在2010年提出一个异常检测算法Isolation Forest,在工业界很实用,算法效果好,时间效率高,能有效处理高维数据和海量数据,这里对这个算法进行简要总结. iTree 提到森林,自然少不了树,毕竟森林都是由树构成的,看Isolation Forest(简称iForest)前,我们先来看看Isolation Tree(简称iTree)是怎么构成的,iTree是一种随机二叉树,每个节点要么有两个女儿,要么就是叶子节点,一个孩子都没有.给定一堆数据集D,这里D的所有属性都是连续

《时序异常检测算法概览》

时序异常检测算法概览 2018-09-03 17:08:49 分类:人工智能与大数据 来自:论智(微信号:jqr_AI),作者:Pavel Tiunov,编译:weakish来源:statsbot,原文链接 编者按:Statsbot CTO Pavel Tiunov简要介绍了最流行的时序异常检测算法,并讨论了它们的优点和缺点 在Statsbot,我们持续检查异常检测方法这一领域的研究,并据此更新我们的模型. 本文概览了最流行的时序异常检测算法,并讨论了它们的优点和缺点. 本文是为想要了解异常检测

Logistic Algorithm分类算法的Octave仿真

本次Octave仿真解决的问题是,根据两门入学考试的成绩来决定学生是否被录取,我们学习的训练集是包含100名学生成绩及其录取结果的数据,需要设计算法来学习该数据集,并且对新给出的学生成绩进行录取结果预测. 首先,我们读取并绘制training set数据集: %% Initialization clear ; close all; clc %% Load Data % The first two columns contains the exam scores and the third col

Spark实战3:异常检测算法Scala语言

异常检测原理是根据训练数据的高斯分布,计算均值和方差,若测试数据样本点带入高斯公式计算的概率低于某个阈值(0.1),判定为异常点. 1 创建数据集转化工具类,把csv数据集转化为RDD数据结构 import org.apache.spark.mllib.linalg.{Vector, Vectors} import org.apache.spark.mllib.regression.LabeledPoint import org.apache.spark.rdd.RDD object Featu

机器学习总结2 - 关于激活函数、损失函数、正则化、异常检测算法总结

LSTM特性, CNN特性, 损失函数, paper, 项目 ...软件 激活函数: -> sigmod: 硬饱和性, y(0,1), 斜率趋于0;-> tanh: 软饱和性, y(-1,1), 虽然输出均值为0, 可以更快收敛, 但斜率依然会趋于0;-> relu: 当x<0时, 存在硬饱和, y(0, +), 使用leak-relu, 当x<0时, 使斜率不会为0; 损失函数/ 性能指标:-> 均方差mse, 均方根误差rmse, 常用于回归问题, rmse=500

异常检测(Anomaly detection): 异常检测算法(应用高斯分布)

估计P(x)的分布--密度估计 我们有m个样本,每个样本有n个特征值,每个特征都分别服从不同的高斯分布,上图中的公式是在假设每个特征都独立的情况下,实际无论每个特征是否独立,这个公式的效果都不错.连乘的公式表达如上图所示. 估计p(x)的分布问题被称为密度估计问题(density estimation)

异常检测概览——孤立森林和局部异常因子算法效果是最好的

转自博客:http://www.infosec-wiki.com/?p=140760 一.关于异常检测 异常检测(outlier detection)在以下场景: 数据预处理 病毒木马检测 工业制造产品检测 网络流量检测 等,有着重要的作用.由于在以上场景中,异常的数据量都是很少的一部分,因此诸如:SVM.逻辑回归等分类算法,都不适用,因为: 监督学习算法适用于有大量的正向样本,也有大量的负向样本,有足够的样本让算法去学习其特征,且未来新出现的样本与训练样本分布一致. 以下是异常检测和监督学习相

异常检测及欺诈

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