Как разрешить y_true_val = list (y_true.values ​​()) AttributeError: объект 'list' не имеет атрибутов 'values'? - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь написать код для набора данных клуба карате Захари. Теперь я застрял в строке

y_true_val = list(y_true.values())

Мой код:

nmi_results = []
ars_results = []

y_true_val = list(y_true.values())

# Append the results into lists
for y_pred in results:

    nmi_results.append(normalized_mutual_info_score(y_true_val, y_pred))
    ars_results.append(adjusted_rand_score(y_true_val, y_pred))

fig, (ax1, ax2, ax3) = plt.subplots(1, 3, sharey=True, figsize=(16, 5))

x = np.arange(len(y_pred))
avg = [sum(x) / 2 for x in zip(nmi_results, ars_results)]

xlabels = list(algorithms.keys())

sns.barplot(x, nmi_results, palette='Blues', ax=ax1)
sns.barplot(x, ars_results, palette='Reds', ax=ax2)
sns.barplot(x, avg, palette='Greens', ax=ax3)

ax1.set_ylabel('NMI Score')
ax2.set_ylabel('ARS Score')
ax3.set_ylabel('Average Score')

# # Add the xlabels to the chart
ax1.set_xticklabels(xlabels)
ax2.set_xticklabels(xlabels)
ax3.set_xticklabels(xlabels)

# Add the actual value on top of each bar
for i, v in enumerate(zip(nmi_results, ars_results, avg)):
    ax1.text(i - 0.1, v[0] + 0.01, str(round(v[0], 2)))
    ax2.text(i - 0.1, v[1] + 0.01, str(round(v[1], 2)))
    ax3.text(i - 0.1, v[2] + 0.01, str(round(v[2], 2)))

# Show the final plot
plt.show()

Вывод:

y_true_val = list(y_true.values())

AttributeError: 'list' object has no attribute 'values'

1 Ответ

2 голосов
/ 28 мая 2020

Надеюсь, это поможет!

Сначала давайте узнаем об ошибке:

  • Как уже упоминалось в комментариях, attribute ошибка возникает, когда вы попробуйте получить доступ к методу, который не определен в методах вызова этого объекта.

  • Например, в строковых объектах py у нас есть .lower() для генерации новой строки в нижнем регистре (From * От 1015 * до abc). Если вы попытаетесь получить доступ к этому .lower() для целочисленного объекта, вы получите ошибку атрибута.

Как исправить эту ошибку?

  1. Используйте python встроенный тип оператор, чтобы определить, какой тип данных / объект у вас есть. Если это список, вам не нужно делать никаких .values()

    print(type(y_true))
    
  2. Используйте python встроенный dir оператор, чтобы узнать, какие операторы доступны для этого объекта. Если вы видите здесь оператор values, только затем примените операцию .values().

    print(dir(y_true))
    
  3. По-прежнему не уверен или столкнулся с другой ошибкой, попробуйте print(y_true), чтобы увидеть что у вас есть.

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