2

我正在尝试根据此处的工作运行利用 UMAP 进行降维的代码:https ://umap-learn.readthedocs.io/en/latest/basic_usage.html

我在 Spyder (Python 3.7) 上运行。我收到此错误: TypeError: a bytes-like object is required, not 'list'

这是我的代码:

将 numpy 导入为 np
从 sklearn.datasets 导入 load_iris、load_digits
从 sklearn.model_selection 导入 train_test_split
将 matplotlib.pyplot 导入为 plt
将 seaborn 导入为 sns
将熊猫导入为 pd

将 umap.umap_ 导入为 umap

# 导入 ummap

从 sklearn.preprocessing 导入 StandardScaler
从 matplotlib 导入补丁


#data = pd.read_csv('/Users/chrisweber/Documents/Walsh Lab/UMAP.csv')

data = pd.read_csv('/Users/Elizabeth/Desktop/UMAPtest.csv')


# 取消注释某一部分或另一部分


################################## 第 1 部分 - UMAP ########### ################################################# ######
减速器 = umap.UMAP()
端点=数据[['RR','na1','fa1','nt1','ft1','nt2','ft2']].values
scaled_endpoints = StandardScaler().fit_transform(endpoints)
嵌入 = reducer.fit_transform(scaled_endpoints)


plt.scatter(
    嵌入[:, 0],
    嵌入[:, 1],
    c=[sns.color_palette()[x] for x in data.Identifier.map({0:0, 1:1})])

plt.gca().set_aspect('equal', 'datalim')

plt.title('根据标识符进行 UMAP 投影', fontsize=24)

蓝色 = patch.Patch(color='steelblue', label='0')
橙色=补丁。补丁(颜色='橙色​​',标签='1')
plt.legend(handles=[蓝色, 橙色])
################################################# ################################################# ####################


################################# 第 2 部分 - 配对图 ########### ################################################# ##
# sns.pairplot(数据,色调='标识符')
# plt.subplots_adjust(.05, .05, .95, .95)
# plt.suptitle('标识符的端点分析')
################################################# ################################################# ####################


plt.show()

这是我在运行时收到的消息:

回溯(最近一次通话最后):

  <module> 中的文件“C:\Users\Elizabeth\Desktop\UMAPs.py”,第 31 行
    嵌入 = reducer.fit_transform(scaled_endpoints)

  文件“C:\ProgramData\Anaconda3\lib\site-packages\umap\umap_.py”,第 2012 行,在 fit_transform 中
    self.fit(X, y)

  文件“C:\ProgramData\Anaconda3\lib\site-packages\umap\umap_.py”,第 1833 行,适合
    self._search_graph.transpose()

  文件“C:\ProgramData\Anaconda3\lib\site-packages\scipy\sparse\lil.py”,第 437 行,转置
    return self.tocsr(copy=copy).transpose(axes=axes, copy=False).tolil(copy=False)

  文件“C:\ProgramData\Anaconda3\lib\site-packages\scipy\sparse\lil.py”,第 462 行,在 tocsr
    _csparsetools.lil_get_lengths(self.rows, indptr[1:])

  文件“_csparsetools.pyx”,第 109 行,在 scipy.sparse._csparsetools.lil_get_lengths

  View.MemoryView.memoryview_cwrapper 中的文件“stringsource”,第 658 行

  View.MemoryView.memoryview.__cinit__ 中的文件“stringsource”,第 349 行

TypeError:需要一个类似字节的对象,而不是“列表”```

我不知道如何修复错误或查找什么,因为查找错误没有给我任何帮助。


4

2 回答 2

3

我偶然发现了同样的问题,奇怪的是 UMAP 一夜之间就停止了对数据(相同的数据帧)的处理。无论如何,UMAP-learn [1,2] 似乎经常出现,我通过安装 pynndescent 来修复它:

pip install pynndescent

或者

conda install -c conda-forge pynndescent

我希望它有帮助:)

[1] https://github.com/lmcinnes/umap/issues/401
[2] https://github.com/lmcinnes/umap/issues/452

于 2020-06-29T20:51:20.700 回答
-2

我不熟悉您使用的库,因此这不是对这个特定问题的正确答案,而是关于如何处理此类错误的一般提示。

错误发生在这一行:

embedding = reducer.fit_transform(scaled_endpoints)

并抱怨向函数提供了错误类型的对象(列表而不是字节)。所以在那一行之前,放这个:

print(scaled_endpoints)
print(type(scaled_endpoints))

准确了解您将要提供的reducer.fit_transform()功能。然后转到该功能的文档。它期待什么样的输入,应该如何创建?你怎么能达到scaled_endpoints这个期望?

于 2020-06-29T03:47:36.310 回答