程序示例–异常检测

异常检测模型

提供了一般高斯分布模型多元高斯分布模型。其中,多元高斯分布模型被限制到了同轴分布:

# coding: utf8
# anomaly_detection/anomaly.pyimport numpy as npdef F1(predictions, y):"""F_1ScoreArgs:predictions 预测y 真实值Returns:F_1Score"""TP = np.sum((predictions == 1) & (y == 1))FP = np.sum((predictions == 1) & (y == 0))FN = np.sum((predictions == 0) & (y == 1))if TP + FP == 0:precision = 0else:precision = float(TP) / (TP + FP)if TP + FN == 0:recall = 0else:recall = float(TP) / (TP + FN)if precision + recall == 0:return 0else:return (2.0 * precision * recall) / (precision + recall)def gaussianModel(X):"""高斯模型Args:X 样本集Returns:p 模型"""# 参数估计m, n = X.shapemu = np.mean(X, axis=0)delta2 = np.var(X, axis=0)def p(x):"""p(x)Args:x xmu mudelta2 delta2Returns:p"""total = 1for j in range(x.shape[0]):total *= np.exp(-np.power((x[j, 0] - mu[0, j]), 2) / (2 * delta2[0, j]**2)) / (np.sqrt(2 * np.pi * delta2[0, j]))return totalreturn pdef multivariateGaussianModel(X):"""多元高斯模型Args:X 样本集Returns:p 模型"""# 参数估计m, n = X.shapemu = np.mean(X.T, axis=1)Sigma = np.var(X, axis=0)Sigma = np.diagflat(Sigma)# Sigma = np.mat(np.cov(X.T))detSigma = np.linalg.det(Sigma)def p(x):"""p(x)Args:x xmu mudelta2 delta2Returns:p"""x = x - mureturn np.exp(-x.T * np.linalg.pinv(Sigma) * x / 2).A[0] * \((2*np.pi)**(-n/2) * (detSigma**(-0.5) ))return pdef train(X, model=gaussianModel):"""训练函数Args:X 样本集Returns:p 概率模型"""return model(X)

测试

# coding: utf8
# anomaly_detection/test_anomaly_detection.pyimport numpy as np
from scipy.io import loadmat
import matplotlib.pyplot as plt
import anomalydef selectEpsilon(XVal, yVal, p):# 通过交叉验证集,选择最好的 epsilon 参数pVal = np.mat([p(x.T) for x in XVal]).reshape(-1, 1)step = (np.max(pVal) - np.min(pVal)) / 1000bestEpsilon = 0bestF1 = 0for epsilon in np.arange(np.min(pVal), np.max(pVal), step):predictions = pVal < epsilonF1 = anomaly.F1(predictions, yVal)if F1 > bestF1:bestF1 = F1bestEpsilon = epsilonreturn bestEpsilon, bestF1# 小维度测试......
data = loadmat('data/ex8data1.mat')
X = np.mat(data['X'])
XVal = np.mat(data['Xval'])
yVal = np.mat(data['yval'])# p = anomaly.train(X)
p = anomaly.train(X, model=anomaly.multivariateGaussianModel)
pTest = np.mat([p(x.T) for x in X]).reshape(-1, 1)# 绘制数据点
plt.xlabel('Latency (ms)')
plt.ylabel('Throughput (mb/s)')
plt.plot(X[:, 0], X[:, 1], 'bx')
epsilon, F1 = selectEpsilon(XVal, yVal, p)print 'Best epsilon found using cross-validation: %e\n'%epsilon
print 'Best F1 on Cross Validation Set:  %f\n'%F1
print '# Outliers found: %d' % np.sum(pTest < epsilon)# 获得训练集的异常点
outliers = np.where(pTest < epsilon, True, False).ravel()
plt.plot(X[outliers, 0], X[outliers, 1], 'ro', lw=2, markersize=10, fillstyle='none', markeredgewidth=1)
n = np.linspace(0, 35, 100)
X1 = np.meshgrid(n,n)
XFit = np.mat(np.column_stack((X1[0].T.flatten(), X1[1].T.flatten())))
pFit = np.mat([p(x.T) for x in XFit]).reshape(-1, 1)
pFit = pFit.reshape(X1[0].shape)
if not np.isinf(np.sum(pFit)):plt.contour(X1[0], X1[1], pFit, 10.0**np.arange(-20, 0, 3).T)
plt.show()# 大维度测试......
data = loadmat('data/ex8data2.mat')
X = np.mat(data['X'])
XVal = np.mat(data['Xval'])
yVal = np.mat(data['yval'])# p = anomaly.train(X)
p = anomaly.train(X, model=anomaly.multivariateGaussianModel)
pTest = np.mat([p(x.T) for x in X]).reshape(-1, 1)epsilon, F1 = selectEpsilon(XVal, yVal, p)print 'Best epsilon found using cross-validation: %e\n'%epsilon
print 'Best F1 on Cross Validation Set:  %f\n'%F1
print '# Outliers found: %d' % np.sum(pTest < epsilon)

我们使用多元高斯分布模型测试了一个小维度(n=2)( n=2 )(n=2)数据集,发现了 666 个异常点,获得使得交叉验证集表现最好的 ϵ=8.990×10−05ϵ=8.990×10^{−05}ϵ=8.990×10−05 ,此时交叉验证集的 F1Score=0.875F_1Score=0.875F1​Score=0.875 。下图标注了异常点,以及概率模型的等高线:

同样地,使用多元高斯分布模型测试了一个大维度(n=11)( n=11 )(n=11)数据集,发现了 117117117 个异常点,获得使得交叉验证集表现最好的 ϵ=5.494×10−19ϵ=5.494×10^{−19}ϵ=5.494×10−19 ,此时交叉验证集的 F1Score=0.615F_1Score=0.615F1​Score=0.615 。

8.7 程序示例--异常检测-机器学习笔记-斯坦福吴恩达教授相关推荐

  1. 8.4 有监督学习与异常检测-机器学习笔记-斯坦福吴恩达教授

    有监督学习与异常检测 很多人会认为异常检测非常类似于有监督学习,尤其是逻辑回归,但我们用一张表格来描述有监督学习与异常检测的区别: 有监督学习 异常检测 数据分布均匀 数据非常偏斜,异常样本数目远小于 ...

  2. 7.3 程序示例--PCA 模型-机器学习笔记-斯坦福吴恩达教授

    程序示例–PCA 模型 # coding: utf8 # pca/pca.pyimport numpy as npdef normalize(X):"""数据标准化处理A ...

  3. 5.10 程序示例--模型选择-机器学习笔记-斯坦福吴恩达教授

    程序示例–模型选择 在新的一组样本中,我们将通过交叉验证集选择模型,参数 CCC 和 高斯核的参数 δδδ 我们都将在以下 8 个值中选取测试,则总共构成了 8×8=648×8=648×8=64 个模 ...

  4. 5.9 程序示例--非线性分类-机器学习笔记-斯坦福吴恩达教授

    程序示例–非线性分类 接下来,我们采用高斯核函数来解决非线性可分问题,由于数据集较大,我们使用性能更好的完整版 SMO 算法进行训练: # coding: utf8 # svm/test_non_li ...

  5. 5.8 程序示例--线性分类-机器学习笔记-斯坦福吴恩达教授

    程序示例–线性分类 首先,我们使用线性核函数来训练线性可分问题,这里,我们使用的是简化版 SMO 算法: # coding: utf8 # svm/test_linear import smo imp ...

  6. 4.7 程序示例--算法诊断-机器学习笔记-斯坦福吴恩达教授

    程序示例–算法诊断 我们手头有一份大坝水的流量与水位关系的数据,首先我们将其划分为训练集.交叉验证集和测试集: # coding: utf-8 # algorithm_analysis/diagnos ...

  7. 1.3 程序示例--梯度下降-机器学习笔记-斯坦福吴恩达教授

    回归模块 回归模块中提供了批量梯度下降和随机梯度下降两种学习策略来训练模型: # coding: utf-8 # linear_regression/regression.py import nump ...

  8. 3.10 程序示例--神经网络设计-机器学习笔记-斯坦福吴恩达教授

    神经网络设计 在神经网络的结构设计方面,往往遵循如下要点: 输入层的单元数等于样本特征数. 输出层的单元数等于分类的类型数. 每个隐层的单元数通常是越多分类精度越高,但是也会带来计算性能的下降,因此, ...

  9. 5.11 程序示例--垃圾邮件检测-机器学习笔记-斯坦福吴恩达教授

    程序示例–垃圾邮件检测 邮件内容的预处理 下面展示了一封常见的 email,邮件内容包含了一个 URL (http://www.rackspace.com/),一个邮箱地址(groupname-uns ...

最新文章

  1. 【正一专栏】2018年欧冠八强猜想
  2. 【数理知识】《矩阵论》方保镕老师-第3章-矩阵的分解
  3. 【转】iOS开发24:使用SQLite3存储和读取数据
  4. ContentValues(Java)
  5. 概率机器人总结——(扩展)卡尔曼滤波先实践再推导
  6. Python基础教程:列表(list)切片详细操作
  7. NYOJ 928 小M的因子和(数论)
  8. boost::ratio_not_equal相关的测试程序
  9. 【数据结构与算法】之深入解析“环形链表II”的求解思路与算法示例
  10. win7/WIN8.1(x64) 下使用MSDE WIN10不行
  11. mysql安全补丁如何处理_3分钟学会mysql数据库的逻辑架构原理
  12. 2021年KTV行业发展蓝皮书
  13. Objective-C中的一些特殊的数据类及NSLog的输出格式
  14. 将已有项目转为se项目_威海将再添国家级非遗项目
  15. Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
  16. 结构优化设计with OPtiStruct
  17. 视频教程-OCJP认证考试复习课-其他
  18. python3传智播客_3.Ubuntu安装以及配置(传智播客.黑马程序员python学科)
  19. 纽约州顶尖计算机科学类学院,美国顶尖高中盘点——纽约州篇
  20. 手把手教你基于PaddlePaddle的情绪识别

热门文章

  1. NOIP2018复赛 游记
  2. 在Linux系统安装Nodejs 最简单步骤
  3. 当final作用于变量、参数、方法和类时该如何处理
  4. 【好书推荐】《Web全栈工程师的自我修养》
  5. 请教各位高手!手机要如何访问电脑的tomcat呢!
  6. webbrowser selstart selLength
  7. java_IO_File(3)_遍历、递归
  8. 解决调用HttpContext类
  9. 实测:xml与json速度约差4倍
  10. JSP中javaBean和Servlet理解