import pandas as pd
from sklearn import metrics
# ModelEvolution
class ModelEvolution(object):
def __init__(self):
pass
@staticmethod
def report(test_y, score, pred_y): # test_y 原始标签, score 模型输出概率值, pred_y 预测值
if len(test_y) != len(score):
print("The Lengths of test set and predicted set are not match!")
exit(-1)
measureNames, measureValues = [], [] # measureNames 评价指标的名称, measureValues 对应的值
indicators = pd.DataFrame()
accu = ModelEvolution.accuracy(test_y, score)
measureNames.append("Accuracy:")
measureValues.append(str(accu))
prec = ModelEvolution.precision(test_y, score)
measureNames.append('Precision:')
measureValues.append(str(prec))
reca = ModelEvolution.recall(test_y, score)
measureNames.append('Recall:')
measureValues.append(str(reca))
f1 = ModelEvolution.F1(test_y, score)
measureNames.append('F1:')
measureValues.append(str(f1))
ap = ModelEvolution.AP(test_y, pred_y)
measureNames.append('AP:')
measureValues.append(str(ap))
auc = ModelEvolution.AUC(test_y, pred_y)
measureNames.append('AUC:')
measureValues.append(str(auc))
cmat = ModelEvolution.CMatrix(test_y,score)
measureNames.append('ConfusionMatrix:')
measureValues.append(str(cmat))
indicators['measureNames'] = measureNames
indicators['measureValues'] = measureValues
return indicators # 返回评估值
@staticmethod
def accuracy(test_y, score): # 准确率
return metrics.accuracy_score(test_y, score)
@staticmethod
def precision(test_y, score): # 精确率
return metrics.precision_score(test_y, score, average=None)
@staticmethod
def recall(test_y, score): # 召回率
return metrics.recall_score(test_y, score, average=None)
@staticmethod
def F1(test_y, score): # F1
return metrics.f1_score(test_y, score, average=None)
@staticmethod
def AP(test_y, pred_y): # 平均精确率
return metrics.average_precision_score(test_y, pred_y)
@staticmethod
def AUC(test_y, pred_y): # AUC
return metrics.roc_auc_score(test_y, pred_y)
@staticmethod
def CMatrix(test_y, score): # 混淆矩阵
return metrics.confusion_matrix(test_y, score)
if __name__ == '__main__':
pass
# ModelEvolution.report()
未完成,稍后继续
声明: 总结学习,有问题或不当之处,可以批评指正哦,谢谢。