2015-06-24 53 views
0

該庫和相應的文檔如下 - 是的,我閱讀所有內容並能夠在自己的代碼中「運行」。來自LSHForest的例子,結果不令人信服

http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.LSHForest.html

但結果並沒有真正意義的我,所以我通過例如去(其中包括在先前網頁以及)

>>> from sklearn.neighbors import LSHForest 
    >>> X_train = [[5, 5, 2], [21, 5, 5], [1, 1, 1], [8, 9, 1], [6, 10, 2]] 
    >>> X_test = [[9, 1, 6], [3, 1, 10], [7, 10, 3]] 
    >>> lshf = LSHForest() 
    >>> lshf.fit(X_train) 
    LSHForest(min_hash_match=4, n_candidates=50, n_estimators=10, 
       n_neighbors=5, radius=1.0, radius_cutoff_ratio=0.9, 
       random_state=None) 
    >>> distances, indices = lshf.kneighbors(X_test, n_neighbors=2) 
    >>> distances           
     array([[ 0.069..., 0.149...], 
       [ 0.229..., 0.481...], 
       [ 0.004..., 0.014...]]) 
    >>> indices 
     array([[1, 2], 
       [2, 0], 
       [4, 0]]) 

所以我只是嘗試驗證通過找到三個測試集的最近鄰居的例子[9,1,6],[3,1,10],[7,10,3]

說搜索最近的鄰居爲[9,1, 6](通過使用歐幾里德距離),最接近的訓練點是[5,5,2]和[6,10,2](我認爲指數會[0.4]) - 這是顯着不同的結果[1,2]

距離也通過簡單的數學計算完全脫離主題,我的Excel表,再次attached

感謝您的時間和幫助

+0

在LSHForest支持的餘弦距離中,這些結果是確切的最近鄰居。 – joeln

回答

0

這是沒有錯的,因爲LSHForest實現ANN(近似近鄰),也許這是我們需要考慮的差異。人工神經網絡的結果不是最近的鄰居,而是最近鄰居應該是什麼的近似值。

例如,2近鄰結果如下:

from sklearn.neighbors import NearestNeighbors 

X_train = [[5, 5, 2], [21, 5, 5], [1, 1, 1], [8, 9, 1], [6, 10, 2]] 
X_test = [[9, 1, 6], [3, 1, 10], [7, 10, 3]] 

nbrs = NearestNeighbors(n_neighbors=2, algorithm='ball_tree').fit(X_train) 
distances, indices = nbrs.kneighbors(X_test) 

,並返回

indices 
Out[2]: 
array([[0, 2], 
     [0, 2], 
     [4, 3]], dtype=int64) 

distances 
Out[3]: 
array([[ 6.92820323, 9.43398113], 
     [ 9.16515139, 9.21954446], 
     [ 1.41421356, 2.44948974]]) 

如果有幫助,結賬this並注意它提到:

給定一個查詢點q,如果距離q的距離r內存在一個點,則它報告距離q的距離cr內的一個點。這裏c是算法的近似因子。

距離'r'處的點和返回的點不一定是相同的。

希望這會有所幫助。

+0

感謝您的解釋,但爲什麼lshforest的「距離」輸出大約比實際歐幾里得距離小100?不知道LSHForest如何分解這個distnace。 :) – user381509

+2

目前scikit-learn中的LSHForest實現僅提供餘弦距離的近似值。所以你得到的不是歐幾里德距離,而是餘弦距離。 您可以使用最近鄰居來獲得歐幾里德距離,您可以在其中選擇您想要的距離度量。 – maheshakya

+0

近似性無關緊要 - 這是錯誤的指標! – joeln