2016-12-14 37 views
1

我使用Jupyter筆記本和python 2.7從anaconda。我有一個大約250,000的尺寸數據集,我需要壓縮到n個較低的尺寸。我正在使用scikit TSNE。當運行TSNE爲n=5n=10時,它工作正常。但是,當我轉至n=50或更多時,會顯示以下消息:"The kernel appears to have died."沒有顯示錯誤消息。問題是什麼?是否由於內存過載?我應該將終端中的代碼作爲腳本而不是Jupyter運行嗎?Jupyter筆記本崩潰爲scikit TSNE降維

我TSNE功能:

def tsne_to_n_dimensions(n): 
    start=timer() 
    #tsne 
    print diff_df.shape 
    tsne = sklearn.manifold.TSNE(n_components=n,verbose=2) 
    data_nd_tsne =tsne.fit_transform(diff_df) 

    calculate stuff from data_nd_tsne   
    return stuff 

而且diff_df是一個全球性的熊貓數據幀

我已經通過thisthis走了,但一直沒找到解決辦法

+1

您可以通過使用[頂](HTTP跟蹤過程中使用多少內存:// man7 .ORG/LINUX /人-頁/ MAN1/top.1.html)。可能值得注意scikit的tSNE文檔:「強烈建議使用另一種降維方法(例如PCA用於密集數據或TruncatedSVD用於稀疏數據)以將維數減少到合理的數量(例如, 50)如果特徵數量非常高,這將抑制一些噪聲並加速樣本間成對距離的計算,更多技巧參見Laurens van der Maaten的FAQ [2]。 – ncfirth

回答

3

我已經找到了解決方案使用python-bhtsne這也是Barnes-Hut的t-Distributed隨機相鄰嵌入的實現方法。

它很容易實現,甚至提供了一個選項,可以在每次運行tsne時使用相同的參數獲得相同的輸出 - 這在scikit實現中不存在。

這是一個由Laurens van der Maaten原始實現的python包裝。

所以基本上你只需要做的,而不是按照常規TSNEscikit的:

from bhtsne import tsne 
data_nd_tsne = tsne(diff_df)