高维特征向量使用 TSNE 降维,为什么感觉结果有问题?

2020-05-15 20:26:54 +08:00
 black11black

昨天发了一个旅行家问题的算法贴,V 友一致认为不能算算法贴,本身属于 NP 困难问题没什么确切算法可言。

最后想了想,因为本质需要完成的是分类任务,既然无法求得理论上最完美的分类解,那只能用其他办法尝试逼近了,目前想到比较简单的做法是把高维特征向量用 TSNE 降维,然后跑 kmeans 分类。

对机器学习算法大部分不求甚解,于是做了调包侠,用 sklearn 里写好的 tsne 跑。但是刚才跑了几个测试数据感觉都不太对,有没有机器学习算法大佬来指点一下

====================================================一个简单的示例代码

from sklearn.manifold import TSNE
import numpy as np

X = [
  [10, 56, 12 , 10, 56, 12],
  [10, 56, 12 , 10, 56, 12], 
  [80, 21, 92 , 80, 21, 92], 
  [21, 30, 53 , 21, 30, 53], 
  [11, 81, 15 , 11, 81, 15], 
  [11, 81, 15 , 11, 81, 14]
]
model = TSNE(n_components=3 ,learning_rate = 1000 , n_iter = 1000 , init = 'pca') 
Y = model.fit_transform(X)

====================================================得到结果

[[-199.75327  -165.53574  -241.92471 ]
 [ 171.09433   -41.500977  117.659996]
 [ 362.16272   397.58792    34.34646 ]
 [-256.5073   -221.04861   304.41156 ]
 [ -26.240019  322.07495  -296.1156  ]
 [-339.0215    261.51828   109.22412 ]]

====================================================

如题,我尝试将模拟的六维数据降到三维,数据完全是随机生成的,并没有什么实际意义,但是数据中一个关键点是,第一和第二组数据完全一致,倒数第一和倒数第二组数据只有极微弱差距。

所以按照理论上,我希望得到的降维数据中,第一和第二个结果应该是完全一致,或者说是非常相似的。 但是跑了几次得到的结果都是相差非常远。想问问带佬们这是为什么,这个结果是正常的吗还是我写错了。

1124 次点击
所在节点    机器学习
1 条回复
Munichong
2020-05-16 08:05:18 +08:00
楼主可以试试降低 learning rate,从官方文档来看:
The learning rate for t-SNE is usually in the range [10.0, 1000.0]. If the learning rate is too high, the data may look like a ‘ball’ with any point approximately equidistant from its nearest neighbours. If the learning rate is too low, most points may look compressed in a dense cloud with few outliers.
如果你的 learning rate 过高的话,点和它最近的邻居之间距离会差不多。你可以减小 learning rate 试试。另外可以比对一下 reduce 前各点间的距离和 reduce 后各点间距离,看看是不是邻居间的关系可以保持。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/672172

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX