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