飞道的博客

分类评价指标

454人阅读  评论(0)

不均衡数据

很多时候,不同类别的分类代价并不相等,这就是非均衡分类问题。如果在两个类别中,一个类别的出现次数比另一个多很多,那么错误类型将发挥重要作用。例如。我们一共有100个病人,其中99人是健康的(阴性、反类),1人是患癌症的(阳性、正类),那么这种数据集就是不平衡数据集(imbalanced dataset)或者具有不平衡类别的数据集(dataset with imbalanced classes)。在实际当中,不平衡数据才是常态。在这个数据集中,我们即使预测得到99%的分类精度,也不代表我们模型的泛化性能就好。有一种可能·就是,我们把99个健康的预测正确了,而1个患病的没有预测正确。

混淆矩阵

 

真正例(TP):true positive,将正类中正确分类的样本。

真反例(TN):true negative,将反类中正确分类的样本。

假正例(FP):false positive,反类预测为正类的样本。

假反例(FN):false negative,正类预测为反类的样本。

Accuracy

模型的精度,即模型预测正确的个数/样本的总个数

准确率 

正确率,阳性预测值,在模型预测为正类的样本中,真正的正样本所占的比例

 

召回率

度量的是正类样本中有多少被预测为正类

Recall越高,说明有更多的正类样本被模型预测正确,模型的效果越好。

f-分数

将准确率和召回率进行汇总的一种方法是f-分数(f-score)f-度量(f-measure),它是准确率与召回率的调和平均

 由于同时考虑了准确率和召回率,所以它对于不平衡的二分类数据集来说是一种比精度更好的度量。

ROC曲线

TPR是学习器分类正确的正实例占所有样本正实例的比例

 

FPR是指学习器分类正确占所有样本反例的比例

 ROC曲线x轴是TPR,表示的是正确率,y轴是FPR,表示的是假阳。


  
  1. from sklearn.svm import SVC
  2. from sklearn.metrics import roc_curve
  3. from sklearn.datasets import make_blobs
  4. from sklearn. model_selection import train_test_split
  5. import matplotlib.pyplot as plt
  6. # make_blobs函数,生成一个二分类的数据不平衡数据集
  7. X, y = make_blobs(n_samples=( 4000, 500), cluster_std=[ 7, 2], random_state= 0)
  8. X_train, X_test, y_train, y_test = train_test_split(X, y, random_state= 0)
  9. clf = SVC(gamma= 0.05).fit(X_train, y_train)
  10. fpr, tpr, thresholds = roc_curve(y_test, clf.decision_function(X_test))
  11. plt.plot(fpr, tpr, label= 'ROC')
  12. plt.xlabel( 'FPR')
  13. plt.ylabel( 'TPR')
  14. plt.show()


  
  1. from sklearn.svm import SVC
  2. from sklearn.metrics import roc_curve,roc_auc_score
  3. from sklearn.datasets import make_blobs
  4. from sklearn. model_selection import train_test_split
  5. import matplotlib.pyplot as plt
  6. # make_blobs函数,生成一个二分类的数据不平衡数据集
  7. X, y = make_blobs(n_samples=( 4000, 500), cluster_std=[ 7, 2], random_state= 0)
  8. X_train, X_test, y_train, y_test = train_test_split(X, y, random_state= 0)
  9. clf = SVC(gamma= 0.05).fit(X_train, y_train)
  10. # auc = roc_auc_score(y_test,clf.predict_proba(X_test)[:,1])
  11. auc = roc_auc_score(y_test,clf.decision_function(X_test))
  12. fpr,tpr, thresholds = roc_curve(y_test,clf.decision_function(X_test))
  13. plt.plot(fpr,tpr,color= 'darkorange',label= 'ROC curve (area = %0.2f)' % auc)
  14. plt.plot([ 0, 1], [ 0, 1], color= 'navy', lw= 2, linestyle= '--')
  15. plt.xlim([ 0.0, 1.0])
  16. plt.ylim([ 0.0, 1.05])
  17. plt.xlabel( 'False Positive Rate')
  18. plt.ylabel( 'True Positive Rate')
  19. plt.title( 'Receiver operating characteristic example')
  20. plt.legend(loc= "lower right")
  21. plt.savefig( 'suhan.jpg',dpi= 800)
  22. plt.show()

 

 

参考文献:

5分钟带你学懂ROC曲线_最强理发师托尼的博客-CSDN博客_roc曲线


转载:https://blog.csdn.net/qq_40107571/article/details/128257324
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场