Ошибка морского первоисточника Python с Scatterplot и Pandas - PullRequest
2 голосов
/ 29 октября 2019

Я пытаюсь построить векторы с уменьшенным T-SNE с Seaborn. У меня есть следующий код:

import pandas as pd 
import numpy as np
import seaborn as sns
from sklearn.manifold import TSNE
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

tsne = TSNE(n_components=2, verbose=1, perplexity=40, n_iter=300)
tsne_results = tsne.fit_transform(final_data)

df_subset = pd.DataFrame(columns = ['tsne-2d-one', 'tsne-2d-two']) 
df_subset['tsne-2d-one'] = tsne_results[:,0]
df_subset['tsne-2d-two'] = tsne_results[:,1]

plt.figure(figsize=(16,10))

sns.scatterplot(
    x="tsne-2d-one", y="tsne-2d-two",
    hue="y",
    palette=sns.color_palette("hls", 10),
    data=df_subset,
    legend="full")

Как видно из приведенного выше кода, кажется, что для диаграммы рассеяния из библиотеки seaborn требуется ввод Panda.DataFrame, поэтому в основном я инициализирую его пустым таким образом

df_subset = pd.DataFrame(columns = ['tsne-2d-one', 'tsne-2d-two']) 

Затем я в основном присваиваю столбцы этого информационного кадра каждому измерению TSNE

df_subset['tsne-2d-one'] = tsne_results[:,0]
df_subset['tsne-2d-two'] = tsne_results[:,1]

Я могу напечатать эти значения без проблем.

Однако, когда я запускаю кодвот что я получаю:

File "balance-training.py", line 59, in <module>
    legend="full")
  File "/home/server/.local/lib/python3.6/site-packages/seaborn/relational.py", line 1335, in scatterplot
    alpha=alpha, x_jitter=x_jitter, y_jitter=y_jitter, legend=legend,
  File "/home/server/.local/lib/python3.6/site-packages/seaborn/relational.py", line 852, in __init__
    x, y, hue, size, style, units, data
  File "/home/server/.local/lib/python3.6/site-packages/seaborn/relational.py", line 142, in establish_variables
    raise ValueError(err)
ValueError: Could not interpret input 'y'

Что мне здесь не хватает?

1 Ответ

2 голосов
/ 29 октября 2019

Нет столбца y, поэтому вы можете удалить hue="y":

sns.scatterplot(
    x="tsne-2d-one", y="tsne-2d-two",
    palette=sns.color_palette("hls", 10),
    data=df_subset,
    legend="full")

Я думаю, что здесь возможно передать оба вектора в параметры x и y и опустить dataпараметр:

sns.scatterplot(
    x=tsne_results[:,0], y=tsne_results[:,1]
    palette=sns.color_palette("hls", 10),
    legend="full")

Образец :

tsne_results = np.array([[1,2],[4,5],[7,1]])
print (tsne_results)
[[1 2]
 [4 5]
 [7 1]]

sns.scatterplot(
    x=tsne_results[:,0], y=tsne_results[:,1],
    palette=sns.color_palette("hls", 10),
    legend="full")

g

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...