- 1. 引言
- 2. 数例
- 3. logistic 函数原理
- 4. 极大似然估计求出参数值
- 5. python 代码
1. 引言
Logistic 逻辑回归比较适合分类型因变量的回归,这种问题在现实中很多,因此 Logistic 回归的应用还挺广泛的,在机器学习的一些方法中也借鉴了其中的一些思想。我想把这个方法梳理一下,自己也加深对这个方法的认识。
2. 数例
我应用了维基百科中的一个例子:20名学生复习考试的时间,与他们通过考试的情况如下表。
hours | 0.5 | 0.75 | 1 | 1.25 | 1.5 | 1.75 | 1.75 | 2 | 2.25 | 2.5 | 2.75 | 3 | 3.25 | 3.5 | 4 | 4.25 | 4.5 | 4.75 | 5 | 5.5 |
pass | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
3. logistic 函数原理
我们想得到考试能否通过(命名为 , 0-1变量)与复习时间的回归方程。直接拟合 0-1 变量不可以,但我们可以将 0-1 变量视为一个 0-1 分布,去拟合值为 1 出现的概率 ,因此用到了 logistic 函数:
从下图可以看出,logistic 函数的值域落在 [0, 1] 之间,而定义域却没有限制。
因此,将 y 替换为一个线性函数:
代入到 logistic 函数中,得到概率 的表达式:
4. 极大似然估计求出参数值
因为概率 的表达式是一个非线性函数,不能用最小二乘法求解,需要用极大似然估计。
对于分类因变量 ,当它取值为 1 时认为事件发生,取值为 0 时认为事件未发生。因此,对于这个 0-1 分布应用极大似然估计,得到极大似然函数:
上面的式子两面取对数,并且将 的表达式代入整理得:
然后求出使上面式子最大的参数: 即可。一般使用牛顿法求出一个近似解,不少软件都自动求解,但不同软件求出的回归方程可能有差别。
- 得出参数值后,将输入值代入方程 (1)中计算概率值,若概率值大于 0.5,归为第一类,否则归为第二类。
- 对于逻辑回归,可以用 wald 检验来检验参数值。
5. python 代码
from sklearn.linear_model import LogisticRegression
import numpy as np
x = np.array([0.5,0.75,1,1.25,1.5,1.75,1.75,2,.25,2.5,2.75,3,3.25,3.5,4,4.25,4.5,4.75,5,5.5])
x = x.reshape(-1, 1) # 需要转化成列数组
y = [0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]
model = LogisticRegression().fit(x, y)
print(model.coef_) # 打印出斜率
print(model.intercept_) # 打印出截距
print(model.predict(np.array([2]).reshape(-1,1))) # 预测 x 为 2 小时的通过情况
from sklearn.linear_model import LogisticRegression
import numpy as np
x = np.array([0.5,0.75,1,1.25,1.5,1.75,1.75,2,.25,2.5,2.75,3,3.25,3.5,4,4.25,4.5,4.75,5,5.5])
x = x.reshape(-1, 1) # 需要转化成列数组
y = [0,0,0,0,0,0,1,0,1,0,1,0,1,0,1,1,1,1,1,1]
model = LogisticRegression().fit(x, y)
print(model.coef_) # 打印出斜率
print(model.intercept_) # 打印出截距
print(model.predict(np.array([2]).reshape(-1,1))) # 预测 x 为 2 小时的通过情况
输出结果:
[[0.83239603]]
[-2.21314711]
[0]