Code for Anomaly Detection

来源:互联网 发布:ubuntu邮件服务器 编辑:程序博客网 时间:2024/05/23 02:01

Estimating parameters for a Gaussian

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);% You should return these values correctlymu = zeros(n, 1);sigma2 = zeros(n, 1);% Instructions: Compute the mean of the data and the variances%               In particular, mu(i) should contain the mean of%               the data for the i-th feature and sigma2(i)%               should contain variance of the i-th feature.%mu=mean(X);sigma2=var(X);end

Selecting the threshold, ε

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)    % Instructions: Compute the F1 score of choosing epsilon as the    %               threshold and place the value in F1. The code at the    %               end of the loop will compare the F1 score for this    %               choice of epsilon and set it to be the best epsilon if    %               it is better than the current choice of epsilon.    %                   % Note: You can use predictions = (pval < epsilon) to get a binary vector    %       of 0's and 1's of the outlier predictions    %  you can find out how many values in this vector are 0 by using: sum(v == 0). predictions=(pval<epsilon);      tp=sum((yval==1)&(predictions==1));  fp=sum((yval==0)&(predictions==1)); fn=sum((yval==1)&(predictions==0)); prec=tp/(tp+fp);rec=tp/(tp+fn);  F1=2*prec*rec/(prec+rec);    if F1 > bestF1       bestF1 = F1;       bestEpsilon = epsilon;    endendend
0 0
原创粉丝点击