为什么我的sklearn t-sne函数在达到其最大迭代之前退出

时间:2017-07-27 20:25:58

标签: python machine-learning scikit-learn dimensionality-reduction

我正在尝试在方形距离矩阵上运行tsne分析。这些是我正在使用的命令。

model = TSNE(n_components = 2,perplexity = 32, verbose = 10,n_iter = 1000, metric = "precomputed")
embeddings = model.fit_transform(D)

这是我收到的输出:output from tsne function

看起来程序正在运行75次迭代,然后调用它并退出。当我绘制来自tsne的数据时,它基本上只是一个密集的blob。为什么程序会提早退出?如何让它运行更长时间?

1 个答案:

答案 0 :(得分:1)

它已退出,因为已达到退出条件

解释日志,退出条件可能是渐变的指标,此处称为 gradient-norm 。如果需要,请查看gradient-descent的基础知识以了解直觉。由于每次迭代都朝向梯度的负值迈出了一步,微小的梯度对目标没有太大作用(并且将被解释为:我们找到了局部/全局最小值)。

看起来像(仅解释您的日志):

if np.linalg.norm(gradient) < 1e-4:
    return solution

对于优化问题的参数化,进一步进行更多迭代没有任何优点。解决方案不会变得更好(就最小化而言)。

您只能尝试其他参数(导致其他优化问题)。