python离群点检测方法分几类_数据分析 第五篇:离群点检测
離群點(outlier)是指和其他觀測點偏離非常大的數(shù)據(jù)點,離群點是異常的數(shù)據(jù)點,但是不一定是錯誤的數(shù)據(jù)點。確定離群點對于數(shù)據(jù)分析會帶來不利的影響,比如,增大錯誤方差、影響預(yù)測和影響正態(tài)性。
從散點圖上可以直觀地看到離群點,離群點是孤立的一個數(shù)據(jù)點;從分布上來看,離群點遠(yuǎn)離數(shù)據(jù)集中其他數(shù)據(jù)點。
在數(shù)據(jù)處理過程中,檢測離斷點的方法,通常有Z-score 和 IQR。
一,Z-score方法
在介紹Z-score方法之前,先了解一下3?原則,這個原則有個前提條件:數(shù)據(jù)需要服從正態(tài)分布。
在3?原則下,如果觀測值與平均值的差值超過3倍標(biāo)準(zhǔn)差,那么可以將其視為異常值。正負(fù)3?的概率是99.7%,那么距離平均值3?之外的值出現(xiàn)的概率為P(|x-u| > 3?) <= 0.003,屬于極個別的小概率事件。
如果數(shù)據(jù)不服從正態(tài)分布,那么可以用遠(yuǎn)離平均值的多少倍標(biāo)準(zhǔn)差來描述,倍數(shù)就是Z-score。Z-score以標(biāo)準(zhǔn)差為單位去度量某一原始分?jǐn)?shù)偏離平均數(shù)的距離,它回答了一個問題:"一個給定分?jǐn)?shù)距離平均數(shù)多少個標(biāo)準(zhǔn)差?",Z-score的公式是:
Z-score = (Observation — Mean)/Standard Deviation
z = (X — μ) / σ
Z-score需要根據(jù)經(jīng)驗和實際情況來決定,通常把遠(yuǎn)離標(biāo)準(zhǔn)差3倍距離以上的數(shù)據(jù)點視為離群點,也就是說,把Z-score大于3的數(shù)據(jù)點視作離群點,Python代碼的實現(xiàn)如下:
importnumpy as npimportpandas as pd
defdetect_outliers(data,threshold=3):
mean_d=np.mean(data)
std_d=np.std(data)
outliers=[]for y indata_d:
z_score= (y - mean_d)/std_dif np.abs(z_score) >threshold:
outliers.append(y)return outliers
二,IQR方法
四分位點內(nèi)距(Inter-Quartile Range,IQR),是指在第75個百分點與第25個百分點的差值,或者說,上、下四分位數(shù)之間的差,計算IQR的公式是:
IQR = Q3 ? Q1
IQR是統(tǒng)計分散程度的一個度量,分散程度通過需要借助箱線圖來觀察,通常把小于 Q1 - 1.5 * IQR 或者大于 Q3 + 1.5 * IQR的數(shù)據(jù)點視作離群點,探測離群點的公式是:
outliers =? value < ( Q1 - 1.5 * IQR )? or value > ( Q3 + 1.5 * IQR )
這種探測離群點的方法,是箱線圖默認(rèn)的方法,箱線圖提供了識別異常值/離群點的一個標(biāo)準(zhǔn):
異常值通常被定義為小于?QL- l.5 IQR?或者 大于?Qu+ 1.5 IQR的值,QL稱為下四分位數(shù),?Qu稱為上四分位數(shù),IQR稱為四分位數(shù)間距,是Qu上四分位數(shù)和QL下四分位數(shù)之差,其間包括了全部觀察值的一半。
箱線圖的各個組成部分的名稱及其位置如下圖所示:
箱線圖可以直觀地看出數(shù)據(jù)集的以下重要特性:
中心位置:中位數(shù)所在的位置就是數(shù)據(jù)集的中心,從中心位置向上或向下看,可以看出數(shù)據(jù)的傾斜程度。
散布程度:箱線圖分為多個區(qū)間,區(qū)間較短時,表示落在該區(qū)間的點較集中;
對稱性:如果中位數(shù)位于箱子的中間位置,那么數(shù)據(jù)分布較為對稱;如果極值離中位數(shù)的距離較大,那么表示數(shù)據(jù)分布傾斜。
離群點:離群點分布在箱線圖的上下邊緣之外。
使用Python實現(xiàn),參數(shù)sr是Series類型的變量:
defdetect_outliers(sr):
q1= sr.quantile(0.25)
q3= sr.quantile(0.75)
iqr= q3-q1 #Interquartile range
fence_low = q1-1.5*iqr
fence_high= q3+1.5*iqr
outliers= sr.loc[(sr < fence_low) | (sr >fence_high)]return outliers
參考文檔:
總結(jié)
以上是生活随笔為你收集整理的python离群点检测方法分几类_数据分析 第五篇:离群点检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 项目从 tomcat7部署到tomcat
- 下一篇: python wordpress xml