T-SNE в Sklearn дает ошибку данных NaN или Inf - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь запустить t-sne из sklearn для данных уменьшенных размеров.

Для начала у меня есть матрица tfidf.Вот код для того же.

def tf_vectorizer (docs): "" "Извлечение вектора частоты терминов для каждого документа

"""

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. Любая помощь?

1 Ответ

0 голосов
/ 31 мая 2018

Вам также необходимо проверить с помощью np.isinf(), чтобы убедиться, что нет бесконечных функций.

...