昨天发了一个旅行家问题的算法贴,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 ]]
====================================================
如题,我尝试将模拟的六维数据降到三维,数据完全是随机生成的,并没有什么实际意义,但是数据中一个关键点是,第一和第二组数据完全一致,倒数第一和倒数第二组数据只有极微弱差距。
所以按照理论上,我希望得到的降维数据中,第一和第二个结果应该是完全一致,或者说是非常相似的。 但是跑了几次得到的结果都是相差非常远。想问问带佬们这是为什么,这个结果是正常的吗还是我写错了。
1
Munichong 2020-05-16 08:05:18 +08:00 1
楼主可以试试降低 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 后各点间距离,看看是不是邻居间的关系可以保持。 |