我正在嘗試復習我對一些基本 ML 方法的理解。有人可以解釋引擎蓋下發生了kneighbors_graph什么嗎?我想只用 NumPy 復制這個輸出。
from sklearn.neighbors import kneighbors_graph
X = [[0, 1], [3, 4], [7, 8]]
A = kneighbors_graph(X, 2, mode='distance', include_self=True)
A.toarray()
輸出:
array([[0. , 4.24264069, 0. ],
[4.24264069, 0. , 0. ],
[0. , 5.65685425, 0. ]])
uj5u.com熱心網友回復:
生成的矩陣表示中每個點的n = 2 個鄰居的距離加權圖X,其中您將一個點作為其自己的鄰居(距離為零)。請注意,與非鄰居的距離也為零,因此您可能需要檢查連接圖以了解您正在查看的是零距離鄰居還是非鄰居。
讓我們從代表第一個點的第一行開始[0, 1]。這是該行中的數字的含義:
- 第一個
0是到最近點的距離,它本身就是(因為你指定了include_self=True)。如果你指定mode='connectivity'這將是一個 1,因為它是一個鄰居。 - 第二個元素
4.24是到 中的下一個點的歐幾里得距離(又名 L2 范數)X,即[3, 4]。你得到這個距離是因為metric='minkowski', p=2是默認值;如果你想要一個不同的距離度量,你可以擁有它。同樣,如果您指定mode='connectivity'這也將是 1,因為它是一個鄰居。 - 第三個元素 another
0并不是真正的距離;它告訴你第三點 ,[7, 8]不是鄰居,當n_neighbors它是 2 時。如果你指定mode='connectivity'這將是 0,因為它不是鄰居。
您可以使用 計算陣列中所有點對之間的距離scipy.spatial.distance.cdist(X, X)。還有scipy.spatial.KDTree鄰居查找。如果您真的想使用純 NumPy,請查看該linalg模塊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/488975.html
