import numpy as np
import matplotlib.pyplot as plt
from scipy.io import loadmat
data = loadmat(
'data/ex8data1.mat'
)x = data[
'x']
x_val = data[
'x_val'
]y_val = data[
'y_val'
]plt.figure(figsize=(8
,5))
plt.scatter(x[:,
0], x[:,
1], edgecolors=
'b')
plt.show(
)def
estimate_gaussian
(x):
mu = x.mean(axis=0)
# 求每列的均值
sigma2 = x.var(axis=0)
# 求每列的方差,這裡自由度為m
return mu, sigma2
defmultivariate_gaussian
(x, mu, sigma2)
: p = np.zeros(
(x.shape[0]
,1))
n =len(mu)
if np.ndim(sigma2)==1
: sigma2 = np.diag(sigma2)
# 對角陣
for i in
range
(x.shape[0]
):p[i]=(
2* np.pi)**(
-n /2)
* np.linalg.det(sigma2)**(
-1/2
)* np.exp(
-0.5
*(x[i,:]
- mu)
.t @ np.linalg.inv(sigma2) @ (x[i,:]
- mu)
)return p
# 驗證集的概率向量
mu, sigma2 = estimate_gaussian(x_val)
p_val = multivariate_gaussian(x_val, mu, sigma2)
'''尋找最優(f1最大的)的閾值'''
defselect_threshold
(y_val, p_val)
: bestf1 =
0 bestepsilon =
0for epsilon in np.linspace(
min(p_val)
,max
(p_val)
,1001):
y_predict = np.zeros(y_val.shape)
y_predict[p_val < epsilon]=1
# 把小於閾值的設為1(異常)
tp = np.
sum(y_predict[y_val ==1]
)# 真正例
precision = tp / np.
sum(y_predict==1)
recall = tp / np.
sum(y_val==1)
f1 =(2
* precision * recall)
/(precision + recall)
if f1 > bestf1:
bestf1 = f1
bestepsilon = epsilon
return bestepsilon, bestf1
epsilon, f1 = select_threshold(y_val, p_val)
# (8.990852779269495e-05, 0.8750000000000001)
## 找出異常點
mu, sigma2 = estimate_gaussian(x)
p = multivariate_gaussian(x, mu, sigma2)
outliers = np.array(
[x[i]
for i in
range
(len
(x))
if p[i]
< epsilon]
)# 概率小於閾值記為異常點
## 把異常點圈出來
plt.figure(figsize=(8
,5))
plt.scatter(x[:,
0], x[:,
1], edgecolors=
'b')
plt.scatter(outliers[:,
0], outliers[:,
1], edgecolors=
'r')
plt.show(
)## 結果顯示
原資料顯示:
![在這裡插入描述]
異常資料區別顯示:
![在這裡插入描述]
異常檢測 OCSVM與混合高斯分布
20200924 前面的文章 孤立森林的簡要記錄 中描述了孤立森林的簡單原理,而且之前也簡單測試過這種方法的效能,只不過最終沒有得到非常好的效果。本篇文章中記錄一下另外兩種方法。一般來說,異常檢測是一種無監督的學習方法,當然也可以轉化為監督學習,但是我個人感覺轉化的方式不好,原因主要是你需要將異常進...
基於膚色高斯概率模型的人臉檢測
include include opencv2 opencv.hpp include using namespace std using namespace cv void fillhole mat src 基於漫水填充的孔洞填充 define pi 3.14156 void main 基於高斯膚色...
資料探勘之異常點檢測
異常點檢測方法 一 基本概念 異常物件被稱作離群點。異常檢測也稱偏差檢測和例外挖掘。常見的異常成因 資料 於不同的類 異常物件來自於乙個與大多數資料物件源 類 不同的源 類 的思想 自然變異,以及資料測量或收集誤差。異常檢測的方法 1 基於模型的技術 首先建立乙個資料模型,異常是那些同模型不能完美擬...