2014-02-10 92 views
5

我必須在Python中應用最近鄰居,我在尋找scikit-learnscipy庫,它們都需要數據作爲輸入,然後計算距離並應用算法。給定距離矩陣的Python中的最近鄰居

在我的情況下,我不得不計算非常規距離,因此我想知道是否有方法直接饋送距離矩陣。

回答

5

你要創建一個DistanceMetric對象,提供自己的函數作爲參數:

metric = sklearn.neighbors.DistanceMetric.get_metric('pyfunc', func=func) 

從文檔:

這裏func是一個函數,它接受兩個一維numpy數組, 並返回一個距離。注意,爲了將BallTree內使用,該距離必須是一個真實的度量:即,它必須滿足下列性質

  • 非負:d(X,Y)> = 0
  • 身份: d(x,y)= 0當且僅當x == y
  • 對稱性:d(x,y)= d(y,x)
  • 三角不等式:d(x,y)+ d(y ,Z)> = d(X,Z)

可以再用01創建分類作爲關鍵字參數,它將在計算距離時使用它。

6

正如說的福特和根據文檔 http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier您應該將您的自定義距離轉換爲一個DistanceMetric對象,並將其作爲度量參數傳遞。

+0

我不認爲這是真的。文檔說:'[callable]:一個用戶定義的函數,它接受一個距離數組,並返回一個包含權重的相同形狀的數組。' – ford

+0

是的,你是對的。我編輯了答案。 –

0

要添加到您所要做這樣

指標= DistanceMetric.get_metric福特的答案(「pyfunc」,FUNC = /你的函數名稱/)

你不能只是把自己的功能作爲第二個參數,你必須將參數命名爲「func」

+0

好抓!我編輯了我的答案,在參數前加入了關鍵字。 – ford