用最大似然估计求逻辑回归参数

本文介绍了最大似然估计的基本原理及应用过程,并详细解释了如何通过逻辑回归实现二值分类任务。逻辑回归虽然名字中有“回归”二字,但实际是一种分类方法,尤其适用于只有两个类别的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.最大似然估计

    选择一个(一组)参数使得实验结果具有最大概率。

A. 如果分布是离散型的,其分布律,是待估计的参数,这里我们假设为已知量,则:设X1, X2, ... , Xn 是来自于X的样本,X1,X2,...Xn的联合分布律为:

           (1)

     设x1,x2,...xn是X1,X2,..Xn的一个样本值,则可知X1,..Xn取x1,..,x2的概率,即事件{X1 = x1,...,Xn=xn}发生的概率为:

            (2)

     这里,因为样本值是已知的,所以(2)是的函数,称为样本的似然函数。

     最大似然估计:已知样本值x1,...xn,选取一组参数,使概率达到最大值,此时的为最大估计值。即取使得:

         

     与x1,...,xn有关,记为并称其为参数的极大似然估计值。

B.如果分布X是连续型,其概率密度的形式已知,为待估计参数,则事件X1,...Xn的联合密度为:

          (3)

     设x1,..xn为相应X1,...Xn的一个样本值,则随机点(X1,...,Xn)落在(x1,..xn)的领域内的概率近似为:

            (4)

       最大似然估计即为求值,使得(4)的概率最大。由于

               不随而变,故似然函数为:

                (5)

C. 求最大似然估计参数的步骤:

      (1) 写出似然函数:

                (6)

               这里,n为样本数量,似然函数表示n个样本(事件)同时发生的概率。

         (2) 对似然函数取对数:

                

          (3) 将对数似然函数对各参数求偏导数并令其为0,得到对数似然方程组。

          (4) 从方程组中解出各个参数。

D. 举例:

        设;为未知参数,x1,...xn为来自X的一个样本值。求的极大似然估计值。

       解:X的概率密度为:

             

           似然函数为:

            

            

            令  即:

             解得:   带入解得

二.逻辑回归

     逻辑回归不是回归,而是分类。是从线性回归中衍生出来的分类策略。当y值为只有两个值时(比如0,1),线性回归不能很好的拟合时,用逻辑回归来对其进行二值分类。

     这里逻辑函数(S型函数)为:

       (7)

     于是,可得估计函数:

         (8)

      这里,我们的目的是求出一组值,使得这组可以很好的模拟出训练样本的类值。

      由于二值分类很像二项分布,我们把单一样本的类值假设为发生概率,则:

            (9)

       可以写成概率一般式:

              (10)

       由最大似然估计原理,我们可以通过m个训练样本值,来估计出值,使得似然函数值最大:

          (11)

        这里,为m个训练样本同时发生的概率。对求log,得:

            

           (12)

         我们用随机梯度上升法,求使最大化时的值,迭代函数为:

              (13)

         这里对每个分量进行求导,得:

           (14)

         于是,随机梯度上升法迭代算法为:

         repeat until convergence{

               for i = 1 to m{

                              (15)

               }

         }

思考:

      我们求最大似然函数参数的立足点是步骤C,即求出每个参数方向上的偏导数,并让偏导数为0,最后求解此方程组。由于中参数数量的不确定,考虑到可能参数数量很大,此时直接求解方程组的解变的很困难。于是,我们用随机梯度上升法,求解方程组的值。

备注:

        (a) 公式(14)的化简基于g(z)导函数,如下:

                 (16)

       (b) 下图为逻辑函数g(z)的分布图:

           

### 使用最大似然估计求解逻辑回归模型参数 #### 方法概述 逻辑回归作为一种分类算法,尽管名称中有“回归”,但实际上用于处理二元分类问题。对于给定的数据集 \((X, y)\),其中 \(X\) 是特征矩阵而 \(y\) 表示标签向量(取值为0或1),目标是找到一组最优权重 \(\theta\) 来最大化数据发生的概率。 为了达到这一目的,可以采用最大似然估计法来寻找使训练集中所有样例被正确预测的概率最大的那组参数\(^{[2]}\)。具体来说,就是通过构建似然函数并优化该函数以获得最佳的参数配置。 #### 数学推导过程 设有一个含有\(m\)个样本的数据集,则第\(i\)个观测对应的条件概率可表示如下: \[ P(y^{(i)}|x^{(i)}, w)=h_w(x)^{(i)y^{(i)}} (1-h_w(x))^{(1-y^{(i)})} \] 这里, - \( h_w(x) = g(w^T x) = \frac {1}{1+\exp(-w^Tx)} \), - 函数\(g(z)\)代表Sigmoid激活函数, - 参数\(w=[w_0;...;w_n]\), 其中\(n\)是指输入变量的数量加上偏置项. 因此整个数据集上的联合分布即为各个独立事件发生可能性之积: \[ L(w)=P(Y|X,w)=\prod_{i=1}^{m}[h_w(x)]^{y_i}(1-h_w(x))^{(1-y_i)} \]^{\([3]}\) 然而直接操作连乘形式不方便计算梯度下降更新规则,所以通常会转而去考虑其自然对数版本——也就是所谓的对数似然函数(log likelihood function): \[ l(w)=log(L(w))=\sum _{{i=1}}^{m}\left[y^{(i)}\log(h_w(x))+({1}-y^{(i)})\log ({1}-{h}_w(x))\right] \]^{\([3]}\) 最终的目标变成了最小化负对数似然作为代价/损失函数的形式来进行最优化求解。 #### 实现代码展示 下面给出Python环境下基于`scipy.optimize.minimize()`库实现的最大似然估计求解逻辑回归参数的例子: ```python import numpy as np from scipy import optimize def sigmoid(z): """Compute the sigmoid of z.""" return 1 / (1 + np.exp(-z)) def log_likelihood(params, X, Y): """ Compute negative log-likelihood for logistic regression. Args: params : array_like The parameters to be optimized over. X : ndarray Feature matrix with shape (num_samples, num_features). Y : ndarray Target vector containing binary labels {0, 1}. Returns: float representing cost associated with current set of weights. """ m = len(Y) predictions = sigmoid(np.dot(X, params)) epsilon = 1e-5 # Avoid taking logarithms of zero by adding small constant value 'epsilon' ll = (-Y * np.log(predictions + epsilon) - (1-Y)*np.log(1-predictions + epsilon)).mean() return ll if __name__ == "__main__": # Example usage on synthetic dataset n_samples = 100 n_features = 2 rng = np.random.RandomState(seed=42) X_train = rng.randn(n_samples, n_features) true_weights = [-1., .75] noise_level = 0.1*rng.randn(n_samples,) p_true = sigmoid(X_train @ true_weights + noise_level) y_train = ((p_true >= 0.5).astype(int)) initial_guess = np.zeros(shape=(n_features,)) result = optimize.minimize( fun=log_likelihood, x0=initial_guess, args=(X_train,y_train), method='BFGS', options={'disp': True} ) estimated_params = result.x print(f"Estimated Parameters: {estimated_params}") ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值