日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Python 離群點檢測算法-OCSVM

來源: 責編: 時間:2024-04-28 17:16:08 220觀看
導讀分類問題通常采用監督學習算法解決,如隨機森林、支持向量機、邏輯回歸器等。監督學習算法需要已知目標來建立模型,但通常只能觀察到正常的數據模式,而看不到罕見事件。由于罕見事件的目標數據要么不可用,要么數量不足以進

分類問題通常采用監督學習算法解決,如隨機森林、支持向量機、邏輯回歸器等。監督學習算法需要已知目標來建立模型,但通常只能觀察到正常的數據模式,而看不到罕見事件。由于罕見事件的目標數據要么不可用,要么數量不足以進行模型訓練,單類支持向量機(OCSVM)可以解決只有一類數據的問題,對正常類的屬性進行建模,能夠檢測到異常數據。本章將解釋支持向量機 (SVM) 的概念,并介紹如何將其發展為單類 SVM (OCSVM),以及它是如何定義離群值的。aDl28資訊網——每日最新資訊28at.com

支持向量機(SVM)

支持向量機(SVM)是一種監督學習算法,可處理分類和回歸問題,由Vladimir Vapnik及其同事在1992-1995年在AT&T貝爾實驗室開發。現已廣泛應用于分類問題。aDl28資訊網——每日最新資訊28at.com

SVM 有一個非常巧妙的特性。它可以創建一個非線性決策邊界來分離兩個類別。它在高維空間中找到分離的方法非常優雅。首先將無法用直線分離的數據點投影到高維空間,然后就會出現一個 "直線 "超平面,將一個類別的數據點與另一個類別的數據點分離開來。當超平面投影回原始空間時,它將是一條非線性曲線。這可以從圖 (B) 中看出。左圖顯示,藍點和紅點無法用任何直線分開。但如果將所有點投影到三維空間,結果就變成了線性分離。當數據投影回原始空間時,邊界則是一條非線性曲線。為什么在高維空間中成分分離會變得更容易?這要追溯到瓦普尼克-切沃能基斯(VC)理論。該理論認為,映射到更高維度的空間往往能提供更強的分類能力。aDl28資訊網——每日最新資訊28at.com

SVMSVMaDl28資訊網——每日最新資訊28at.com

SVM在高維空間中尋找支持向量,如上圖所示的虛線超平面。支持向量位于特征空間中每個類別的邊緣,通過最大化超平面的間隔來實現兩個類別的最大分離度。除了支持向量之間的區域外,SVM還允許一些點以避免過度擬合。aDl28資訊網——每日最新資訊28at.com

從 SVM 到單類 SVM

建立算法來區分一個類和另一個類的方法之一是使用單類 SVM。這種方法將所有數據點從高維空間的原點分離出來,并將該超平面到原點的距離最大化,以此來從正常類中分離出目標類。另一種方法是使用球面進行分離,而不是超平面。aDl28資訊網——每日最新資訊28at.com

OVSVMOVSVMaDl28資訊網——每日最新資訊28at.com

OCSVM 如何定義離群點得分?

OCSVM 離群點得分是數據點到超平面的距離,也稱為相似度。相似度的計算方法是使用核函數如徑向基函數、線性函數、多項式函數或西格瑪函數計算相應的 N 維相似度矩陣之和。徑向基函數簡單地計算輸入 x 與固定點 c 之間的距離。如。aDl28資訊網——每日最新資訊28at.com

OCSVM 對 RBF 和參數的選擇很敏感

OCSVM 對于內核選擇和部分超參數非常敏感,這會導致不同選擇下性能有很大差異。根據文獻的記錄,一個名為nu的重要超參數決定了數據點成為訓練數據中離群點的概率。它的取值介于0和1之間。當nu為10%時,意味著10%的數據被支持邊界錯誤地分類為離群值,也意味著10%的數據位于邊界上。具體來說,nu需要在離群值和支持向量數量之間進行權衡。aDl28資訊網——每日最新資訊28at.com

由于OCSVM對超參數非常敏感,解決方法是建立多個模型,然后平均預測結果以獲得更穩定的結果。在接下來的章節中,將用一系列nu值建立模型,然后對預測結果進行匯總。aDl28資訊網——每日最新資訊28at.com

建模流程

步驟 1 - 建立模型

我們將使用數據生成過程 (DGP) 模擬 500 個觀測值和六個變量,其中異常值比例設定為 5%。目標變量為 Y,我們將只使用 X 數據來建立無監督模型 OCSVM。aDl28資訊網——每日最新資訊28at.com

import numpy as npimport pandas as pdimport matplotlib.pyplot as pltfrom pyod.utils.data import generate_datacontamination = 0.05 # percentage of outliersn_train = 500       # number of training pointsn_test = 500        # number of testing pointsn_features = 6      # number of featuresX_train, X_test, y_train, y_test = generate_data(    n_train=n_train,     n_test=n_test,     n_features= n_features,     cnotallow=contamination,     random_state=123)X_train_pd = pd.DataFrame(X_train)X_train_pd.head()

圖片圖片aDl28資訊網——每日最新資訊28at.com

下圖是前兩個變量的散點圖。黃色圓點為異常值,紫色圓點為正常數據點。aDl28資訊網——每日最新資訊28at.com

# Plotplt.scatter(X_train_pd[0], X_train_pd[1], c=y_train, alpha=0.8)plt.title('Scatter plot')plt.xlabel('x0')plt.ylabel('x1')plt.show()

圖片aDl28資訊網——每日最新資訊28at.com

下面的代碼通過指定并擬合了模型 ocsvm,其中參數 cnotallow=0.05 表示離群值的百分比為 5%。這一參數對離群值分數的計算并沒有影響。如果沒有指定,PyOD 的默認值為 10%。接下來,函數 decision_function() 用于計算觀測值的離群值,而函數 predict() 則根據contamination的賦值來決定輸出 "1" 或 "0"。最后,語法 .threshold_ 可以顯示指定contamination下的閾值。aDl28資訊網——每日最新資訊28at.com

from pyod.models.ocsvm import OCSVMocsvm = OCSVM(cnotallow=0.05)  ocsvm.fit(X_train)# Training datay_train_scores = ocsvm.decision_function(X_train)y_train_pred = ocsvm.predict(X_train)# Test datay_test_scores = ocsvm.decision_function(X_test)y_test_pred = ocsvm.predict(X_test) # outlier labels (0 or 1)def count_stat(vector):    # Because it is '0' and '1', we can run a count statistic.     unique, counts = np.unique(vector, return_counts=True)    return dict(zip(unique, counts))print("The training data:", count_stat(y_train_pred))print("The training data:", count_stat(y_test_pred))# Threshold for the defined comtanimation rateprint("The threshold for the defined comtanimation rate:" , ocsvm.threshold_)
The training data: {0: 475, 1: 25}The training data: {0: 475, 1: 25}The threshold for the defined comtanimation rate: 29.680071121036956

我們可以通過.get_params() 打印出超參數值:aDl28資訊網——每日最新資訊28at.com

ocsvm.get_params()
{'cache_size': 200, 'coef0': 0.0, 'contamination': 0.05, 'degree': 3, 'gamma': 'auto', 'kernel': 'rbf', 'max_iter': -1, 'nu': 0.5, 'shrinking': True, 'tol': 0.001, 'verbose': False}

OCSVM的主要參數與核函數密切相關,默認情況下使用rbf核函數,nu值為0.5。此外,核函數中的獨立項coef0在poly和sigmoid中具有意義。對于多項式核函數(poly),degree決定了多項式函數的階數。模型優化的最大迭代次數由max_iterint設置,默認為-1,表示在優化達到收斂之前沒有限制。停止條件的容差可通過參數tol進行設置。catch_size決定了RAM的大小,從而影響了計算機RAM的使用率,默認值為200(MB)。在內存足夠的情況下,可以選擇將其調整為更高的值,例如500(MB)或1000(MB)。通常情況下,無需過于擔心此參數。aDl28資訊網——每日最新資訊28at.com

步驟 2 - 確定合理的閾值

離群值得分衡量離群值和正常數據點的偏差,所以可以使用離群值得分的直方圖來了解分布情況。直方圖展示了離群值高的數據點所占的百分比,從而有助于確定合理的閾值。圖 (E.2) 建議將閾值設為 16.0,因為直方圖中存在一個自然切點,閾值決定了異常組的大小。aDl28資訊網——每日最新資訊28at.com

import matplotlib.pyplot as pltplt.hist(y_train_scores, bins='auto')  # arguments are passed to np.histogramplt.title("Histogram with 'auto' bins")plt.xlabel('One-class SVM outlier score')plt.show()

圖片圖片aDl28資訊網——每日最新資訊28at.com

第 3 步 - 顯示正常組和異常組的描述性統計結果

離群值得分衡量離群值和正常數據點的偏差,所以可以使用離群值得分的直方圖來了解分布情況。直方圖展示了離群值高的數據點所占的百分比,從而有助于確定合理的閾值。上圖建議將閾值設為 16.0,因為直方圖中存在一個自然切點,閾值決定了異常組的大小。aDl28資訊網——每日最新資訊28at.com

threshold = ocsvm.threshold_ # Or other value from the above histogramdef descriptive_stat_threshold(df,pred_score, threshold):    # Let's see how many '0's and '1's.    df = pd.DataFrame(df)    df['Anomaly_Score'] = pred_score    df['Group'] = np.where(df['Anomaly_Score']< threshold, 'Normal', 'Outlier')    # Now let's show the summary statistics:    cnt = df.groupby('Group')['Anomaly_Score'].count().reset_index().rename(columns={'Anomaly_Score':'Count'})    cnt['Count %'] = (cnt['Count'] / cnt['Count'].sum()) * 100 # The count and count %    stat = df.groupby('Group').mean().round(2).reset_index() # The avg.    stat = cnt.merge(stat, left_notallow='Group',right_notallow='Group') # Put the count and the avg. together    return (stat)descriptive_stat_threshold(X_train,y_train_scores, threshold)

圖片圖片aDl28資訊網——每日最新資訊28at.com

模型評估中的關鍵指標包括計數百分比和特征均值。閾值的選擇將決定離群值的數量,較高的閾值將導致離群值減少。特征均值要與領域知識保持一致,如有偏離應重新檢查或刪除該特征。在進行特征標注時需要有效展示。離群組的平均異常得分應高于正常組。我們可以利用混淆矩陣來評估模型性能,該模型成功識別了全部25個離群值。aDl28資訊網——每日最新資訊28at.com

Actual_pred = pd.DataFrame({'Actual': y_test, 'Anomaly_Score': y_test_scores})Actual_pred['Pred'] = np.where(Actual_pred['Anomaly_Score']< threshold,0,1)pd.crosstab(Actual_pred['Actual'],Actual_pred['Pred'])

圖片圖片aDl28資訊網——每日最新資訊28at.com

通過聚合多個模型實現模型穩定性

OCSVM是一種基于鄰近度的算法,對異常值敏感且容易過擬合,特別是在第(D)節中。為了建立穩定的模型結果,應建立多個參數范圍各異的模型,然后匯總預測結果。aDl28資訊網——每日最新資訊28at.com

PyOD模塊提供了四種匯總結果的方法:平均值(Average)、最大值的最大值(MOM)、最大值的平均值(AOM)、平均值的最大值(MOA)。安裝這些函數使用 pip install combo。請注意,只需使用一種聚合方法。另外,輸入數據已經被標準化處理,但許多函數會自動進行標準化處理。aDl28資訊網——每日最新資訊28at.com

由于nu參數最敏感,因此需要建立多個 nu 值范圍廣泛的模型,總共會有 11 個模型。我們準備 11 列的空數據幀來存儲這些模型的預測結果。aDl28資訊網——每日最新資訊28at.com

from pyod.models.combination import aom, moa, average, maximizationfrom pyod.utils.utility import standardizerfrom pyod.models.ocsvm import OCSVM# Standardize dataX_train_norm, X_test_norm = standardizer(X_train, X_test)# Test a range of nuk_list = [0.01, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.99]n_clf = len(k_list)# Just prepare data frames so we can store the model resultstrain_scores = np.zeros([X_train.shape[0], n_clf])test_scores = np.zeros([X_test.shape[0], n_clf])# Modelingfor i in range(n_clf):    k = k_list[i]    ocsvm = OCSVM(nu=k,cnotallow=0.05)      ocsvm.fit(X_train_norm)    # Store the results in each column:    train_scores[:, i] = ocsvm.decision_function(X_train_norm)     test_scores[:, i] = ocsvm.decision_function(X_test_norm) # Decision scores have to be normalized before combinationtrain_scores_norm, test_scores_norm = standardizer(train_scores,test_scores)

預測模型的十個分數存儲在 "train_scores" 中,并對其進行了歸一化處理,以便對十個預測結果進行平均。PyOD 模塊提供了四種聚合方法,你只需選擇其中一種即可得出匯總結果。aDl28資訊網——每日最新資訊28at.com

# Combination by average# The test_scores_norm is 500 x 10. The "average" function will take the average of the 10 columns. The result "y_by_average" is a single column: y_train_by_average = average(train_scores_norm)y_test_by_average = average(test_scores_norm)import matplotlib.pyplot as pltplt.hist(y_train_by_average, bins='auto') # arguments are passed to np.histogramplt.title("Combination by average")plt.show()

訓練數據平均預測值直方圖訓練數據平均預測值直方圖aDl28資訊網——每日最新資訊28at.com

圖表顯示閾值為1.40,根據總分可得到描述性統計,發現有25個數據點為異常值。讀者可以對表(D.3)進行類似的解釋。aDl28資訊網——每日最新資訊28at.com

descriptive_stat_threshold(      X_train,y_train_by_average, 1.4)

圖片圖片aDl28資訊網——每日最新資訊28at.com

OCSVMA 算法總結

OCSVM根據正常類的屬性建立模型,以檢測非正常類數據。它在高維空間中將數據點與原點分離,并最大化該超平面到原點的距離。換句話說,原點就是算法試圖從正常類中分離出來的類。aDl28資訊網——每日最新資訊28at.com

本文鏈接:http://m.www897cc.com/showinfo-26-86198-0.htmlPython 離群點檢測算法-OCSVM

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 全網首測迪士尼VR魔法地板,360度原地行走環游地球!

下一篇: 輕松處理CSV文件,csvkit助你高效數據分析!

標簽:
  • 熱門焦點
Top 日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不
国产精品盗摄久久久| 欧美一区二区视频观看视频| 亚洲国产成人高清精品| 亚洲国产mv| 日韩亚洲欧美高清| 一区二区三区导航| 欧美专区亚洲专区| 欧美成va人片在线观看| 国产日韩一区| 欧美精品一区二区高清在线观看| 欧美区在线观看| 国产精品美女诱惑| 一区视频在线| 一本色道久久综合狠狠躁的推荐| 在线看片第一页欧美| 日韩视频免费在线观看| 欧美一区二区三区成人| 欧美成人精品一区| 国产精品一二一区| 国产精品盗摄一区二区三区| 欧美国产日产韩国视频| 久久全球大尺度高清视频| 欧美精品性视频| 欧美日韩成人精品| 国产一区二区三区四区老人| 亚洲精品免费网站| 国产欧美日韩不卡| 亚洲黄色成人久久久| 韩国一区二区三区在线观看 | 欧美日韩视频| 国产一区二区三区久久悠悠色av| 亚洲美女一区| 久久久噜噜噜久久中文字幕色伊伊 | 国产精品日韩欧美大师| 在线看无码的免费网站| 亚洲欧美一区二区三区久久 | 欧美激情黄色片| 国产欧亚日韩视频| 99国产欧美久久久精品| 亚洲精品视频啊美女在线直播| 亚洲综合欧美日韩| 欧美国产综合| 韩国一区二区在线观看| 亚洲香蕉网站| 欧美在线观看一二区| 欧美日韩国产91| 伊人久久大香线蕉综合热线| 午夜精品免费| 久久久久久9999| 国产精品久久久久aaaa樱花| 亚洲人成亚洲人成在线观看图片| 久久疯狂做爰流白浆xx| 国产精品高潮在线| 亚洲精品人人| 蜜臀久久99精品久久久画质超高清 | 亚洲黄色片网站| 日韩香蕉视频| 久热精品在线| 国产一区二区毛片| 亚洲欧美综合国产精品一区| 欧美日韩一区二区三区在线观看免| 欧美视频在线不卡| 亚洲国产精品第一区二区| 久久精品中文| 国产日韩一区二区| 午夜精品一区二区三区在线播放| 欧美肉体xxxx裸体137大胆| 亚洲欧洲日韩女同| 免费观看在线综合| 在线成人www免费观看视频| 久久精品视频在线看| 国产网站欧美日韩免费精品在线观看| 99精品免费视频| 欧美区国产区| 日韩亚洲欧美中文三级| 欧美精品18| 亚洲剧情一区二区| 欧美精品一区二区三区蜜臀| 亚洲日韩欧美视频| 欧美福利影院| 亚洲精品网站在线播放gif| 男人的天堂亚洲| 亚洲国产精品久久人人爱蜜臀| 久久先锋影音| 亚洲成色www久久网站| 免费不卡亚洲欧美| 亚洲国产日韩欧美综合久久 | 国产精品扒开腿做爽爽爽软件| 一区二区免费在线观看| 欧美午夜精品一区二区三区| 狠狠色狠狠色综合日日91app| 欧美中文字幕视频| 国产一区在线播放| 久久久免费精品| 136国产福利精品导航| 免费久久精品视频| 亚洲精品影视在线观看| 欧美日韩国产综合视频在线观看中文 | 国产精品一二一区| 亚洲国产一区二区a毛片| 欧美肥婆在线| 日韩午夜剧场| 欧美性大战久久久久| 91久久久亚洲精品| 欧美精品三区| 一区二区三区免费网站| 国产精品视频成人| 久久精品av麻豆的观看方式| 国产精品高潮在线| 午夜精品久久久久久久| 国产在线拍偷自揄拍精品| 亚洲一区二区在线视频| 国产精品日韩欧美一区| 欧美影片第一页| 红桃视频一区| 欧美国产在线电影| 一区二区三区四区五区视频| 国产欧美一区二区精品婷婷 | 欧美精品在线看| 亚洲男人天堂2024| 狠狠色丁香婷婷综合| 免费不卡亚洲欧美| 在线一区免费观看| 国产一区二区三区在线观看视频| 美女免费视频一区| 中文日韩在线视频| 欧美精品三级| 午夜精品久久久久久久99樱桃| 黄色成人免费网站| 欧美日韩国产影片| 午夜精品久久久久久99热软件| 在线观看成人av电影| 欧美四级剧情无删版影片| av72成人在线| 国产婷婷色一区二区三区四区| 美女脱光内衣内裤视频久久影院 | 亚洲欧美综合一区| 在线观看欧美黄色| 国产精品久久久久影院亚瑟| 久久久欧美精品| 99亚洲视频| 狠狠色综合色综合网络| 欧美精品一区在线播放| 欧美一级日韩一级| 亚洲精品午夜| 国产午夜精品一区二区三区欧美| 欧美激情亚洲自拍| 久久大逼视频| 99精品99久久久久久宅男| 国产在线一区二区三区四区 | 欧美日韩国产999| 欧美在线日韩精品| 日韩午夜三级在线| 激情亚洲成人| 国产精品色在线| 欧美日韩亚洲在线| 久久这里只有精品视频首页| 亚洲欧美激情四射在线日| 亚洲国产99| 国产在线拍偷自揄拍精品| 欧美午夜一区二区| 欧美.www| 久久久精品国产一区二区三区| 亚洲一区999| 亚洲精品国产精品久久清纯直播| 国产亚洲欧洲| 国产精品久久久免费| 亚洲欧美日韩精品一区二区 | 午夜精品福利一区二区蜜股av| 亚洲国产清纯| 国产一区视频在线看| 国产精品任我爽爆在线播放| 欧美精品尤物在线| 麻豆91精品| 午夜精品久久久久久久99水蜜桃| 亚洲精品视频二区| 一区二区亚洲| 国产午夜精品理论片a级大结局| 国产精品高潮呻吟久久av无限| 欧美精品一二三| 免费观看成人网| 久久久久久久一区| 欧美一区2区三区4区公司二百 | 亚洲天堂激情| 亚洲精品一区在线观看香蕉| 在线电影国产精品| 伊人天天综合| 好看的日韩av电影| 国产一区欧美| 国产亚洲欧美激情| 国产精品专区一| 国产精品女主播| 国产精品私拍pans大尺度在线| 欧美日韩一卡二卡| 欧美日韩午夜在线| 欧美另类极品videosbest最新版本| 毛片一区二区| 久久亚洲国产成人| 久久手机免费观看| 免费视频一区二区三区在线观看| 麻豆精品在线视频| 免费在线成人av| 欧美xxx成人| 欧美精品午夜视频|