日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/4/5 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 8.7 程序示例--异常检测-机器学习笔记-斯坦福吴恩达教授 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

程序示例–異常檢測(cè)

異常檢測(cè)模型

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

# coding: utf8 # anomaly_detection/anomaly.pyimport numpy as npdef F1(predictions, y):"""F_1ScoreArgs:predictions 預(yù)測(cè)y 真實(shí)值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 模型"""# 參數(shù)估計(jì)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 模型"""# 參數(shù)估計(jì)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):"""訓(xùn)練函數(shù)Args:X 樣本集Returns:p 概率模型"""return model(X)

測(cè)試

# 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):# 通過交叉驗(yàn)證集,選擇最好的 epsilon 參數(shù)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# 小維度測(cè)試...... 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)# 繪制數(shù)據(jù)點(diǎn) 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)# 獲得訓(xùn)練集的異常點(diǎn) 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()# 大維度測(cè)試...... 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)

我們使用多元高斯分布模型測(cè)試了一個(gè)小維度(n=2)( n=2 )n=2數(shù)據(jù)集,發(fā)現(xiàn)了 666 個(gè)異常點(diǎn),獲得使得交叉驗(yàn)證集表現(xiàn)最好的 ?=8.990×10?05?=8.990×10^{?05}?=8.990×10?05 ,此時(shí)交叉驗(yàn)證集的 F1Score=0.875F_1Score=0.875F1?Score=0.875 。下圖標(biāo)注了異常點(diǎn),以及概率模型的等高線:

同樣地,使用多元高斯分布模型測(cè)試了一個(gè)大維度(n=11)( n=11 )n=11數(shù)據(jù)集,發(fā)現(xiàn)了 117117117 個(gè)異常點(diǎn),獲得使得交叉驗(yàn)證集表現(xiàn)最好的 ?=5.494×10?19?=5.494×10^{?19}?=5.494×10?19 ,此時(shí)交叉驗(yàn)證集的 F1Score=0.615F_1Score=0.615F1?Score=0.615

總結(jié)

以上是生活随笔為你收集整理的8.7 程序示例--异常检测-机器学习笔记-斯坦福吴恩达教授的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。