我想在python中实现F-measure度量,以便为预测值处理多类。
实际上,预测值y_pred是多类的,校正值是一类。
示例:
y_pred = [[11,12],12,12,[11,12],...]
y_true = [11,12,11,12,...]
在这种情况下,如何计算F-measure?以及如何实施它?
我测试了以下代码(在https://stats.stackexchange.com/questions/21551/how-to-compute-precision-recall-for-multiclass-multilabel-classification中创建),包含两个文件file1.csv(包括所有预测类,每行可以包含多个类)和file2.csv(包括所有更正的值,每行只包含一个类):
import pandas as pd
def precision(y_true, y_pred):
i = set(y_true).intersection(y_pred)
len1 = len(y_pred)
if len1 == 0:
return 0
else:
return len(i) / len1
def recall(y_true, y_pred):
i = set(y_true).intersection(y_pred)
return len(i) / len(y_true)
def f1(y_true, y_pred):
p = precision(y_true, y_pred)
r = recall(y_true, y_pred)
if p + r == 0:
return 0
else:
return 2 * (p * r) / (p + r)
if __name__ == '__main__':
y_pred_df = pd.read_csv('file1.csv', skipinitialspace=True, sep='\t', header=None)
y_pred = y_pred_df.values
y_true_df = pd.read_csv('file2.csv', header=None)
y_true = y_true_df.values
print(f1(y_true[:,0], y_pred[:,0]))
上述代码不起作用。
我如何在我的案例中实施F-measure?
非常感谢,
答案 0 :(得分:1)
为什么不使用已经实施的f1-score?如果您希望获得与scikit-learn兼容的指标,则可能需要使用make_scorer - 函数。另外,请查看文档中的model-evaluation部分。