热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

异常检测(anomalydetection)吴恩达机器学习基于python

异常检测(anomalydetection)-吴恩达机器学习基于python,Go语言社区,Golang程序员人脉社
1 多元高斯分布模型

1.1 算法步骤

  1. 对于给定的数据集,针对每个特征计算μmu(均值)和ΣSigma(协方差)
    μj=1mi=1mxj(i)mu_j=frac{1}{m}sum_{i=1}^{m}x_j^{(i)}
  2. 根据获得的μmu(均值)和ΣSigma(协方差),给定新的训练集,根据模型计算p(x)
    p(x)=1(2π)n2Σ12exp(12(xμ)TΣ1(xμ))p(x) = frac{1}{(2pi)^frac{n}{2}|Sigma|^frac{1}{2}}exp(-frac{1}{2}(x-mu)^TSigma^{-1}(x-mu))

这里,不使用原高斯分布模型,而是使用多元高斯分布模型进行异常检测

  1. 选择一个ϵepsilon,将p(x)=ϵp(x)=epsilon
2 2D data
import scipy.io as sio
mat = sio.loadmat(r'D:python_try5. AndrewNg_MLdataanomaly detectionex8data1.mat')
# print(mat.keys()) # 查看数据组成成分
X = mat.get('X')
# X.shape # 查看数据维度

2.1 visualize training data

import seaborn as sns
import matplotlib.pyplot as plt
# 画布设置
sns.set(context="notebook", style="white", palette=sns.color_palette("RdBu"))
sns.regplot('Latency','Throughput', 
             data=pd.DataFrame(X, columns=['Latency','Throughput']),
             fit_reg=False,
             scatter_kws={"s": 30, "alpha":0.5})

在这里插入图片描述

from sklearn.cross_validation import train_test_split # 划分数据集
Xval, Xtest, yval, ytest = train_test_split(mat.get('Xval'),
                                           mat.get('yval').ravel(),
                                           test_size=0.5)

2.2 estimate multivariate Gaussian parameters μmu and ΣSigma

import numpy as np

mu = X.mean(axis=0)
cov = np.cov(X.T)

画出高斯分布概率图
高斯概率分布图参考网址

from scipy import stats

x, y = np.mgrid[2.5:25:.01, 2.5:25:.01]
pos = np.dstack((x, y))
rv = stats.multivariate_normal(mu, cov)
fig, ax = plt.subplots()

# plot probability density
ax.contourf(x, y, rv.pdf(pos), cmap='Blues')

# plot original data points
sns.regplot('Latency', 'Throughput',
           data=pd.DataFrame(X, columns=['Latency', 'Throughput']), 
           fit_reg=False,
           ax=ax,
           scatter_kws={"s":15,
                        "alpha":0.5})
plt.show()

在这里插入图片描述

2.3 select threshold ϵepsilon

  1. use training set XX to model the multivariate Gaussian
  2. use cross validation set (Xval,yval)(Xval, yval) to find the best ϵepsilon by finding the best F-score
from sklearn.metrics import f1_score, classification_report

def select_threshold(X, Xval, yval):
    '''
       使用交叉验证数据找到最优的epsilon
       Returrn:
          e: best epsilon with highest f-score
          f-score: such best f-score
    '''
    # use training data create multivariate model
    mu = X.mean(axis=0)
    cov = np.cov(X.T)
    multi_normal = stats.multivariate_normal(mu, cov)
    
    # use CV data for fining turning hyper parameters
    pval = multi_normal.pdf(Xval)
    
    # set up epsilon candidates
    epsilon = np.linspace(np.min(pval), np.max(pval), num=10000)
    
    # calculate f=score
    fs = []
    for e in epsilon:
        y_pred = (pval <= e).astype('int')
        fs.append(f1_score(yval, y_pred))
    
    # find the best f-score
    argmax_fs = np.argmax(fs)
    
    return epsilon[argmax_fs], fs[argmax_fs]

e, fs = select_threshold(X, Xval, yval)
def predict(X, Xval, e, Xtest, ytest):
    '''
       用最优的epsilon,结合X, Xval预测Xtest
       with optimal epsilon, combine X, Xval, and predict Xtest
       Returns:
           multi_normal: multivariate normal model
           y_predict: prediction of test data
    '''
    
    Xdata = np.concatenate((X, Xval), axis=0)
    
    mu = Xdata.mean(axis=0)
    cov = np.cov(Xdata.T)
    multi_normal = stats.multivariate_normal(mu, cov)
    
    # calculate probability of test data
    pval = multi_normal.pdf(Xtest)
    y_pred = (pval <= e).astype('int')
    
    print(classification_report(ytest, y_pred))
    
    return multi_normal, y_pred

multi_normal, y_pred = predict(X, Xval, e, Xtest, ytest)

2.4 visualize anomaly detection

data = pd.DataFrame(Xtest, columns=['Latency', 'Throughput'])
data['y_pred'] = y_pred

# create a grid for graphing
x, y = np.mgrid[0:30:.01, 0:30:.01]
pos = np.dstack((x,y))

fig, ax = plt.subplots()

# plot probability density
ax.contourf(x, y,multi_normal.pdf(pos), cmap='Blues')

# plot original Xval points
sns.regplot('Latency', 'Throughput',
            data=data,
            fit_reg = False,
            ax=ax,
            scatter_kws={"s":10,
                        'alpha': 0.4})

# mark the predicted anomoly of CVdata
anamoly_data = data[data['y_pred']==1]
ax.scatter(anamoly_data['Latency'], anamoly_data['Throughput'], marker='x', s=50)
plt.show()

在这里插入图片描述


推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 前言:拿到一个案例,去分析:它该是做分类还是做回归,哪部分该做分类,哪部分该做回归,哪部分该做优化,它们的目标值分别是什么。再挑影响因素,哪些和分类有关的影响因素,哪些和回归有关的 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了一个Python函数same_set,用于判断两个相等长度的数组是否包含相同的元素。函数会忽略元素的顺序和重复次数,如果两个数组包含相同的元素,则返回1,否则返回0。文章还提供了函数的具体实现代码和样例输入输出。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • HashMap的扩容知识详解
    本文详细介绍了HashMap的扩容知识,包括扩容的概述、扩容条件以及1.7版本中的扩容方法。通过学习本文,读者可以全面了解HashMap的扩容机制,提升对HashMap的理解和应用能力。 ... [详细]
  • 广度优先遍历(BFS)算法的概述、代码实现和应用
    本文介绍了广度优先遍历(BFS)算法的概述、邻接矩阵和邻接表的代码实现,并讨论了BFS在求解最短路径或最短步数问题上的应用。以LeetCode中的934.最短的桥为例,详细阐述了BFS的具体思路和代码实现。最后,推荐了一些相关的BFS算法题目供大家练习。 ... [详细]
  • 颜色迁移(reinhard VS welsh)
    不要谈什么天分,运气,你需要的是一个截稿日,以及一个不交稿就能打爆你狗头的人,然后你就会被自己的才华吓到。------ ... [详细]
  • 我用Tkinter制作了一个图形用户界面,有两个主按钮:“开始”和“停止”。请您就如何使用“停止”按钮终止“开始”按钮为以下代码调用的已运行功能提供建议 ... [详细]
  • 为什么下一个5年,软件定义市场将暴涨32%
    Technavio公司的市场调研分析预测,到2020年全球软件定义一切(SDx)市场年复合增长率将超过32%,向虚拟化的转化是市场增长的主要驱动力。近来 ... [详细]
author-avatar
技术小白
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有