1. 基本形式
- 定义:试图学得一个通过属性的线性组合来进行预测的函数
- 公式:给定由d个属性描述的示例
x
=
(
x
1
;
x
2
;
.
.
.
x
d
)
x=(x_1;x_2;...x_d)
x=(x1;x2;...xd),其中
x
i
x_i
xi是
x
x
x在第
i
i
i个属性上的取值
f ( x ) = w 1 x 1 + w 2 x 2 + . . . + w d x d + b f(x)=w_1x_1+w_2x_2+...+w_dx_d+b f(x)=w1x1+w2x2+...+wdxd+b
向量形式:
f ( x ) = w T x + b f(x)=w^Tx+b f(x)=wTx+b
学得 w 、 b w、b w、b之后,模型就确定了。 - 线性模型有良好的可解释性,每个属性对应的权重可以理解为它对预测的重要性。并且建模较为简单,许多功能更为强大的非线性模型都是在线性模型的基础上引入层级结构或高维映射得到的。
2. 线性回归
2.1. 回归 VS 分类
1.回归分析:确定两种或两种以上变量(属性)间相互依赖的定量关系的一种统计分析方法。
2.回归与分类在本质上是一样的,都是在拟合数据集的函数基础上对新样本进行预测
3.回归与分类的最大不同仅在于预测值范围不同,分类问题预测离散值,回归预测连续值。
4.回归是预测具体的值,分类可以根据预测的值的大小进行归类。
5.线性回归不仅可以用于回归任务,还可以用于分类任务
2.2. 什么是线性回归
是一种回归分析技术。
给定数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}
D={(x1,y1),(x2,y2),...,(xm,ym)},其中
x
i
=
(
x
i
1
;
x
i
2
,
.
.
.
x
i
d
)
,
y
i
∈
R
x_i=(x_{i1};x_{i2},...x_{id}),y_i\in \mathbb R
xi=(xi1;xi2,...xid),yi∈R。“线性回归”:试图学得一个线性模型以尽可能准确地预测实值输出标记。试图学得:
f
(
x
i
)
=
w
x
i
+
b
f(x_i)=wx_i+b
f(xi)=wxi+b,使得
f
(
x
i
)
≃
y
i
f(x_i)\simeq y_i
f(xi)≃yi
这里是以一元(单变量)线性回归为例,只包括一个自变量(属性)和一个因变量,且二者的关系可用一条直线近似表示。
2.3. 离散属性连续化
2.3.1. 属性值间有序
例如:身高的取值高、中、矮转化为{1.0,0.5,0.0}
2.3.2. 属性值间无序
例如:瓜类的取值西瓜、南瓜、黄瓜转化为(0,0,1),(0,1,0),(1,0,0)
2.4. 如何确定参数w和b
关键:如何衡量f(x)与y之间的差距
2.4.1 均方误差
回归任务中最常用的性能度量,优化目标就是让均方误差最小化。
(
w
∗
,
b
∗
)
=
arg
min
(
w
,
b
)
∑
i
=
1
m
(
f
(
x
i
)
−
y
i
)
2
=
arg
min
(
w
,
b
)
∑
i
=
1
m
(
y
i
−
w
x
i
−
b
)
2
(w^*,b^*)=\arg\min_{(w,b)}\sum_{i=1}^m(f(x_i)-y_i)^2=\arg\min_{(w,b)}\sum_{i=1}^m(y_i-wx_i-b)^2
(w∗,b∗)=arg(w,b)mini=1∑m(f(xi)−yi)2=arg(w,b)mini=1∑m(yi−wxi−b)2
最小二乘法
基于均方误差最小化来进行模型求解的方法称为“最小二乘法”(LSM)
在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。
2.4.1 求解w和b
求解w和b使
E
(
w
,
b
)
=
∑
i
=
1
m
(
y
i
−
w
x
i
−
b
)
2
E_{(w,b)}=\sum_{i=1}^m(y_i-wx_i-b)^2
E(w,b)=∑i=1m(yi−wxi−b)2最小化的过程,称为线性回归模型的最小二乘“参数估计”
E
(
w
,
b
)
E_{(w,b)}
E(w,b)是关于w和b的凸函数,当它关于w和b的导数均为0时,得到w和b的最优解。
E
(
w
,
b
)
E_{(w,b)}
E(w,b)分别对
w
w
w和
b
b
b求导:
∂
E
(
w
,
b
)
∂
w
=
2
(
w
∑
i
=
1
m
x
i
2
−
∑
i
=
1
m
(
y
i
−
b
)
x
i
)
\frac{\partial E_{(w,b)}}{\partial w}=2\left(w\sum_{i=1}^mx_i^2-\sum_{i=1}^m(y_i-b)x_i\right)
∂w∂E(w,b)=2(wi=1∑mxi2−i=1∑m(yi−b)xi)
∂
E
(
w
,
b
)
∂
b
=
2
(
(
m
b
−
∑
i
=
1
m
(
y
i
−
w
x
i
)
)
\frac{\partial E_{(w,b)}}{\partial b}=2\left((mb-\sum_{i=1}^m(y_i-wx_i)\right)
∂b∂E(w,b)=2((mb−i=1∑m(yi−wxi))
令导数为0,求得w和b。
w
=
∑
i
=
1
m
y
i
(
x
i
−
x
ˉ
)
∑
i
=
1
m
x
i
2
−
1
m
(
∑
i
=
1
m
x
i
)
2
w=\frac{\sum_{i=1}^m y_i(x_i-\bar x)}{\sum_{i=1}^m x_i^2-\frac{1}{m}\left(\sum_{i=1}^mx_i\right)^2}
w=∑i=1mxi2−m1(∑i=1mxi)2∑i=1myi(xi−xˉ)
b
=
1
m
∑
i
=
1
m
(
y
i
−
w
x
i
)
b=\frac{1}{m} \sum_{i=1}^m(y_i-wx_i)
b=m1i=1∑m(yi−wxi)
其中
x
ˉ
=
1
m
∑
i
=
1
m
x
i
\bar x=\frac{1}{m}\sum_{i=1}^mx_i
xˉ=m1∑i=1mxi为
x
x
x的均值。
2.5. 多元线性回归
2.7.1. 更为一般的情况,在数据集D上,样本由d个属性描述,此时试图学得:
f
(
x
i
)
=
w
T
x
i
+
b
f(x_i)=w^Tx_i+b
f(xi)=wTxi+b,使得
f
(
x
i
)
≃
y
i
f(x_i)\simeq y_i
f(xi)≃yi
这称为“多元线性回归”,也称“多变量线性回归”
2.7.2. 为了便于讨论,把
w
w
w和
b
b
b统一记为
w
^
=
(
w
;
b
)
\hat w=(w;b)
w^=(w;b),数据集D表示为一个
m
×
(
d
+
1
)
m\times (d+1)
m×(d+1)大小的矩阵
X
\boldsymbol X
X。加1是偏置b可以看成
w
0
x
0
w_0x_0
w0x0,其中
x
0
x_0
x0为1。
y
=
(
y
1
;
y
2
;
.
.
.
;
y
m
)
y=(y_1;y_2;...;y_m)
y=(y1;y2;...;ym)
目标函数变为:
w
^
∗
=
arg
min
w
^
(
y
−
X
w
^
)
T
(
y
−
X
w
^
)
\hat w^*=\arg \min_{\hat w}(y-X\hat w)^T(y-X\hat w)
w^∗=argw^min(y−Xw^)T(y−Xw^)
令
E
w
^
=
(
y
−
X
w
^
)
T
(
y
−
X
w
^
)
E_{\hat w}=(y-X\hat w)^T(y-X\hat w)
Ew^=(y−Xw^)T(y−Xw^),对
w
^
\hat w
w^求导得到:
∂
E
w
^
∂
w
^
=
2
X
T
(
X
w
^
−
y
^
)
\frac{\partial E_{\hat w}}{\partial \hat w}=2X^T(X\hat w-\hat y)
∂w^∂Ew^=2XT(Xw^−y^)
求导过程
- 当
X
T
X
X^TX
XTX为满秩矩阵或正定矩阵时,令上式为0得:
w ∗ ^ = ( X T X ) − 1 X T y \hat {w^*}=(X^TX)^{-1}X^Ty w∗^=(XTX)−1XTy - 很多时候不是满秩,就会有多个解,选择哪一个解作为输出,将由学习算法的归纳偏好决定,常常引入正则化项,如L1正则化或L2正则化,以L2正则化为例:
w ∗ ^ = arg min w ^ [ ( y − X w ^ ) T ( y − X w ^ ) + λ ∥ w ^ 2 2 ∥ ] \hat {w^*}=\arg \min_{\hat w}\left[(y-X\hat w)^T(y-X\hat w)+λ\Vert {\hat w}_2^2\Vert \right] w∗^=argw^min[(y−Xw^)T(y−Xw^)+λ∥w^22∥]
2.6. 广义线性模型
2.6.1. 广义线性模型
有些情况用直线拟合是不合适的,我们可以对得到的回归值加上一个非线性映射。
考虑单调可微函数
g
(
⋅
)
g(⋅)
g(⋅),令
y
=
g
−
1
(
w
T
x
+
b
)
y=g^{-1}(w^Tx+b)
y=g−1(wTx+b) 等价于
g
(
y
)
=
w
T
x
+
b
g(y)=w^Tx+b
g(y)=wTx+b
这样得到的模型称为“广义线性模型”,其中函数
g
(
⋅
)
g(⋅)
g(⋅)称为“联系函数”。
2.6.2. 对数线性回归
l
n
y
=
w
T
x
+
b
lny=w^Tx+b
lny=wTx+b
(
y
=
e
w
T
x
+
b
)
\left(y=e^{w^Tx+b}\right)
(y=ewTx+b)
这就是“对数线性回归”,实际是在试图让
e
w
T
x
+
b
e^{w^Tx+b}
ewTx+b逼近
y
y
y。
对数线性回归是广义线性模型在
g
(
⋅
)
=
l
n
(
⋅
)
g(·)=ln(·)
g(⋅)=ln(⋅)时的特例。
2.7. 线性回归模型scikit-learn code
sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=1)
2.8. 总结
3. 对数几率回归(逻辑回归LR)
分类学习方法,简称对率回归
代码实现链接
3.1. 线性回归如何实现分类任务
回归就是通过输入的属性值得到一个预测值,可以利用广义线性模型方法。的特征,找到一个单调可微函数g(⋅),将预测值转化为离散值从而进行分类。考虑二分类任务,其输出标记
y
∈
{
0
,
1
}
y∈\{0,1\}
y∈{0,1}
而线性回归模型产生的预测值
z
=
w
T
x
+
b
z=w^Tx+b
z=wTx+b是实值,于是,需要将实值
z
z
z转换为0/1值。最理想的是“单位阶跃函数”,但它不满足单调可微,需要找一个替代函数,对数几率函数:
y
=
1
1
+
e
−
z
y=\frac{1}{1+e^{-z}}
y=1+e−z1
对数几率函数简称“对率函数”,是一种Sigmoid函数。
- 单位阶跃函数(红色)与对数几率函数(黑色)
y > 0.5 y>0.5 y>0.5,数据分为1类; y < 0.5 y<0.5 y<0.5,分到0类。
将对数几率函数带入广义线性模型得:(3.18)
若将
y
y
y视为
x
x
x为正例的可能性,则
1
−
y
1-y
1−y是反例的可能性。则:
y
1
−
y
\frac{y}{1-y}
1−yy
称为“几率”,是
x
x
x为正例的相对可能性。对几率取对数得到“对数几率”:
l
n
y
1
−
y
ln\frac{y}{1-y}
ln1−yy
所以(3.18)左边得式子实际是用线性回归模型的预测结果去逼近真实标记的对数几率。因此,对应的模型称为“对数几率回归”。虽然名字带“回归”,但是一种分类学习方法。
Logistic回归分类器的实现
在每个特征上都乘以一个回归系数,然后把所有的结果值相加,将这个总和带入Sigmoid函数中,进而得到一个范围在0~1之间的数值。任何大于0.5的数据被分入1类,小于0.5的被归入0类。
3.2. 如何确定参数w和b
将
y
y
y视为类后验估计即
y
=
p
(
y
=
1
∣
x
)
y=p(y=1\vert x)
y=p(y=1∣x),则(3.18)右侧式子可重写为:
3.2.1. 极大似然法
概率最大时对应的w和b.(为什么不用最小二乘?个人认为可能是最小二乘目标函数非凸)
- 目标函数:(3.25)
L ( w , b ) = ∏ i = 1 m p ( y i ∣ x i ; w , b ) L(w,b)=\prod_{i=1}^mp(y_i|x_i;w,b) L(w,b)=i=1∏mp(yi∣xi;w,b)
取对数:
- 似然项(对正负例P合并表示)
- 加法形式: p = p ( y ∣ x , θ ) = y i p 1 + ( 1 − y i ) p 0 p=p(y\vert x,\theta)=y_ip_1+(1-y_i)p_0 p=p(y∣x,θ)=yip1+(1−yi)p0
- 乘法形式:
p
=
p
(
y
∣
x
,
θ
)
=
p
1
y
i
p
0
1
−
y
i
p=p(y\vert x,\theta)=p_1^{y_i} {p_0}^{1-y_i}
p=p(y∣x,θ)=p1yip01−yi
令 β = ( w ; b ) , x ^ = ( x ; 1 ) , \beta=(w;b),\hat x=(x;1), β=(w;b),x^=(x;1),则 w T x + b w^Tx+b wTx+b( ( w b ) \begin{pmatrix}w \\ b\\ \end{pmatrix} (wb) ( x 1 ) \begin{pmatrix}x&1 \\ \end{pmatrix} (x1))可简写为 β T x ^ \beta^T\hat x βTx^,再令 p 1 ( x ^ ; β ) = p ( y = 1 ∣ x ^ ; β ) , p 0 ( x ^ ; β ) = p ( y = 0 ∣ x ^ ; β ) = 1 − p 1 ( x ^ ; β ) p_1(\hat x;\beta)=p(y=1\vert\hat x;\beta),p_0(\hat x;\beta)=p(y=0\vert\hat x;\beta)=1-p_1(\hat x;\beta) p1(x^;β)=p(y=1∣x^;β),p0(x^;β)=p(y=0∣x^;β)=1−p1(x^;β),加法形式似然项重写为:
p ( y i ∣ x i ; w , b ) = y i p 1 ( x ^ ; β ) + ( 1 − y i ) p 0 ( x ^ ; β ) (3.26) p(y_i\vert x_i;w,b)=y_ip_1(\hat x;\beta)+(1-y_i)p_0(\hat x;\beta) \tag{3.26} p(yi∣xi;w,b)=yip1(x^;β)+(1−yi)p0(x^;β)(3.26)
- 将(3.26)带入(3.25),最大化(3.25)等价于最小化:
推导过程
3.2.2 求解w和b
之后可以用梯度下降法、牛顿法等求得最优解
3.3. 对数几率回归scikit-learn code
sklearn.linear_model.LogisticRegression(penalty='l2', dual=False, tol=0.0001,C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='liblinear', max_iter=100, multi_class='ovr', verbose=0, warm_start=False, n_jobs=1)
3.4. 总结
4. 线性判别分析LDA
以下是针对二分类任务展开
代码实现链接
4.1. LDA思想
- 训练:设法将训练样本投影到一条直线上,使得同类样例的投影点尽可能近、异类的样例投影点尽可能远
- 测试:将新样本投影到同样的这条直线上,根据投影点的位置来确定其类别
给定数据集 D = { ( x i , y i ) } i = 1 m , y i ∈ { 0 , 1 } D=\{(x_i,y_i)\}_{i=1}^m,y_i∈\{0,1\} D={(xi,yi)}i=1m,yi∈{0,1},令 X i 、 μ i 、 ∑ i X_i、\mu_i、\sum i Xi、μi、∑i分别表示第 i ∈ { 0 , 1 } i\in \{0,1\} i∈{0,1}类示例的集合、均值向量、协方差矩阵。
若将数据投影到直线 w w w上:
两类样本的中心在直线上的投影分别为: w T μ 0 w^T\mu_0 wTμ0、 w T μ 1 w^T\mu_1 wTμ1;
两类样本的协方差分别为: w T ∑ 0 w 、 w T ∑ 1 w w^T\sum_0w、w^T\sum_1w wT∑0w、wT∑1w。 - 根据LDA思想得:
同类样例的投影点尽可能近,也就是协方差尽可能小,即 w T ∑ 0 w + w T ∑ 1 w w^T\sum_0w+w^T\sum_1w wT∑0w+wT∑1w尽可能小;
异类样例的投影点尽可能远,也就是类中心的距离尽可能大,即 ∥ w T μ 0 − w T μ 1 ∥ 2 2 \Vert w^T\mu_0-w^T\mu_1\Vert_2^2 ∥wTμ0−wTμ1∥22尽可能大。
4.2. 目标函数
同时考虑上面二者,得到最大化的目标:
J
=
∥
w
T
μ
0
−
w
T
μ
1
∥
2
2
w
T
∑
0
w
+
w
T
∑
1
w
=
w
T
(
μ
0
−
μ
1
)
(
μ
0
−
μ
1
)
T
w
w
T
(
∑
0
+
∑
1
)
w
(3.32)
J=\frac{\Vert w^T\mu_0-w^T\mu_1 \Vert_2^2}{w^T\sum_0w+w^T\sum_1w} =\frac{w^T(\mu_0-\mu_1)(\mu_0-\mu_1)^Tw}{w^T(\sum_0+\sum_1)w} \tag {3.32}
J=wT∑0w+wT∑1w∥wTμ0−wTμ1∥22=wT(∑0+∑1)wwT(μ0−μ1)(μ0−μ1)Tw(3.32)
推导过程
- 类内散度矩阵
- 类间散度矩阵
所以(3.32)重写为:
J = w T S b w w T S w w (3.35) J=\frac{w^TS_bw}{w^TS_ww} \tag{3.35} J=wTSwwwTSbw(3.35)
这就是LDA欲最大化目标,即 S b S_b Sb与 S w S_w Sw的“广义瑞利商”。
4.3. 求解w
(3.35)分子分母都是关于
w
w
w的二次项,故对其求解与
w
w
w的长度无关,只与方向有关。令
w
T
S
w
w
=
1
{w^TS_ww}=1
wTSww=1,则(3.35)等价于:
min
w
−
w
T
S
b
w
s
.
t
.
w
T
S
w
w
=
1
\min_w\; -w^TS_bw \\ s.t. \; \; w^TS_ww=1
wmin−wTSbws.t.wTSww=1
由拉格朗日乘子法,上式等于:
S
b
w
=
λ
S
w
w
(3.37)
S_bw=\lambda S_ww\tag {3.37}
Sbw=λSww(3.37)
(
−
w
T
S
b
w
+
λ
w
T
S
w
w
=
0
-w^TS_bw+\lambda w^TS_ww=0
−wTSbw+λwTSww=0)
注意到
S
b
w
S_bw
Sbw的方向恒为
μ
0
−
μ
1
\mu_0-\mu_1
μ0−μ1,不妨令:
S
b
w
=
λ
(
μ
0
−
μ
1
)
S_bw=\lambda(\mu_0-\mu_1)
Sbw=λ(μ0−μ1)
带入(3.37)得:
w
=
S
w
−
1
(
μ
0
−
μ
1
)
w=S_w^{-1}(\mu_0-\mu_1)
w=Sw−1(μ0−μ1)
通常对Sw进行奇异值分解,然后得到
S
w
−
1
S_w^{-1}
Sw−1
4.4. 多分类任务
略
4.5. LDA sklearn code
sklearn.discriminant_analysis.LinearDiscriminantAnalysis(solver='svd', shrinkage=None, priors=None, n_components=None, store_covariance=False, tol=0.0001)
4.6. 总结
5. 多分类学习
常把多分类任务拆解为多个二分类任务,每个二分类任务训练一个分类器, 测试时,对这些分类器的预测结果进行集成获得最终的多分类结果。
5.1. 拆解策略
5.1.1. 一对一(OvO)
将N个类别两两配对,产生N(N-1)/2个分类任务。 测试时,新样本提交给所有分类器,得到N(N-1)/2个分类结果。 最后通过投票产生,就是把被预测得最多的类别作为该样本的类别
5.1.2. 一对其余(OvR)
每次将一个类的样例作为正例、剩下的其他类作为反类来训练,产生N个分类器 测试时,若仅有一个分类器预测为正例,则对应的类别就是该样本的类别; 若有多个模型预测为正例,则选择置信度最大的类别
5.1.3. 多对多(MvM)
- OvO和OvR优缺点:
OvO需要训练的分类器多,OvR少;
因此OvO的存储开销和测试时间开销通常比OvR大;
在类别很多时,OvO的训练时间开销比OvR小 - 对于OvR、MvM来说,由于每个类进行了相同的处理,其拆解出的二分类任务中类别不平衡的影响会相互抵消,因此通常不需要专门处理。
6. 类别不平衡问题
6.1. 相关概念和定义
- 分类任务中不同类别的训练样例数目差别很大的情况。 假设正例少、反例多。
- 线性分类器中, y y y:实际表达了为正例的可能性; y 1 − y \frac {y}{1-y} 1−yy:正例可能性与反例可能性之比。
- 分类器决策规则:
若 y 1 − y > 1 \frac {y}{1-y}>1 1−yy>1,则预测为正例。
然而,当训练集中正、反例数目不同时,令正例数目 m + m^+ m+,反例数目 m − m^- m−,则观测几率 m + m − \frac {m^+}{m^-} m−m+
只要分类器的预测几率 高于 观测几率就判定为正例:
若 y 1 − y > m + m − \frac {y}{1-y}>\frac {m^+}{m^-} 1−yy>m−m+,则预测为正例。
6.2. 类别不平衡学习解决方法
6.2.1. 阈值移动(再缩放)
只要分类器的预测几率高于观测几率就判定为正例,在此基础上进行调整:
y
′
1
−
y
′
=
y
1
−
y
×
m
+
m
−
\frac{y'}{1-y'}=\frac {y}{1-y}\times\frac {m^+}{m^-}
1−y′y′=1−yy×m−m+
“再缩放”是“代价敏感学习”(2.3.4章)的基础。
6.2.2. 欠采样
- 针对反例(多的),去除一些反例使得正、反例数目接近,再进行学习。
- 丢掉数据,时间开销变小。
- 代表算法EasyEnsemble,利用集成学习机制,将反例划分为若干个集合供不同学习器使用,这样对每个模型来说都进行了欠采样,但全局来看不会丢失重要信息。
6.2.3. 过采样
- 针对正例(少的),增加一些正例使得正、反例数目接近,再进行学习。
- 不能简单地对初始正样本进行重复采样,否则会导致过拟合。
- 代表算法SMOTE,通过对训练集里的正例进行插值来产生额外的正例。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*****~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
记录自己的学习过程,,如有不对的地方还请指教!如果你喜欢欢迎点赞、评论O(∩_∩)O
参考:
https://blog.csdn.net/u011974639/article/details/77102663#commentBox
scikit-learn code:http://www.huaxiaozhuan.com/%E5%B7%A5%E5%85%B7/scikit-learn/chapters/3.supervised_model.html
https://github.com/Vay-keen/Machine-learning-learning-notes/blob/master/%E5%91%A8%E5%BF%97%E5%8D%8E%E3%80%8AMachine%20Learning%E3%80%8B%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0(4)–%E7%BA%BF%E6%80%A7%E6%A8%A1%E5%9E%8B.md