回归分析
回归分析是通过建立模型来研究变量之间相互关系的密切程度、结构状态及进行模型预测的有效工具
回归模型分类
一、线性回归:因变量与自变量是线性关系
算法描述:对一个或多个自变量和因变量的线性关系进行建模,可用最小二乘法求解模型系数
二、非线性回归:因变量和自变量之间不都是线性关系
算法描述:对一个或多个自变量和因变量之间的非线性关系进行建模。如果非线性关系可以通过简单函数变化转化成线性关系,用线性回归的思想求解;如果不能转化,用非线性最小二乘法求解
三、Logistic回归:因变量只有 1 1 1和 0 0 0 两种取值
算法描述:是广义线性模型的特例子,利用 Logistic 函数将因变量的取值范围控制在 0 0 0 和 1 1 1 之间,表示取值为 1 1 1 的概率
四、岭回归:参与建模的自变量之间具有多重共线性
算法描述:是一种改进最小二乘估计的方法
五、主成分回归:参与建模的自变量之间有多重共线性
算法描述:主成分回归是根据主成分分析的思想提出来的,是对最小二乘法的一种改进,它是参数估计的一种有偏估计(无偏估计: 估计量的数学期望等于被估计参数的真实值,则称此此估计量为被估计参数的无偏估计,即
E
(
θ
ˆ
)
E(θˆ)
E(θˆ)≠
θ
θ
θ。样本均值的期望等于总体均值,所以样本均值为无偏估计;有偏估计: 若
θ
ˆ
θˆ
θˆ的数学期望不为
θ
θ
θ,即
E
(
θ
ˆ
)
E(θˆ)
E(θˆ)≠
θ
θ
θ ,则称为
θ
θ
θ的有偏估计。
样本方差的期望是有偏估计)。可以消除自变量之间的多重共线性
线性回归模型是相对简单的回归模型,但是通常因变量和自变量之间呈现某种曲线关系,就需要建立非线性回归模型。
Logistic 回归属于概率型非线性回归,分为二分类和多分类的回归模型。对于二分类的 Logistic 回归,因变量
y
y
y 只有“是、否”两个取值,记为
1
1
1 和
0
0
0。
当自变量之间出现多重共线性时,用最小二乘估计的回归系数将会不准确,消除多重共线性的参数改进的估计方法主要有岭回归和主成分回归。
Logistic 回归分析介绍
(1)Logistic函数
Logistic 回归模型中的因变量的只有
1
、
0
1、0
1、0 两种取值。假设在 p 个独立自变量
x
1
x_1
x1,
x
2
x_2
x2,…
x
p
x_p
xp, 记
y
y
y 取
1
1
1的概率是
p
=
P
(
y
=
1
∣
X
)
p=P(y=1|X)
p=P(y=1∣X),取
0
0
0的概率是
1
−
p
1-p
1−p,取
1
1
1 和
0
0
0 的概率之比为
p
1
−
p
\frac{p}{1-p}
1−pp, 称为事件的优势比(odds),对 odds 取自然对数即得 Logistic 变换
L
o
g
i
t
(
p
)
Logit(p)
Logit(p)
=
=
=
l
n
ln
ln
(
(
(
p
1
−
p
\frac{p}{1-p}
1−pp
)
)
)。令
L
o
g
i
t
(
p
)
Logit(p)
Logit(p)
=
=
=
l
n
ln
ln
(
(
(
p
1
−
p
\frac{p}{1-p}
1−pp
)
)
)
=
=
=
z
z
z,则
p
p
p
=
=
=
1
1
+
e
−
z
\frac{1}{1+ e^{-z}}
1+e−z1 即为 Logistic函数,如图所示:
当
p
p
p 在
(
0
,
1
)
(0,1)
(0,1) 之间变化时,odds 的取值范围是
(
0
,
+
∞
)
(0,+\infty)
(0,+∞),则
l
n
(
p
1
−
p
)
ln(\frac{p}{1-p})
ln(1−pp) 的取值范围是
(
−
∞
,
+
∞
)
(-\infty,+\infty)
(−∞,+∞)。
(2)Logistic 回归模型
Logistic 回归模型是建立
l
n
(
p
1
−
p
)
ln(\frac{p}{1-p})
ln(1−pp) 与自变量的线性回归模型。
Logistic 回归模型为:
因为 l n ( p 1 − p ) ln(\frac{p}{1-p}) ln(1−pp) 的取值范围是 ( − ∞ , + ∞ ) (-\infty,+\infty) (−∞,+∞),这样,自变量 x 1 , x 2 , . . . , x p x_1,x_2,...,x_p x1,x2,...,xp 可在任意范围内取值。
记 g ( x ) = β 0 + β 1 x 1 + . . . + β p x p g(x) = \beta_0 + \beta_1x_1 + ... + \beta_px_p g(x)=β0+β1x1+...+βpxp,得到:
(3) Logistic 回归模型解释
p
1
−
p
=
e
β
0
+
β
1
x
1
+
.
.
.
+
β
p
x
p
+
ξ
\frac{p}{1-p} = e^{\beta_0 + \beta_1x_1 + ... + \beta_px_p + \xi}
1−pp=eβ0+β1x1+...+βpxp+ξ
β
0
:
\beta_0:
β0: 在没有自变量,即
x
1
,
x
2
,
.
.
.
,
x
p
x_1,x_2,...,x_p
x1,x2,...,xp 全部取
0
,
y
=
1
0,y = 1
0,y=1 与
y
=
0
y = 0
y=0发生概率之比的自然对数;
β
i
:
\beta_i:
βi: 某自变量
x
i
x_i
xi变化时,即
x
i
=
1
x_i = 1
xi=1 与
x
i
=
0
x_i = 0
xi=0 相比,
y
=
1
y = 1
y=1优势比的对数值。
预测函数
对于二分类问题,
y
∈
{
0
,
1
}
y\in \begin{Bmatrix}0, 1\end{Bmatrix}
y∈{0,1},
1
1
1表示正例,
0
0
0表示负例。逻辑回归是在线性函数
z
z
z 输出预测实际值的基础上,寻找一个假设函数
p
=
1
1
+
e
−
z
p = \frac{1}{1+ e^{-z}}
p=1+e−z1 ,将实际值映射到
0
,
1
0, 1
0,1之间,如果
p
>
=
0.5
p >= 0.5
p>=0.5 ,则预测
y
=
1
y = 1
y=1,及
y
y
y 属于正例;如果
p
<
0.5
p < 0.5
p<0.5,则预测
y
=
0
y = 0
y=0,及
y
y
y 属于负例。
例如,如果对于给定的
x
x
x,通过已经确定的参数计算得出
p
=
0.7
p = 0.7
p=0.7,则表示有
70
%
70\%
70% 的几率
y
y
y 为正例,相应的
y
y
y 为负例的几率为
0.3
0.3
0.3。
决策面
在逻辑回归中,我们预测:
- 当 p p p 大于等于 0.5 0.5 0.5 时,则预测 y = 1 y = 1 y=1
- 当 p p p 小于 0.5 0.5 0.5 时,则预测 y = 0 y = 0 y=0
根据上面绘制出的 S S S 形函数图像,我们知道:
- z = 0 z = 0 z=0 时, g ( z ) = 0.5 g(z) = 0.5 g(z)=0.5
- z > 0 z > 0 z>0 时, g ( z ) > 0.5 g(z) > 0.5 g(z)>0.5
- z < 0 z < 0 z<0 时, g ( z ) < 0.5 g(z) < 0.5 g(z)<0.5
假设我们有一个模型:
1
1
+
e
−
z
=
g
(
β
0
+
β
1
x
1
+
β
2
x
2
)
\frac{1}{1 + e^{-z}} = g(\beta_0 + \beta_1x_1 + \beta_2x_2)
1+e−z1=g(β0+β1x1+β2x2),并且参数
β
\beta
β 是向量
[
−
3
,
1
,
1
]
\begin{bmatrix}-3,1, 1\end{bmatrix}
[−3,1,1]。则当
−
3
+
x
1
+
x
2
-3 + x_1 + x_2
−3+x1+x2 >= 0,即当
x
1
+
x
2
>
=
3
x_1 + x_2 >= 3
x1+x2>=3 时,模型将预测
y
=
1
y = 1
y=1。
绘制直线
x
1
+
x
2
=
3
x_1 + x_2 = 3
x1+x2=3,便是我们模型的分界线,将预测为
1
1
1 的区域和预测为
0
0
0 的区域分隔开。
损失函数
衡量模型预测的好坏。我们希望我们预测的公式与实际值差值越小越好,所以就定义了一种衡量模型好坏的方式,即损失函数(用来表现预测与实际数据的差距程度)。损失函数越小,模型就越好。
既然是分类任务,那么我们可以对于每个类别分别取计算它们各自的损失呀。对于真实标记是1的样本,我们希望预测值越接近于
1
1
1,损失越小;对于真实标记是
0
0
0 的样本,我们希望预测值越接近于
0
0
0 时损失越小,
−
l
o
g
-log
−log 函数正好满足以上情况
Logistic 回归建模步骤
1)根据分析目的设置指标变量(因变量和自变量),然后搜集数据,根据收集到的数据,对特征再次进行筛选;
2)
y
y
y 取
1
1
1 的概率是
p
=
P
(
y
=
1
∣
X
)
p = P(y = 1|X)
p=P(y=1∣X), ,取
0
0
0 的概率是
1
−
p
1-p
1−p,用
l
n
(
p
1
−
p
)
ln(\frac{p}{1 - p})
ln(1−pp) 和自变量列出线性回归方程,估计出模型中的回归系数;
3)进行模型试验。模型有效性的检验指标有很多,最基本的有正确率,其次是混淆矩阵、ROC曲线、KS值等。
4)模型应用:输入自变量的取值,就可以得到预测变量的值,或者根据预测变量的值去控制自变量的值。
下面对某银行在降低贷款拖欠率的数据进行逻辑回归建模,该数据示例如下表所示:
年龄 | 教育 | 工龄 | 地址 | 收入 | 负债率 | 信用卡负债 | 其他负债 | 违约 |
---|---|---|---|---|---|---|---|---|
41 | 3 | 17 | 12 | 176.00 | 9.30 | 11.36 | 5.01 | 1 |
27 | 1 | 10 | 6 | 31.00 | 17.30 | 1.36 | 4.00 | 0 |
40 | 1 | 15 | 14 | 55.00 | 5.50 | 0.86 | 2.17 | 0 |
41 | 1 | 15 | 14 | 120.00 | 2.90 | 2.66 | 0.82 | 0 |
24 | 2 | 2 | 0 | 28.00 | 17.30 | 1.79 | 3.06 | 1 |
利用 Scikit-Learn 对这个数据进行逻辑回归分析。首先特征筛选,特征筛选的方法有很多,主要包含在 Scikit-Learn 的 feature_selection 库中,比较简单的有通过 F 检验(f_regresson)来给出各个特征的 F 值和 p 值,从而可以筛选变量(选择 F 值大的或者 p 值小的特征)。其次有 递 归 特 征 消 除 ① 递归特征消除^① 递归特征消除①(Recursive Feature Elimination, RFE)和 稳 定 性 选 择 ② 稳定性选择^② 稳定性选择②(Stability Selection)等比较新的方法。这里使用了稳定性选择方法中的随机逻辑回归进行特征筛选,然后利用筛选后的特征建立逻辑回归模型,输出平均正确率,代码如下:
import pandas as pd
from sklearn.linear_model import LogisticRegression as LR # 逻辑回归
from sklearn.linear_model import RandomizedLogisticRegression as RLR # 随机逻辑回归
import warnings
warnings.filterwarnings("ignore")
# 参数初始化
filename = '../Data/bankloan.xls'
data = pd.read_excel(filename)
x = data.iloc[:, :8].values # 每行前8列转换成数组形式
y = data.iloc[:, 8].values # 每行最后一列转换成数组形式
rlr = RLR() # 建立随机逻辑模型,筛选变量
rlr.fit(x, y) # 训练模型
rlr.get_support(indices=True) # 获取特征筛选结果,也可以通过.scores_方法获取各个特征的分数
print(u'通过随机逻辑回归模型筛选特征结束。')
print(u'有效特征为:%s' % ','.join(data.columns[rlr.get_support(indices=True)]))
x = data[data.columns[rlr.get_support(indices=True)]].values # 筛选好特征
lr = LR() # 建立逻辑回归模型
lr.fit(x, y) # 用筛选后的特征数据来训练模型
print(u'逻辑回归模型训练结束')
print(u'模型的平均正确率为:%s' % lr.score(x, y)) # 给出模型的平均正确率
结果:
从上面的结果看出,采用随机逻辑回归剔除变量,分别剔除了 x2、x8、x1、x5,最终构建的模型包含的变量为常量 x3、x4、x6、x7。在建立随机逻辑回归模型时,使用了默认阈值 0.25 ,可以用 RLR(selection_threshold = 0.5)
手动设置阈值。逻辑回归本质上还是一种线性模型,因此这里的模型有效性检验本质还是在做线性相关检验,因此,筛选出来的结果说明具有比较强的线性相关性,然而,被筛选掉的变量并不一定就跟结果没有关系,因为他们之间很可能是非线性关系。对于非线性关系的变量筛选方法有决策树、神经网络等。
递归特征消除 的主要思想是反复的构建模型(如 SVM 或者回归模型),然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征放到一边,然后在剩余的特征上重复这个过程,直到遍历所有特征。这个过程中特征被消除的次序就是特征的排序。因此这是一种寻找最有特征子集的贪心算法。
稳定性选择 是一种基于二次抽样和选择算法相结合较新的方法,选择算法可以是回归、 SVM 或其他类似的方法。它的主要是想是在不同的数据子集和特征子集上运行特征选择算法,不断重复,最终汇总特征选择结果。比如,可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。在理想情况下,重要特征的得分会接近 100%。稍微弱一点的特征得分是非 0 的数,而最无用特征得分将会接近于 0 。