t-SNE:Sklearn AttributeError:“NoneType”对象没有属性“split”

Ano*_*ym6 5 python nonetype scikit-learn

对以下错误有帮助吗?我正在运行 PCA 和 t-SNE,PCA 似乎运行良好,但无论我在哪里运行 t-SNE,都会遇到以下错误。我的 t-SNE 代码如下:

def T_SNE(X,Label,Component=2,title=""):

    tsne = TSNE(n_components=Component)

    tsne_result = tsne.fit_transform(X)
   
    tsne_result_df = pd.DataFrame({'T_SNE_1': tsne_result[:,0], 'T_SNE_2': tsne_result[:,1], 
                                   'label': Label})
    lim = (tsne_result.min()-0.1*tsne_result.min(), tsne_result.max()+0.1*tsne_result.min())
    
    PLOT(TITLE=title,Product="T_SNE",Label=Label,Data=tsne_result_df,lim=lim)

    return tsne_result,tsne
    

result,tsne=T_SNE(X=X_Number,Label=Y_Number,Component=2,title="Digit_data")
Run Code Online (Sandbox Code Playgroud)

以下错误

AttributeError: 'NoneType' object has no attribute 'split'
Run Code Online (Sandbox Code Playgroud)

Kum*_*mar 5

我不知道这个问题的解决方案,但我如何看待它的工作原理,你必须确保你的输入数据中没有任何负十进制数。在这种情况下它会起作用。

例如:

X = np.array([[0, 0, 0], 
          [0, 1, 1], 
          [1, 0, 1], 
          [1, 1, 1]])
X_embedded = TSNE(n_components=2, learning_rate='auto',init='random', perplexity=3).fit_transform(X)
X_embedded

array([[ 38.441612, -19.513802],
       [ 42.340416,  53.716785],
       [ 81.7535  , -56.929142],
       [-22.048851,  23.391865]], dtype=float32)
Run Code Online (Sandbox Code Playgroud)

这工作正常。但是,如果您更改一个输入值,如下所示:

X = np.array([[0, 0, 0], 
          [0, 1, 1], 
          [-1.1, 0, 1], 
          [1, 1, 1]])
X_embedded = TSNE(n_components=2, learning_rate='auto',init='random', perplexity=3).fit_transform(X)
X_embedded

      self.num_threads = self.get_num_threads()
    608         self._get_extra_info()

C:\ProgramData\Anaconda3\lib\site-packages\threadpoolctl.py in get_version(self)
    644                              lambda: None)
    645         get_config.restype = ctypes.c_char_p
--> 646         config = get_config().split()
    647         if config[0] == b"OpenBLAS":
    648             return config[1].decode("utf-8")

AttributeError: 'NoneType' object has no attribute 'split'
Run Code Online (Sandbox Code Playgroud)

它将通过错误。我不确定它所存在的内部问题,但根据我的理解,根据 sklearn tsne 中的文档,它需要平方距离。

如果您确保输入数据中没有任何负十进制数,它将起作用。

免责声明:这只是我对 tsne 工作方式的理解,可能有些专家可以强调其他工作或确切的问题。

来源:https://scikit-learn.org/stable/modules/ generated/sklearn.manifold.TSNE.html#sklearn.manifold.TSNE.fit

编辑1:我正在编辑这个答案,因为我得到了一个解决方案。您已确保以下软件包具有所需的版本并重新启动内核,它应该可以工作。

pip install threadpoolctl==3.1.0
Run Code Online (Sandbox Code Playgroud)

来源:sklearn KMeans 不起作用,因为我只得到“NoneType”对象在非空数组上没有属性“split”


Han*_*idz 0

我遇到了同样的问题,似乎与 tSNE 代码有关,没有很好地处理错误。预先设置您的perplexity值,对于我正在处理的数据,小于 120 的困惑度值工作正常,但超出此值我收到此错误。(我还设置了init='pca',不确定这是否有任何区别。通常困惑度设置为 5 到 50 之间的任意值,如原始文献中所建议的那样。