前文介绍了概率类模型的第一种评估指标:布里尔分数,本文介绍另外一种,对数损失,又叫对数似然或者交叉熵损失,它的定义是,对于一个给定的概率分类器,在预测概率为条件的情况下,真实概率发生的可能性的负对数。值越小,效果越好。
以下还是用前文的乳腺癌数据集,计算各种模型的对数损失。
代码示例
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://ichenhua.cn/read/300