类型错误:传递给函数 .__format__ 的格式字符串不受支持

问题描述 投票:0回答:2

在使用jupyter笔记本时,我遇到了这个问题:

TypeError:unsupported format string passed to function .__format__

这是代码开始的地方:

def evaluate_preds(y_true, y_preds):
    """
    Performs Evaluation comp on y_true labels and y_preds labels on a classification
    """
    accuracy = accuracy_score(y_true,y_preds)
    precision = precision_score(y_true,y_preds)
    recall = recall_score(y_true,y_preds)
    f1 = f1_score(y_true,y_preds)
    metric_dict = {"accuracy": round(accuracy,2),
                  "precision": round(precision,2),
                  "recall": round(recall,2),
                  "f1": round(f1,2)}

    print(f"Accuracy :{ accuracy_score*100:.2f}%")
    print(f"Precision :{ precision_score:.2f}")
    print(f"Recall :{ recall_score:.2f}")
    print(f"F1 :{ f1_score:.2f}")

    return metric_dict

下面的代码正在 jupyter 笔记本中的不同单元上运行

from sklearn.ensemble import RandomForestClassifier

np.random.seed(42)

heart_disease_shuffled= heart_disease.sample(frac=1)

X= heart_disease_shuffled.drop("target",axis =1)
y = heart_disease_shuffled["target"]

train_split = round(0.7 * len(heart_disease_shuffled))
valid_split = round(train_split + 0.15 * len(heart_disease_shuffled))

X_train,y_train = X[:train_split], y[:train_split]
X_valid,y_valid = X[train_split:valid_split], y[train_split:valid_split]

X_test,y_test = X[valid_split:], y[:valid_split]

clf = RandomForestClassifier()
clf.fit(X_train,y_train)


# Make Baseline preds

y_preds = clf.predict(X_valid)

# Evaluate classifier on validation set

baseline_metrics = evaluate_preds(y_valid, y_preds) 
baseline_metrics

如何解决?

尝试更改参数和一堆其他内容,但所有这些都弹出一些错误,如上面列出的错误

python machine-learning scikit-learn deep-learning
2个回答
0
投票

您正在尝试打印函数而不是它们返回的值。例如,您分配

accuracy = accuracy_score(y_true,y_preds)

但是然后尝试格式化函数,而不是结果

f"Accuracy :{ accuracy_score*100:.2f}%"

相反,您应该使用计算值

f"Accuracy :{ accuracy*100:.2f}%"

但是您还创建了一个具有舍入值的字典。您可以将该字典与 f 字符串一起使用,或者使用

.format
方法

f"Accuracy :{ metric_dict['accuracy']:.2f}"
# -- or --
"Accuracy : {accuracy:.2f}".format(**metric_dict)

0
投票

这是更新/工作版本,

非常感谢所有提供帮助或提供任何帮助建议/提示的人。 :)

import pandas as pd
def evaluate_preds(y_true, y_preds):
"""
Performs Evaluation comp on y_true labels and y_preds labels on a classification
"""
accuracy = accuracy_score(y_true,y_preds)
precision = precision_score(y_true,y_preds)
recall = recall_score(y_true,y_preds)
f1 = f1_score(y_true,y_preds)
metric_dict = {"accuracy": round(accuracy,2),
                  "precision": round(precision,2),
                  "recall": round(recall,2),
                  "f1": round(f1,2)}

print(f"Accuracy :{ accuracy *100:.2f}%")
print(f"Precision :{ precision:.2f}")
print(f"Recall :{ recall:.2f}")
print(f"F1 :{ f1:.2f}")
return metric_dict


from sklearn.ensemble import RandomForestClassifier

np.random.seed(42)

heart_disease_shuffled= heart_disease.sample(frac=1)

X= heart_disease_shuffled.drop("target",axis =1)
y = heart_disease_shuffled["target"]

train_split = round(0.7 * len(heart_disease_shuffled))
valid_split = round(train_split + 0.15 * len(heart_disease_shuffled))

X_train,y_train = X[:train_split], y[:train_split]
X_valid,y_valid = X[train_split:valid_split], y[train_split:valid_split]

X_test,y_test = X[valid_split:], y[:valid_split]

clf = RandomForestClassifier()
clf.fit(X_train,y_train)

# Make Baseline preds
y_preds = clf.predict(X_valid)
# Evaluate classifier on validation set
baseline_metrics = evaluate_preds(y_valid, y_preds) 
baseline_metrics
 
© www.soinside.com 2019 - 2024. All rights reserved.