我在python中使用t-SNE时出现了一个小问题。
我采用了一个小数据集:
A = np.matrix([[0.2, 0.3, 0.6, 0.8],
[0.2, 0.25, 0.55, 0.85],
[0.2, 0.3, 0.6, 0.8],
[0.64, 0.8, 0.2, 0.2],
[0.65, 0.8, 0.2, 0.2],
[0.65, 0.75, 0.2, 0.15],
[0.7, 0.8, 0.2, 0.2]])
然后,我使用此命令运行t-SNE:
tsne = manifold.TSNE(n_components=2,random_state=0, metric=Distance)
这里,Distance
是一个函数,它将两个数组作为输入,计算它们之间的距离并返回距离。
这个功能有效。如果改变我的值,我可以看到输出发生了变化。
def Distance(X,Y):
Result = spatial.distance.euclidean(X,Y)
return Result
但是可视化并没有改变使用t-sne ...而且可视化不尊重我的点之间的距离。
如果我删除指标:
tsne = manifold.TSNE(n_components=2,random_state=0)
它仍然给我相同的结果......
你有解决方案吗?
答案 0 :(得分:0)
这是因为默认def dictionary(self, shift):
'''
For Caesar cipher.
shift (integer): the amount by which to shift every letter of the
alphabet. 0 <= shift < 26
Returns: a dictionary mapping a letter (string) to
another letter (string).
'''
#create empty dictionary
alphaDict = {}
#retrieve alphabet in upper and lower case
letters = string.ascii_lowercase + string.ascii_uppercase
#build dictionary with shift
for i in range(len(letters)):
if letters[i].islower() == True:
alphaDict = {letters[i]: letters[(i + shift) % 26]}
else:
alphaDict = {letters[i]: letters[((i + shift) % 26) + 26]}
return alphaDict
是metric
。所以实际上与默认设置相比,你没有改变任何东西。您可以在here查看默认参数。
我也在这里复制并粘贴它们:
euclidean