【问题标题】:How to resolve y_true_val = list(y_true.values()) AttributeError: 'list' object has no attribute 'values'?如何解决 y_true_val = list(y_true.values()) AttributeError: 'list' object has no attribute 'values'?
【发布时间】:2020-09-15 09:13:58
【问题描述】:

我正在尝试为 Zachary 空手道俱乐部数据集编写代码。现在我被困在这条线上了

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'

【问题讨论】:

  • 您的y_true 似乎已经是一个列表。
  • 请将此减少并增强为预期的MRE。显示中间结果与预期结果的偏差。具体来说:(1)您发布的代码在第三个活动行失败,因为y_true 未定义; (2) 你没有提供期望值trace:什么是y_true在失败点,它的值在哪里偏离了你的期望?
  • 那我现在该怎么办?

标签: python list data-mining social-networking listobject


【解决方案1】:

希望这会有所帮助!

首先让我们了解一下错误:

  • 如 cmets attribute 中所述,当您尝试访问未在该对象的调用方法中定义的方法时会发生错误。

  • 例如,在 py 字符串对象中,.lower() 可用于生成新的小写字符串(从ABCabc)。如果您尝试访问此 .lower() 以获得整数对象,您将收到属性错误。

如何解决此错误?

  1. 使用 python 内置的 type 运算符来确定您拥有什么样的数据类型/对象。如果它是一个列表,那么你不必做任何.values()

    print(type(y_true))
    
  2. 使用 python 内置的 dir 运算符来了解该对象可用的运算符。如果您在此处看到 values 运算符,则仅应用 .values() 运算符。

    print(dir(y_true))
    
  3. 仍然不确定,或者遇到其他错误尝试print(y_true) 看看你有什么。

【讨论】:

    猜你喜欢
    • 2020-11-02
    • 2022-01-10
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2021-04-06
    • 2022-12-04
    • 2022-11-11
    相关资源
    最近更新 更多