【问题标题】:T-SNE in Sklearn giving NaN or Inf data errorSklearn 中的 T-SNE 给出 NaN 或 Inf 数据错误
【发布时间】:2018-11-09 20:42:40
【问题描述】:

我正在尝试从 sklearn 对缩减维度的数据运行 t-sne。

首先,我有一个 tfidf 矩阵。这是相同的代码。

def tf_vectorizer(文档): """ 提取每个文档的词频向量

"""

from sklearn.feature_extraction.text import TfidfVectorizer
print("Extracting tfidf features for clustering...\n")
tf_vec = TfidfVectorizer(max_df=0.95, min_df=2,norm='l2').fit(docs)

print("Tf-idf features extracted!!\n")
return tf_vec

然后我使用 TruncatedSVD 将尺寸从 11K 减少到 500。这里是

def reduce_dimensions(tfidf_data,n_components):
    """ This function will reduce the dimension of the dataset"""


    from sklearn.decomposition import TruncatedSVD
    svd=TruncatedSVD(n_components=n_components,random_state=42)

    svd_reduced_data=svd.fit_transform(tfidf_data)
    svd_reduced_data=svd_reduced_data.astype('float')
    #print("Explained Variance of all components {}".format(svd.explained_variance_ratio_))
    print("Total variance explained {}".format(svd.explained_variance_ratio_.sum()))

    return svd_reduced_data

我检查了 svd_reduced_data 的输出以检查是否有任何 NaN 或 Inf。

np.isnan(svd_reduced_data).sum()
0

因此这表明该数据中没有缺失值。现在我将这个 500 维的数据传递给 tsne 以将其缩减为 2 维,如下所示:

  from sklearn.manifold import TSNE
   tsne=TSNE(n_components=n_components,n_iter=300,random_state=42)
   tsne_reduced_data=tsne.fit_transform(svd_reduced_data)

我得到这个错误:

/Users/anaconda/envs/dl/lib/python3.5/site-packages/scipy/linalg/misc.py in norm(a, ord, axis, keepdims)
    127     """
    128     # Differs from numpy only in non-finite handling and the use of blas.
--> 129     a = np.asarray_chkfinite(a)
    130 
    131     # Only use optimized norms if axis and keepdims are not specified.

/Users/anaconda/envs/dl/lib/python3.5/site-packages/numpy/lib/function_base.py in asarray_chkfinite(a, dtype, order)
   1231     if a.dtype.char in typecodes['AllFloat'] and not np.isfinite(a).all():
   1232         raise ValueError(
-> 1233             "array must not contain infs or NaNs")
   1234     return a
   1235 

ValueError: array must not contain infs or NaNs

当基础数据没有 NaN 时,不确定为什么会出现此错误。有什么帮助吗?

【问题讨论】:

    标签: python numpy scikit-learn pca


    【解决方案1】:

    您还需要与np.isinf() 核对以确保没有无限功能。

    【讨论】:

    • 我检查它是假的。但是我通过参考这个 GitHub 评论找到了解决方案。 github.com/scikit-learn/scikit-learn/issues/6665
    • 对于来自 google 的后代,您使用 OSX 并且更新到 numpy 1.11.1 是否修复了该 github 链接的相关点?
    • 那个 gihub 链接修复了它。您需要根据评论卸载并重新安装 numpy 和 sklearn
    猜你喜欢
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 2014-02-10
    • 2016-04-27
    • 2023-03-05
    • 2019-05-12
    • 2018-07-03
    相关资源
    最近更新 更多