TSNE的代碼(0.19 !!!)似乎every case使用BallTree(但預計算一個):什麼指標BallTree內允許
neighbors_method = 'ball_tree'
if (self.metric == 'precomputed'):
neighbors_method = 'brute'
knn = NearestNeighbors(algorithm=neighbors_method, n_neighbors=k,
metric=self.metric)
現在:
from sklearn.neighbors import BallTree
BallTree.valid_metrics
# ['seuclidean', 'hamming', 'dice', 'jaccard', 'matching', 'russellrao',
'euclidean', 'kulsinski', 'wminkowski', 'chebyshev', 'mahalanobis',
'sokalmichener', 'rogerstanimoto', 'infinity', 'p', 'canberra',
'haversine', 'sokalsneath', 'l1', 'minkowski', 'pyfunc', 'l2',
'cityblock', 'braycurtis', 'manhattan']
TSNE的代碼庫爲is quite active,可能會有一些大的變化來描述你的觀察結果,也可能是在上班前沒有檢查指標。
This pull-request似乎增加了對cosine
度量的支持,在這種情況下不使用BallTree!由於這似乎是合併,我認爲這將工作,如果你從當前主分支安裝sklearn!
編輯:它實際上工作(如預期)在主分支!
從當前主分支安裝sklearn(e049b1d35fba9fa688d81a6511be38a73ae824cc
; 17.10.2017)時,以下幾點沒有太大意義(只是演示),運行時沒有任何錯誤。
from sklearn.datasets.samples_generator import make_blobs
from sklearn.manifold import TSNE
X, y = make_blobs(n_samples=10, centers=3, n_features=2,
random_state=0)
tsne = TSNE(n_components=2, random_state=0, metric='cosine')
matrix_2d = tsne.fit_transform(X)
# OK!
謝謝@sascha ......儘管從主分支安裝並構建它後,它仍然無法工作。希望這個get可以在下一個版本更新中解決。我不明白他們爲什麼會擺脫它? – killerT2333
可能不是因爲他們想要,而是更多的是作爲艱難的設計決策(和正在進行的開發)的副作用。我認爲可能會從密集矩陣切換到稀疏矩陣。對於許多東西來說,這本身可能是致命的(尤其是度量稀疏性的指標;但這僅僅是一個不一定真實的例子)。 – sascha
@ killerT2333剛剛開啓了我的虛擬機。從主分支使用sklearn時,你的任務(請參閱我的代碼)實際上工作正常! – sascha