【问题标题】:Strange iteration results "error is nan" and RuntimeWarning using t-SNE使用 t-SNE 的奇怪迭代结果“error is nan”和 RuntimeWarning
【发布时间】:2016-04-05 01:13:06
【问题描述】:

我正在使用 t-SNE python 实现对X 进行降维,其中包含 100 个实例,每个实例由 1024 个参数描述,用于 cnn 可视化。

X.shape = [100, 1024]

X.dtype = float32

当我跑步时:

Y = tsne.tsne(X)

在 tsne.py 第 23 行弹出第一个警告:

RuntimeWarning:在日志中遇到除以零 H = Math.log(sumP) + beta * Math.sum(D * P) / sumP

然后在以下几行中还有更多类似这样的警告:

RuntimeWarning: 除法中遇到无效值

最后我在处理过程中的每次迭代后得到这个结果:

迭代 xyz : 错误是 nan

代码结束时没有“错误”,最后我得到一个空散点图。

编辑:

-> 我已经尝试过使用不同的数据集,并且效果很好。但是我也需要它来处理我的第一组(似乎会引起问题的那个)

问题:

有谁知道这可能是什么原因造成的?有解决办法吗?

【问题讨论】:

  • 问题在于,由于它一开始就使用 PCA,因此它至少需要数据集中的样本数量与您拥有的特征数量相同。您能否为您的数据集获取更多样本?
  • 它是用于医疗应用的,所以我无法轻易获得更多样本。我通过添加一个小值(例如 0.0001)来避免在导致 nan 的行上除以 0 来解决此问题。
  • 我收到了同样的错误消息,但我有数千个样本(我一直在尝试子集)并且只有 39 个功能......
  • 使用创建者网站的 t-sne 实现时出现“错误是 nan”问题,但使用 sklearn.manifold.TSNE 没有问题

标签: python-2.7 nan dimensionality-reduction


【解决方案1】:
sumP = sum(P)+np.finfo(np.double).eps
H = np.log(sumP) + beta * np.sum(D * P) / sumP;

这应该可以解决问题

【讨论】:

  • 我也遇到了同样的问题。这非常有效 - 有人可以解释导致错误的原因以及为什么这一行正在修复它吗?
  • 如错误所说“除以零”;问题在于,在某些情况下,算法会将数字除以零。 "+np.finfo(np.double).eps" 将一个非常小的值添加到 sum(P) 以防止除以零错误。 @arctic.queenolina
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-03
  • 1970-01-01
相关资源
最近更新 更多