狭义线性模型 [generalize linear model(GLM)] 是线性模型的扩大,通过分割函数建设响应变量的数学期望值与线性组合的预测变量之间的关系。它的特点是不强行扭转数据的天然度量,数据能够具备非线性和非恒定方差构造。是线性模型在钻研响应值的非正态分布以及非线性模型简洁间接的线性转化时的一种倒退。
在狭义线性模型的实践框架中,则假如指标变量 Y 则是遵从指数分布族,正态分布和伯努利散布都属于指数分布族,因而线性回归和逻辑回归能够看作是狭义线性模型的特例。
这是概率分布及其正则分割函数(Canonical Link function)的列表。
- 正态分布: 恒等函数
- 泊松散布: 对数函数
-
二项分布: 分对数函数
除此以外咱们还能够自定义分割函数,如果不喜爱本人编写能够应用在 statsmodels 中实现了的各种分割函数,Stan、PyMC3 和 TensorFlow Probability 等概率编程框架也给咱们提供了这些函数。
link function 也被翻译为连贯函数,这里感觉分割函数更为贴切所以还是翻译为分割函数
线性回归
线性回归用于通过解释变量 X 的线性组合来预测连续变量 y 的值。
在单变量状况下,线性回归能够示意如下
模型假设噪声项的正态分布。该模型阐明如下
泊松回归
泊松散布用于对计数数据进行建模。它只有一个参数代表散布的均值和标准差。这意味着平均值越大,标准差越大。
如果咱们将泊松回归利用于数据。后果应该是这样的。
预测曲线是指数的,因为对数分割函数(log link function)的反函数是指数函数。由此也能够分明地看出,由线性预测器计算的泊松回归参数保障为正。
以下是一个泊松回归的示例代码
import numpy as np
from numpy.random import uniform, normal, poisson, binomial
from scipy import stats
import matplotlib.pyplot as plt
import seaborn as sns
import statsmodels.api as sm
%matplotlib inline
## ============Poisson regression
# generate simulation data
np.random.seed(5)
n_sample = 100
a = 0.6
b = -0.4
x = uniform(1, 5, size=n_sample)
mu = np.exp(a * x + b)
y = poisson(mu)
import statsmodels.api as sm
exog, endog = sm.add_constant(x), y
# Poisson regression
mod = sm.GLM(endog, exog, family=sm.families.Poisson(link=sm.families.links.log()))
res = mod.fit()
display(res.summary())
y_pred = res.predict(exog)
idx = x.argsort()
x_ord, y_pred_ord = x[idx], y_pred[idx]
plt.plot(x_ord, y_pred_ord, color='m')
plt.scatter(x, y, s=20, alpha=0.8)
plt.xlabel("X")
plt.ylabel("Y")
粉色曲线是泊松回归的预测。
逻辑回归
如果应用分对数(logit)函数作为分割函数,应用二项式 / 伯努利散布作为概率分布,则该模型称为逻辑回归。
第二个方程的左边叫做 logistic 函数。因而这个模型被称为逻辑回归。对于任意输出,logistic 函数返回的值在 0 到 1 之间,对于二项分布它是一个适合的分割函数。逻辑回归也就是咱们常看到的这个样子
总结
如果要进行“狭义线性模型(GLM)”剖析,只须要摘到咱们须要的分割函数,它的作用就是把 Y 与 X 间的非线性关系转换成线性关系,咱们齐全能够本人编写咱们须要的分割函数。
理论应用中咱们只有把分割函数和方差函数假如正确,甚至不必管是什么散布的,如果应用的就是一些典型分割函数,则方差函数都能够不必假如。所以其实狭义线性模型的要点就是:分割函数和 / 或方差函数要假如正确,这样就 ok 了。
本文代码:
https://avoid.overfit.cn/post/eb42f5cb4a534dfa9844600acb1fc546
作者:Rana singh