UMAP Error TypeError: требуется байтовый объект, а не `` список ''
Я пытаюсь запустить код, который использует 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 import train_test_split импортировать matplotlib.pyplot как plt импортировать seaborn как sns импортировать панд как pd импортировать umap.umap_ как umap # import umap из sklearn.preprocessing import StandardScaler из патчей импорта matplotlib #data = pd.read_csv('/ Пользователи /chrisweber/Documents/Walsh Lab/UMAP.csv') data = pd.read_csv('/ Пользователи / Элизабет / Рабочий стол /UMAPtest.csv') # Раскомментируйте тот или иной раздел ################################# РАЗДЕЛ 1 - UMAP ################################################################ редуктор = umap.UMAP() endpoints = data[['RR', 'na1', 'fa1', 'nt1', 'ft1', 'nt2', 'ft2']]. значения scaled_endpoints = StandardScaler().fit_transform(конечные точки) embedding = reducer.fit_transform(scaled_endpoints) plt.scatter ( встраивание [:, 0], встраивание [:, 1], c =[sns.color_palette()[x] для x в data.Identifier.map ({0: 0, 1: 1})]) plt.gca().set_aspect('равно', 'данные') plt.title ('Проекция UMAP по идентификатору', fontsize=24) синий = патчи.Patch(color='steelblue', label='0') оранжевый = патчи.Patch (color = 'orange', label = '1') plt.legend (handles=[синий, оранжевый]) ############################################### ############################################### #################### ################################# РАЗДЕЛ 2 - Парный график ########### ############################################### ## # sns.pairplot (данные, оттенок = 'Идентификатор') # plt.subplots_adjust(.05,.05,.95,.95) # plt.suptitle('Анализ конечной точки по идентификатору') ############################################### ############################################### #################### plt.show()
Это сообщение, которое я получаю, когда он запускается:
Отслеживание (последний вызов последний): Файл "C:\Users\Elizabeth\Desktop\UMAPs.py", строка 31, вembedding = 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 Файл "stringsource", строка 658, в View.MemoryView.memoryview_cwrapper Файл "stringsource", строка 349, в View.MemoryView.memoryview.__ cinit__ TypeError: требуется объект, похожий на байты, а не `` список '' '' Я не знаю, как исправить ошибку или что искать, поскольку поиск ошибки ничего мне не дает.
2 ответа
Я наткнулся на ту же проблему, странно то, что 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
Я не знаком с используемой вами библиотекой, поэтому это будет не правильный ответ на этот конкретный вопрос, а общий совет о том, как бороться с подобными ошибками.
Ошибка возникает в этой строке:
embedding = reducer.fit_transform(scaled_endpoints)
и жалуется, что функции был предоставлен объект неправильного типа (список, а не байты). Итак, перед этой строкой поместите это:
print(scaled_endpoints)
print(type(scaled_endpoints))
чтобы точно понять, что вы собираетесь предоставить reducer.fit_transform()
функция. Затем перейдите к документации по этой функции. Какого рода вводные данные ожидаются и как их следует создавать? Как ты можешь получитьscaled_endpoints
чтобы соответствовать этому ожиданию?