V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
black11black
V2EX  ›  机器学习

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

  •  
  •   black11black · 2020-05-15 20:26:54 +08:00 · 1012 次点击
    这是一个创建于 1435 天前的主题,其中的信息可能已经有所发展或是发生改变。

    昨天发了一个旅行家问题的算法贴,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 条回复    2020-05-16 08:05:18 +08:00
    Munichong
        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 后各点间距离,看看是不是邻居间的关系可以保持。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   880 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:57 · PVG 05:57 · LAX 14:57 · JFK 17:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.