首页 > 解决方案 > AttributeError:“str”对象没有属性“mean_validation_score”

问题描述

此错误发生在我的代码中:AttributeError: 'str' object has no attribute 'mean_validation_score'. 我能做些什么来解决它?

def report(grid_scores, n_top=3):
    top_scores = sorted(grid_scores, key=itemgetter(1), reverse=True)[:n_top]
    for i, score in enumerate(top_scores):
        print("Rank: {0}".format(i + 1))
        print("Mean validation score: {0:.3f} (std: {1:.3f})".format(
              score.mean_validation_score,
              np.std(score.cv_validation_scores)))
        print("Parameters: {0}".format(score.parameters))
        print("")
report(clf.cv_results_)

标签: pythonpython-3.x

解决方案


错误很明显:AttributeError: 'str' object has no attribute 'mean_validation_score'

您只使用一个地方mean_validation_score,而您使用它的对象是string- 不是认为的那样。string不支持您在其上使用的方法 - 因此出现错误:

    for i, score in enumerate(top_scores):                              # score from here
        print("Rank: {0}".format(i + 1))
        print("Mean validation score: {0:.3f} (std: {1:.3f})".format(
              score.mean_validation_score,                              # usage here
              np.std(score.cv_validation_scores)))

显然top_scores是字符串类型的可迭代 - 因此当您枚举它时

for i, score in enumerate(top_scores):

它产生索引i和字符串score

您可以通过调试代码来解决它:

top_scores = sorted(grid_scores, key=itemgetter(1), reverse=True)[:n_top]

看看为什么里面有字符串 - 修复它,让它包含有的对象.mean_validation_score并且错误消失。


有帮助:


推荐阅读