吴恩达机器学习总结:第十二 异常检测(大纲摘要及课后作业)

为了更好的学习,充分复习自己学习的知识,总结课内重要知识点,每次完成作业后都会更博。

英文非官方笔记

总结

1.异常检测-问题动机

(1)问题检测是什么

    a.我们有一些包括正常值的数据

    b.我们如何确保他们是正常的取决于我们

    c.事实上,如果有一些实际上并不正常,那么也可以使用该数据集作为参考点,我们可以看到其他示例是否异常

(2)我们如何做到这一点

    a.首先,使用我们的训练数据集建立一个模型

    b.我们可以使用p(x)来访问这个模型

    c.如果p(xtest) < ε -->,标记这个为异常

    d.如果p(xtest) >= ε -->,这个就为正常

(3)应用

    a.欺诈识别(通过一些特征来建立活动模型,算出正常行为概率)

    b.制造业(检测飞机引擎)

    c.监控数据中心的计算机

2.高斯分布

(1)均值μ

(2)方差σ2

(3)高斯分布写为N(μ,σ2 ),意思是服从以均值μ方差σ2的高斯分布

(4)高斯分布表达式和曲线



(5)参数对曲线影响


(6)参数估计问题

    a.均值μ=样本均值

    b.方差σ2 = 样本方差


3.误差检测算法

(1)m个样本的无标签训练集

    a.数据 = {x1x2, ..., x}

    b.从数据集中的模型P(X)=p(x1μ1 , σ12) * p(x2μ2 , σ22) * ... p(xμn , σn2)

    c.P(X)可表示为


(2)算法


    a.选择(特征建立特征向量

    b.拟合参数

    c.计算p(x)

(3)例子

    a.x1x2




    b.p(x1test) = 0.436 >= ε (~40% 误差是正常)(如果式子成立,那么该样本正常)        c.p(x2test) = 0.0021 < ε (~0.2% 误差是正常)(如果式子成立,那么该样本异常)

4.开发和评估异常检测系统(略)

5.异常检测和监督学习对比

(1)异常检测(下列情况下使用异常检测更好)

    a.非常小数量的正样本

    b.非常大数量的负样本

    c.很多类型的错误

(2)监督式学习(下列情况下使用监督式学习更好

    a.同时有大量正样本和负样本

    b.有足够的正样本

6.选择特征去使用

(1)非高斯特征

    a.非高斯数据如下图


    b.对非高斯数据转化,如上图用log()函数


(2)异常检测的误差分析

    a.想出构造特征的好办法

    b.像监督式学习错误分析程序

7.多变量高斯分布

(1)无标签数据

(2)结合特征一起看



(3)多变量高斯分布模型

    a.表达式


    b.协方差矩Σ

 (4)不同参数对多变量高斯分布的影响

    a.


    b.


    c.


8.在异常检测上运用多变量高斯分布

(1)高斯模型




(2)算法

    a.拟合参数

    b.可视化测试集


    c.比较计算值和ε

    d.拟合之后图


(3)原始模型VS多变量高斯

    a.原始模型

        1)需要更多数据

        2)需要额外特征

        3)计算更便捷(对大特征量放缩更好)

    b.多变量高斯模型

        1)使用频率更小

        2)不需要额外特征量(计算效率低)

        3)需要m>n(样本数量大于特征量)

作业

1.载入,可视化数据集

load('ex8data1.mat');
plot(X(:, 1), X(:, 2), 'bx');
axis([0 30 0 30]);
xlabel('Latency (ms)');
ylabel('Throughput (mb/s)');

2.估算数据集的统计数据

[mu sigma2] = estimateGaussian(X);
p = multivariateGaussian(X, mu, sigma2);
visualizeFit(X,  mu, sigma2);
xlabel('Latency (ms)');
ylabel('Throughput (mb/s)');

%estimateGaussian函数
[m, n] = size(X);
mu = zeros(n, 1);
sigma2 = zeros(n, 1);
mu = mean(X);
sigma2 = 1 / m * sum ( bsxfun(@minus, X, mu) .^2 );
end

%multivariateGaussian函数
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

%visualizeFit函数
[X1,X2] = meshgrid(0:.5:35); 
Z = multivariateGaussian([X1(:) X2(:)],mu,sigma2);
Z = reshape(Z,size(X1));
plot(X(:, 1), X(:, 2),'bx');
hold on;
% Do not plot if there are infinities
if (sum(isinf(Z)) == 0)
    contour(X1, X2, Z, 10.^(-20:3:0)');
end
hold off;
end

3.寻找异常值

val = multivariateGaussian(Xval, mu, sigma2);
[epsilon F1] = selectThreshold(yval, pval);
outliers = find(p < epsilon);
hold on
plot(X(outliers, 1), X(outliers, 2), 'ro', 'LineWidth', 2, 'MarkerSize', 10);
hold off

%selectThreshold函数
bestEpsilon = 0;
bestF1 = 0;
F1 = 0;
stepsize = (max(pval) - min(pval)) / 1000;
for epsilon = min(pval):stepsize:max(pval)
predictions = (pval < epsilon);
    fp = sum((predictions == 1) & (yval == 0));
    fn = sum((predictions == 0) & (yval == 1));
    tp = sum((predictions == 1) & (yval == 1));
    prec = tp / (tp + fp);
    rec = tp / (tp + fn);
    F1 = 2 * prec * rec / (prec + rec);
    if F1 > bestF1
       bestF1 = F1;
       bestEpsilon = epsilon;
    end
end
end

4.多维度异常值

load('ex8data2.mat');
[mu sigma2] = estimateGaussian(X);
p = multivariateGaussian(X, mu, sigma2);
pval = multivariateGaussian(Xval, mu, sigma2);
[epsilon F1] = selectThreshold(yval, pval);
展开阅读全文

没有更多推荐了,返回首页