对数似然函数及应用(似然函数及对数似然函数)

对数似然函数是概率论及数理统计学中常用的一种函数,可用于模型拟合与参数估计,分类问题,以及机器学习中的损失函数等方面。下面将对对数似然函数的概念、性质及其在应用中的具体用法做详细阐述。

一、对数似然函数的概念

在概率论及数理统计学中,对数似然函数是用于参数估计的一个重要工具,常用于损失函数的设计。假设我们观测到一组独立同分布的随机变量 ${displaystyle {x_{1},x_{2},dots ,x_{n}}}$,其概率密度函数为 ${displaystyle f(x;theta )}$,其中 ${displaystyle theta }$ 是未知参数的向量。对于数据 ${displaystyle (x_{1},x_{2},dots ,x_{n})}$,其似然函数为:

$L(theta )=f(x_{1};theta )cdot f(x_{2};theta )cdots f(x_{n};theta )$

对其取对数可得到对数似然函数:

$ln L(theta )=ln f(x_{1};theta )+ln f(x_{2};theta )+cdots +ln f(x_{n};theta )$

对于已给定的数据,对数似然函数只是用来描述数据可能由哪个参数生成的,因此可以用来作为参数的选取依据。当对数似然函数越大,则相应的参数估计越优。在实际应用中,通常对对数似然函数取负数,作为损失函数来对模型进行训练和优化。

二、对数似然函数的性质

1. 取对数可以消掉乘积

当对数似然函数中存在多元乘积时,取对数可以将其变成多元相加的形式,方便计算和分析。例如:

$L(theta )=f(x_{1};theta )cdot f(x_{2};theta )cdots f(x_{n};theta )$

对其取对数:

$ln L(theta )=ln f(x_{1};theta )+ln f(x_{2};theta )+cdots +ln f(x_{n};theta )$

2. 对数似然函数具有不变性

如果我们用一些变换将参数 $theta$ 改变,对数似然函数却不会改变,这被称为对数似然函数具有不变性。例如,若 $g(theta)$ 是已知的函数,则取代参数 $theta$ 的对数似然函数为:

$ln L(g(theta ))=ln f(x_{1};g(theta ))+ln f(x_{2};g(theta ))+cdots +ln f(x_{n};g(theta ))$

可以看出,当 $g(theta)$ 改变时,对数似然函数不会随之改变。

三、对数似然函数的应用

1. 模型拟合与参数估计

对数似然函数可用于模型拟合和参数估计。以线性回归为例,对数似然函数用来描述数据可能由哪个参数的线性函数生成。最大化对数似然函数即得到最优参数的估计。

import numpy as np
from scipy.stats import norm

#生成数据
np.random.seed(0)
x = np.linspace(-5, 5, num=100)
y = 2 * x + 1 + np.random.normal(0, 1, size=100)

#最大化对数似然函数以拟合线性回归参数
def log_likelihood(param):
    return np.sum(np.log(norm.pdf(y, loc=param[1]+param[0]*x, scale=1)))

from scipy.optimize import minimize
res = minimize(log_likelihood, [1, 0])
print(res.x)  # 输出结果为近似于 [2, 1]

2. 分类问题

对数似然函数可用于分类问题,尤其是二分类问题。对于给定的数据样本,对数似然函数可以描述每个样本属于不同类别的可能性,进而可用于模型拟合和分类预测。

import numpy as np
from scipy.stats import logistic

#生成数据
np.random.seed(0)
x1 = np.random.normal(1, 1, size=100)
x2 = np.random.normal(5, 1, size=100)
x = np.concatenate([x1, x2])
y = np.concatenate([np.zeros_like(x1), np.ones_like(x2)])

#最大化对数似然函数以拟合逻辑回归参数
def log_likelihood(param):
    return np.sum(y*np.log(logistic.cdf(param[0]*x+param[1])) + (1-y)*np.log(1-logistic.cdf(param[0]*x+param[1])))

from scipy.optimize import minimize
res = minimize(log_likelihood, [1, 0])
print(res.x)  # 输出结果为近似于 [5, -4]

3. 损失函数

在机器学习中,对数似然函数作为一个常见的损失函数用于分类问题的模型中。当模型需要输出样本属于不同类别的概率时,我们通常可以用交叉熵损失函数。交叉熵等价于在对数似然函数上乘以常数负一,即可得到对数似然损失函数。

import tensorflow as tf

#定义模型
model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

#编译模型
model.compile(optimizer='adam', loss='binary_crossentropy')

#训练模型
model.fit(x, y, epochs=10)

#评估模型
model.evaluate(x, y)

结论

对数似然函数是一种常见的函数形式,可以用于模型拟合、参数估计、分类问题和损失函数等方面。其具有取对数可消掉乘积的性质和不变性,通常用于构建和优化机器学习模型。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平