混淆矩阵和精准率可以帮我们了解贝叶斯的分类结果,然而,选择贝叶斯分类,大多数时候并不是为了单纯追求效果,而是希望看到预测的相关概率。所以对于概率类模型,还要了解两种独有的评估指标,本文先介绍第一种:布里尔分数(Brier Score)。
Brier Score = ∑(pi-oi)/N
pi为概率,oi是样本对应的真实结果(0或1),布里尔分数范围[0,1],分数越接近0越好,反之越高预测结果越差,校准程度越差。以下以乳腺癌数据集为例,用布里尔分数评估逻辑回归、SVM、朴素贝叶斯的效果。
代码示例
1、导入并拆分数据集
from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split ds = load_breast_cancer() x, y = ds.data, ds.target x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=0)
2、训练并计算概率
from sklearn.naive_bayes import GaussianNB from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC # 高斯贝叶斯 gnb = GaussianNB() gnb.fit(x_train, y_train) prob_gnb = gnb.predict_proba(x_test) # 逻辑回归 lr = LogisticRegression() lr.fit(x_train, y_train) prob_lr = lr.predict_proba(x_test) # SVM svc = SVC(probability=True) svc.fit(x_train, y_train) prob_svc = svc.predict_proba(x_test)
3、计算布里尔分数
from sklearn.metrics import brier_score_loss score_gnb = brier_score_loss(y_test, prob_gnb[:, 1], pos_label=1) print('score gnb:', score_gnb) # score gnb: 0.075 score_lr = brier_score_loss(y_test, prob_lr[:, 1], pos_label=1) print('score lr:', score_lr) # score lr: 0.031 score_svc = brier_score_loss(y_test, prob_svc[:, 1], pos_label=1) print('score svc:', score_svc) # score svc: 0.044
从分数值大小判断:逻辑回归效果最好,贝叶斯次之,SVM效果最差。
本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/299