sklearn 绘制多分类ROC曲线

妖狐艹你老母 2022-01-14 12:03 599阅读 0赞
  1. from rasa_nlu.model import Interpreter
  2. from sklearn.metrics import precision_score
  3. from sklearn.metrics import recall_score
  4. from sklearn import metrics
  5. from sklearn.preprocessing import OneHotEncoder
  6. import json
  7. import time
  8. import numpy as np
  9. import pandas as pd
  10. import matplotlib
  11. matplotlib.use('Agg')
  12. import os
  13. from matplotlib import pyplot as plt
  14. def get_path(root):
  15. paths = []
  16. if os.path.isdir(root):
  17. lists = os.listdir(root)
  18. for i in lists:
  19. paths.append(os.path.join(root,i))
  20. return paths
  21. root = '/app/split_data/test'
  22. paths = get_path(root)
  23. examples = []
  24. for i in paths:
  25. print(i)
  26. f = open(i,'r')
  27. data = json.load(f)
  28. examples.append(data['rasa_nlu_data']['common_examples'])
  29. f.close()
  30. interpreter2 = Interpreter.load("./models/nlu/ECS-nlu/models_shuffle/")
  31. result = []
  32. intent = []
  33. ranking = []
  34. for i in examples:
  35. for item in i:
  36. rasa_result= interpreter2.parse(item['text'])
  37. result.append(rasa_result['intent']['name'])
  38. intent.append(item['intent'])
  39. ranking.append(rasa_result['intent_ranking'])
  40. '''
  41. for k,v in ecs_test_data.items():
  42. rasa_res = interpreter2.parse(k)
  43. result.append(rasa_res['intent']['name'])
  44. intent.append(v)
  45. ranking.append(rasa_result['intent_ranking'])
  46. '''
  47. acc_score = precision_score(intent,result,average='weighted')
  48. print('accuracy score:{}'.format(acc_score))
  49. rec_score = recall_score(intent,result,average='weighted')
  50. print('recall score:{}'.format(rec_score))
  51. intent_lists = set(intent)
  52. raw = {}
  53. arrays = []
  54. for i in intent_lists:
  55. raw[i] = 0
  56. for j in ranking:
  57. tmp = raw.copy()
  58. for k in j:
  59. tmp[k['name']] = k['confidence']
  60. confs = list(tmp.values())
  61. arrays.append(confs)
  62. arrays = np.array(arrays)
  63. intent = np.array(intent).T
  64. label = pd.DataFrame(intent,columns = ['label'])
  65. unique = label.ix[:,'label'].unique()
  66. for j in range(len(unique)):
  67. label.ix[:,'label'] = label.ix[:,'label'].apply(lambda x:j if x == unique[j] else x)
  68. enc = OneHotEncoder()
  69. enc.fit(label)
  70. label_one_hot = enc.transform(label).toarray()
  71. print(metrics.roc_auc_score(label_one_hot,arrays,average='weighted'))

发表评论

表情:
评论列表 (有 0 条评论,599人围观)

还没有评论,来说两句吧...

相关阅读