前文介绍了概率类模型的第一种评估指标:布里尔分数,本文介绍另外一种,对数损失,又叫对数似然或者交叉熵损失,它的定义是,对于一个给定的概率分类器,在预测概率为条件的情况下,真实概率发生的可能性的负对数。值越小,效果越好。

以下还是用前文的乳腺癌数据集,计算各种模型的对数损失。

代码示例

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 log_loss

print('loss gnb:', log_loss(y_test, prob_gnb))
print('loss lr:', log_loss(y_test, prob_lr))
print('loss svc:', log_loss(y_test, prob_svc))

# loss gnb: 0.7082332572488389
# loss lr: 0.10596180857071849
# loss svc: 0.16000605663068623

从损失值的大小判断:逻辑回归效果最好,SVM次之,贝叶斯效果最差,这和前文介绍布里尔分数顺序不太一致。因为逻辑回归和SVC都是以最优化为目的来求解模型,然后进行分类的算法。而朴素贝叶斯中,却没有最优化的过程。对数似然函数直接指向模型最优化的方向,甚至就是逻辑回归的损失函数本身,因此在逻辑回归和SVC上表现得更好。

在现实应用中,对数似然函数是概率类模型评估的黄金指标,往往是我们评估概率类模型的优先选择。

本文为 陈华 原创,欢迎转载,但请注明出处:http://edu.ichenhua.cn/read/300