我必須在Python中應用最近鄰居,我在尋找scikit-learn
和scipy
庫,它們都需要數據作爲輸入,然後計算距離並應用算法。給定距離矩陣的Python中的最近鄰居
在我的情況下,我不得不計算非常規距離,因此我想知道是否有方法直接饋送距離矩陣。
我必須在Python中應用最近鄰居,我在尋找scikit-learn
和scipy
庫,它們都需要數據作爲輸入,然後計算距離並應用算法。給定距離矩陣的Python中的最近鄰居
在我的情況下,我不得不計算非常規距離,因此我想知道是否有方法直接饋送距離矩陣。
你要創建一個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創建分類作爲關鍵字參數,它將在計算距離時使用它。
正如說的福特和根據文檔 http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.KNeighborsClassifier.html#sklearn.neighbors.KNeighborsClassifier您應該將您的自定義距離轉換爲一個DistanceMetric對象,並將其作爲度量參數傳遞。
要添加到您所要做這樣
指標= DistanceMetric.get_metric福特的答案(「pyfunc」,FUNC = /你的函數名稱/)
你不能只是把自己的功能作爲第二個參數,你必須將參數命名爲「func」
好抓!我編輯了我的答案,在參數前加入了關鍵字。 – ford
我不認爲這是真的。文檔說:'[callable]:一個用戶定義的函數,它接受一個距離數組,並返回一個包含權重的相同形狀的數組。' – ford
是的,你是對的。我編輯了答案。 –