-np.log2(0.8) #0.3219280948873623
- 再次理解交叉熵计算公式中的叠加是类别的叠加。
- 上述数据集标签由 0-1 转化为 A、B,也被称为名义型变量的独热编码。
2. 多样本交叉熵计算
而对于多个数据集,整体交叉熵实际上是每条数据交叉熵的均值。例如上述数据集,整体交叉熵计算结果为:
(-np.log2(0.8)-np.log2(0.7)-np.log2(0.6)-np.log2(0.7)) / 4 #0.5220100086782713
据此,我们可以给出多样本交叉熵计算公式如下:
- 其中 m 为数据量,n 为类别数量。
3. 对比极大似然估计函数
-np.log(0.8)-np.log(0.7)-np.log(0.6)-np.log(0.7)
尽管具体数值计算结果有所差异,但基本流程都是类似的——取类别 1 的概率的对数运算结果进行累加再取负数。
因此在实际建模过程中,考虑采用极大似然估计构建损失函数,和采用交叉熵构建损失函数,效果是相同的,二者构建的损失函数都能很好的描绘模型预测结果和真实结果的差异程度。不过在机器学习领域,一般以交叉熵损失函数为主。
4. 二分类交叉熵损失函数
据此,我们也可最终推导二分类交叉熵损失函数计算公式,结合极大似然估计的计算公式和交叉熵的基本计算流程,二分类交叉熵损失函数为:
- 我们也可以定义一个函数来进行二分类交叉熵损失函数的计算:
def BCE(y, yhat): """ 二分类交叉熵损失函数 """ return(-(1/len(y))*np.sum(y*np.log2(yhat)+(1-y)*np.log2(1-yhat)))
- 简单进行验证
y = np.array([1, 0, 0, 1]).reshape(-1, 1) yhat = np.array([0.8, 0.3, 0.4, 0.7]).reshape(-1, 1) BCE(y, yhat) #0.5220100086782713
至此,我们就完成了完整的逻辑回归损失函数的构建。但正如此前所讨论的一样,对于逻辑回归的损失函数来说,尽管也是凸函数,但无法使用最小二乘法进行求解。