广义线性模型(Generalized Linear Model)——机器学习

零、前言

对于条件分布(y|x;θ),对于线性回归模型有,而对分类问题有。其实这些分布均是广义线性模型(GLM)的特殊情况。

我们通过定义广义线性模型,可以据此求出拟合函数h(x)

 

一、指数分布族(Exponential Family)

其定义如下

其中,η称为自然参数(natural parameter),T(y)称为充分统计量(sufficient statistic)(通常T(y)=y)。当a、b、T都确定了,就定义了以η为参数的指数分布族。

下面以伯努利分布与正态分布为例子,从指数分布族推导出它们。

1.1 Bernoulli分布

伯努利分布可写作:

对比指数分布族的定义,可知,同时也有:

注意,这时我们可以得到,即sigmoid函数的表达式,其意义后篇将说明。

1.2 Gaussian分布

实际上,σ^2的选取不影响各函数与参数的确定,这里不再证明,为了简化,我们令σ^2=1,于是有

根据指数分布族的定义,我们得到

实际上,指数分布、泊松分布、伽马分布、狄利赫里分布等很多分布也属于指数分布族,这里不再叙述。

 

二、GLM模型的建立

2.0 GLM的假设

对于回归或是分类问题,我们的目标是若其分布属于指数分布族的某种分布,那么根据这求出拟合函数h。具体假设如下:

1.

2.拟合函数h为条件概率期望关于特征x的函数,即

3.自然参数满足

其中假设3对η的线性假设,就是GLM中线性的由来。

2.1 普通的最小二乘

在线性回归模型中,最小二乘是最大似然,其中y|x服从高斯分布。

那么在GLM,若假设对给定x的y服从高斯分布,根据前文的证明,有μ=η,又根据线性假设η=θTx,所以μ=θTx=E(y|x)=h(x),所以得到h是线性回归

2.2 Logistic回归

对于二分问题,根据前文所述,有,根据线性假设,有φ=hθ(x),所以在二分问题中,h为logistic回归/sigmoid分布

2.3 Softmax回归

由二分问题演化,现在考虑k分问题,即y是离散的且

分类问题要对每个类别有一个判决概率φi。注意到如果对与k个分类都有对应的概率的话,会出现冗余。因为如果知道k-1个概率的话,第k个可以从其补集求出。因此,我们定义k-1个概率,,且有,那么有,因此令

我们队T(y)的定义如下

为一k-1维向量。

那么多项式分布可表示如下

所以多项式分布也属于指数分布族,且有

,那么有

所以得到,将其带入到φi中有

上式将η映射到φi,此函数称为softmax函数

又根据线性假设,对于每个η有,同时令ηk=0,对求和式没有影响,那么有

综上所述,得到的预测函数h为:

这是对于前k-1个概率,那么φk可用补集的方法求出。

最后是对softmax回归的参数最优化,对其输入m个训练样本的对数似然函数易得如下

 

对此最大化可用牛顿法或梯度上升法等

### Python 中关于机器学习广义线性模型的相关知识 #### 什么是广义线性模型广义线性模型Generalized Linear Model, GLM)是一种扩展了传统线性回归的方法,能够适应不同的分布假设和链接函数。通过调整这些参数,GLM可以用于解决分类问题、计数数据建模等多种场景[^2]。 #### 如何构建一个简单的线性回归模型? 在线性回归中,目标是最小化预测值与实际值之间的误差平方和。以下是使用 `scikit-learn` 构建简单线性回归模型的示例: ```python from sklearn.linear_model import LinearRegression import numpy as np # 创建一些模拟数据 X = np.array([[1], [4], [3]]) y = np.array([3, 5, 3]) # 初始化并拟合模型 model = LinearRegression() model.fit(X, y) # 输出模型的系数和截距 print(f"系数 w: {model.coef_}") # 斜率[^5] print(f"截距 b: {model.intercept_}") # 截距 # 预测新数据点 new_X = [[2]] predicted_y = model.predict(new_X) print(f"预测值 ŷ: {predicted_y}") ``` 上述代码展示了如何利用 `LinearRegression` 类创建一个基本的线性模型,并打印其参数以及对新数据点的预测结果。 #### 数据集生成与划分 为了更好地理解模型性能,在实践中通常会将数据分为训练集和测试集。下面是一个完整的例子,展示如何生成数据集并应用线性回归模型[^4]: ```python from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.datasets import make_regression import matplotlib.pyplot as plt # 生成回归数据集 X, y = make_regression(n_samples=100, n_features=1, noise=10, random_state=42) # 将数据划分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 训练线性回归模型 lr = LinearRegression() lr.fit(X_train, y_train) # 绘制拟合直线 plt.scatter(X_test, y_test, color="black", label="真实值") plt.plot(X_test, lr.predict(X_test), color="blue", linewidth=3, label="预测值") plt.legend(loc='upper left') plt.show() # 查看模型参数 print(f"系数 w: {lr.coef_[0]}") print(f"截距 b: {lr.intercept_}") ``` 此脚本不仅演示了如何生成人工数据集,还说明了如何可视化模型的表现及其内部参数。 #### scikit-learn 的特殊命名约定 值得注意的是,像 `coef_` 和 `intercept_` 这样的属性是以单下划线 `_` 结尾的。这种命名方式表明它们是从训练过程中得出的结果,而不是用户手动设定的超参数[^3]。 --- ### 总结 通过对广义线性模型的学习,我们可以发现它不仅是理论上的强大工具,而且在实践中有许多便捷的功能支持。无论是从零开始实现还是借助成熟的库如 `scikit-learn` 来简化流程,都能帮助我们快速建立有效的预测模型[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值