这个专栏主要是用来分享一下我在 机器学习中的 学习笔记及一些感悟 也希望对你的学习有帮助哦 感兴趣的小伙伴欢迎 私信或者评论区留言 这一篇就更新一下《 白话机器学习中的数学——对数似然函数》

目录

一、什么是对数似然函数

二、算法分析

三、总结 

一、什么是对数似然函数

对数似然是Minitab 为了确定估计系数(β) 的最优值而最大化的表达式。 由于对数似然是样本数量的函数 因此它们的值不能单独作为拟合值的指数使用 但可以用来比较不同系数的拟合值。 由于您要最大化对数似然 因此值越大越好。

二、算法分析

之前我们已经接触过似然函数的概念 我们认为似然函数 L(θ) 中 使其值最大的参数θ能够最近似地说明训练数据。和随机梯度下降法一样 我们接下来要做的就是对似然函数进行微分 求出参数 θ。不过直接对似然函数进行微分有点困难 在此之前要把函数变形。联合概率中的概率都是 1 以下的数 所以像联合概率这种概率乘法的值会越来越小。如果值太小 编程时会出现精度问题。并且与加法相比 乘法的计算量要大得多。

想要解决这些问题 只要取似然函数的对数就好了。像这样在等式两边加上 log 即可

 log 是单调递增函数。log 函数的图形如下所示

图形一直向右上方延伸。单调递增函数是在 x1 x2 时 f(x1) f(x2) 的函数 f(x)。log(x)的图形一直向右上方延伸 而且在 x1 x2时 log(x1) log(x2)也成立。

我们现在考察的似然函数也是在 L(θ1) L(θ2) 时 有logL(θ1) logL(θ2) 成立。也就是说 使 L(θ) 最大化等价于使logL(θ) 最大化。我们把对数似然函数变形看看

 每一行的变形分别利用了下面这些特性 好好理解一下

第 2 行是 log(ab) log a log b第 3 行是 log ab b log a第 4 行是 P(y(i) 0|x(i) ) 1 − P(y(i) 1|x(i) )

前两个是对数函数的特性 下面对第 4 行进行解释 现在我们考虑的只有 y 1 和 y 0 两种情况 所以应有 P(y(i) 0|x(i) ) P(y(i) 1|x(i) ) 1

下面要做的就是就是进行偏分求未知量。前面讲了很多 总结一下就是逻辑回归将这个对数似然函数用作 目标函数。

 接下来 对各个参数 θj 求微分就行了

 和回归的时候是一样的 我们把似然函数也换成这样的复合函数 然后依次求微分。

这个是 u 对 v 微分 log(v) 的微分是 1/v。对 log(1 − v) 微分时 要像这样通过复合函数来求。还 要注意 这样做最后的表达式前面会有个负号。

 所以 微分结果是这样的

 接下来是 v 对 θj 的微分

这个看上去有点麻烦 不过其实我们已经知道了 sigmoid 函数的 微分是这样的 所以用这个应该就可以计算了。

现在 fθ(x)本身就是 sigmoid 函数 所以这个微分表达式可以直接使用。设 z θTx 然后再一次使用复合函数的微分会比较好。

 

v 对 z 微分的部分也就是 sigmoid函数的微分。

 z 对 θj 的微分就简单了。

 接下来把结果相乘就好了

 我们就代入各个结果 然后通过展开、约分 使表达式 变得更简洁。

接下来要做的就是从这个表达式导出参数更新表达式。不过现在是以最大化为目标 所以必须按照与最小化时相反的方向移动参数哦。也就是说 最小化时要按照与微分结果的符号相反的 方向移动 而最大化时要与微分结果的符号同向移动。

 为了与回归时的符号保持一致 也可以将表达式调整为下面这样。注意 η 之前的符号和∑中的符号反转了。这就是我们最终求得的结果表达式

三、总结 

通过上面的推导 我们学习了最大似然函数 这与我们之前接触的最小二乘法不同 最小二乘法以误差作为评判标准 误差越小越好 而最大似然函数以概率作为评判标准 概率越大越好。在计算概率时 我们求了一次对数log计算 避免了连乘概率越来越小 受计算机计算进度影响也越来越大的问题。求得表达式之后的求微分也和我们之前讲的相似 只要采用连续偏导就可以了。计算过程挺复杂 不过最后的结果还挺简单的


通过这一篇博客,带你详细理解最大似然函数!通过博文的推导,我们学习了最大似然函数,这与我们之前接触的最小二乘法不同,最小二乘法以误差作为评判标准,误差越小越好,而最大似然函数以概率作为评判标准,概率越大越好。在计算概率时,我们求了一次对数log计算,避免了连乘概率越来越小,受计算机计算进度影响也越来越大的问题。求得表达式之后的求微分也和我们之前讲的相似,只要采用连续偏导就可以了。计算过程挺复杂,不过最后的结果还挺简单的! 复制链接
对数似然函数在Python中可以通过使用numpy库中的log函数来计算。对数似然函数通常用于估计参数的最大似然估计。以下是使用Python计算对数似然函数的示例代码:```pythonimport numpy as np# 定义似然函数def likelihood_function(parameters): # 在这里编写似然函数的计算过程 # 返回的结果是似然函数的值 return likelihood_value# 对数似然函数def log_likelihood_function(parameters): # 调用似然函数计算似然函数的值 likelihood_value = likelihood_function(parameters) # 对似然函数取对数 log_likelihood_value = np.log(likelihood_value) return log_likelihood_value# 使用示例parameters = [1, 2, 3 # 假设的参数值log_likelihood = log_likelihood_function(parameters)```在上述代码中,首先定义了一个似然函数likelihood_function,用于计算似然函数的值。然后定义了一个log_likelihood_function函数,该函数调用了likelihood_function函数计算似然函数的值,并对其取对数。最后,可以通过传入假设的参数值调用log_likelihood_function函数来计算对数似然函数的值。 span >
C++数据结构与算法 哈希表 雪碧有白泡泡: 非常喜欢这篇博客!博主的写作风格简洁明了,让人一目了然。文章内容丰富,涵盖了很多实用的知识点,对我来说非常有帮助。尤其是博主在文章中提供了很多实际操作的步骤和技巧,让我能够更好地应用所学的知识。同时,博主的配图也很精美,更加生动地展示了文章中的内容。总之,非常感谢博主的分享,期待博主能够继续输出这样优质的好文。


2023年度总结 忙忙碌碌,终有归章 漫走云雾: 这篇文章犹如一道智慧的佳肴,令人回味无穷。作者的笔触既有深度又富有感染力,将复杂的概念阐述得清晰明了。文章内容丰富,见解独到,让我受益匪浅。尤其是那些生动的实例和深入的剖析,使我深受启发。同时,作者的行文流畅,逻辑严密,让我为之赞叹。再次感谢作者的分享,期待更多精彩之作。


抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

更多文章请关注《万象专栏》