2017-08-10 26 views
0

我正在編寫一個Python程序,用於查找頁面上感興趣的區域。所有感興趣值的頁面上的位置都給了我,但有些值(通常只有一兩個)與其他值相距很遠,我想刪除這些值。數據集並不龐大,少於100個數據點,但我需要多次這樣做。消除二維數據異常值的方法

我在第一象限的兩個軸(x和y)上有一個笛卡爾座標系,所以只有正值。

我的數據點表示在此座標系上繪製的框,我已將其作爲一組兩個座標對存儲在元組中。由於所有線都是筆直的,所以可以用兩個座標對繪製一個框。例如:(8,2,15,10)將畫出一個指標爲(x,y)=(8,2),(8,10),(15,10)和(15,2)的框。

我想刪除這個集合中的異常值,但我很難找出一個好方法。我曾經想過通過查找IQR去掉異常值以及除去滿足這些條件的所有點:

Q1 - 1.5 * IQR或

Q3 + 1.5 * IQR

這裏的問題是,我因爲價值觀不僅僅是座標而是如果你願意的話,很難弄清楚它是如何產生的。但是它們是重疊的,所以它們不適合直方圖。

首先,我想我可能會添加一個點,每個整個值,該框的跨度,示例框將在這種情況下創建56點。在我看來,這個解決方案非常糟糕。有沒有人有其他解決方案?

+0

你看隔離阿甘?你可以檢查scikit-learn:http://scikit-learn.org/stable/modules/outlier_detection.html – Y0da

+0

@ Y0da不是這種特殊的方法,但我曾經看過其他的機器學習方法。這些數據不像我想要的那樣容易找到隔離和創建培訓集等,所以如果我能想出一個不涉及ML的解決方案,那就更好了。 – Victoria

+0

如果你不想ML,那麼你必須修復自己的門檻。所以你可以使用一個規範。見'scipy.spatial.distance.cdist' https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.cdist.html – Y0da

回答

0

主要有兩種方法:要麼固定閾值,要麼讓機器學習爲你推斷它。

對於機器學習,您可以使用Isolation Forest

如果你不想ML,那麼你必須修復自己的門檻。所以你可以使用一個規範。有no.linalg.norm(p1 - p2)或者如果你想在度量更多的控制有cdist

scipy.spatial.distance.cdist(p1, p2)