1、机器学习基本概念
损失函数
损失函数是针对一个样本计算该样本真实的
y
i
y_i
yi值与模型预测的值
f
(
x
i
)
f(x_i)
f(xi)之间的误差。
以线性回归为例,下面若未指明,都是以线性回归为例,损失函数
L
(
y
i
,
f
(
x
i
)
)
=
1
2
(
y
i
−
f
(
x
i
)
)
2
L(y_i,f(x_i))=\dfrac12(y_i-f(x_i))^2
L(yi,f(xi))=21(yi−f(xi))2
代价函数
代价函数是针对训练样本中所有样本计算损失函数的和的均值。
代价函数
L
o
s
s
=
1
2
m
∑
i
=
0
m
L
(
y
i
,
f
(
x
i
)
)
Loss = \dfrac1{2m}\sum_{i=0}^mL(y_i,f(x_i))
Loss=2m1∑i=0mL(yi,f(xi))
目标函数
目标函数是对算法进行优化时的目标,很多时候我们把代价函数作为目标函数,但是现在我们经常会综合考虑代价函数和模型的复杂度(即正则项)作为目标函数。
正则化
正则化等价于结构风险最小化,就是在模型的目标函数在代价函数的后面加上了表示模型复杂度的正则化项或惩罚项,通过限制模型的复杂度,起到防止过拟合的作用。正则化一般包括L1正则和L2正则,L1正则使得参数中有更多的0,起到了稀疏的作用;L2正则化会使得模型的参数都比较小,限制某一个参数权值过大,可以很好的防止过拟合。
过拟合
过拟合是指在训练数据中通过选择复杂度较高的模型使得对训练数据拟合很好,但是对于预测数据往往效果预测效果很差的一种现象。
泛化能力
泛化能力是指一个机器学习算法对于没有见过的样本的预测能力,或者可以说是举一反三的能力。
评价函数
线性回归算法的评价函数就是MSE,RMSE,MAE。
MSE均方误差,表达式为
1
m
∑
i
=
0
m
(
y
i
−
f
(
x
i
)
)
2
\dfrac1{m}\sum_{i=0}^m(y_i-f(x_i))^2
m1∑i=0m(yi−f(xi))2,用 真实值-预测值 然后平方之后求和平均,与代价函数表达式只是隔了一个倍数关系。
RMSE均方根误差,表达式是
1
m
∑
i
=
0
m
(
y
i
−
f
(
x
i
)
)
2
\sqrt{\dfrac1m\sum_{i=0}^m(y_i-f(x_i))^2}
m1∑i=0m(yi−f(xi))2,就是对均方误差MSE开根号。
MAE平均绝对误差,表达式是
1
m
∑
i
=
0
m
∣
y
i
−
f
(
x
i
)
∣
\dfrac1m\sum_{i=0}^m\left|y_i-f(x_i)\right|
m1∑i=0m∣yi−f(xi)∣,平均绝对误差是绝对误差的平均值,能更好地反映预测值与实际值的偏差情况。
2、线性回归的原理
有m个样本,每个样本对应于n维特征和一个结果输出y,其中y是连续值,假设样本为
(
x
0
1
,
x
0
2
,
.
.
.
x
0
3
,
y
0
)
,
(
x
1
1
,
x
1
2
,
.
.
.
x
1
n
,
y
1
)
,
.
.
.
,
(
x
m
1
,
x
m
2
,
.
.
.
x
m
n
,
y
m
)
(x_0^1,x_0^2,...x_0^3,y_0),(x_1^1,x_1^2,...x_1^n,y_1),...,(x_m^1,x_m^2,...x_m^n,y_m)
(x01,x02,...x03,y0),(x11,x12,...x1n,y1),...,(xm1,xm2,...xmn,ym),线性回归模型的形式如下:
f
(
x
i
)
=
θ
0
+
θ
1
x
i
1
+
.
.
.
+
θ
n
x
i
n
=
θ
X
i
f(x_i) = θ^0+θ^1x_i^1+...+θ^nx_i^n = \theta X_i
f(xi)=θ0+θ1xi1+...+θnxin=θXi
其中
θ
i
θ_i
θi是特征
x
i
x_i
xi在模型中的权重,
θ
0
θ_0
θ0是偏置项。
线性回归模型的目标函数(不考虑模型复杂度的影响):
L
o
s
s
=
(
1
/
m
)
∑
i
=
0
m
(
y
i
−
f
(
x
i
)
)
2
=
(
1
/
m
)
∑
i
=
0
m
(
y
i
−
θ
X
i
)
2
Loss = (1/m)\sum_{i=0}^m(y_i-f(x_i))^2= (1/m)\sum_{i=0}^m(y_i - \theta X_i)^2
Loss=(1/m)∑i=0m(yi−f(xi))2=(1/m)∑i=0m(yi−θXi)2
对目标函数进行优化,找到最优的一组参数
(
θ
0
,
θ
1
,
.
.
.
,
θ
i
,
.
.
.
,
θ
n
)
(θ_0,θ_1,...,θ_i,...,θ_n)
(θ0,θ1,...,θi,...,θn)使得满足
m
i
n
(
(
1
/
m
)
∑
i
=
0
m
(
y
i
−
θ
X
i
)
2
)
min((1/m)\sum_{i=0}^m(y_i - \theta X_i)^2)
min((1/m)∑i=0m(yi−θXi)2)即完成了模型的优化。
3、损失函数求解
泰勒展开式是一个用函数在某点的信息描述其附近取值的公式,泰勒展开式的形式如下:
基本形式
f
(
x
)
=
∑
0
∞
f
(
n
)
(
x
0
)
n
!
(
x
−
x
0
)
f(x)=\sum_0^\infty \dfrac{f^{(n)}(x_0)}{n!}(x-x_0)
f(x)=∑0∞n!f(n)(x0)(x−x0)
一阶泰勒展开形式
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
f(x) = f(x_0)+f'(x_0)(x-x_0)
f(x)=f(x0)+f′(x0)(x−x0)
二阶泰勒展开形式
f
(
x
)
=
f
(
x
0
)
+
f
′
(
x
0
)
(
x
−
x
0
)
+
f
′
′
(
x
0
)
(
x
−
x
0
)
2
f(x)= f(x_0)+f'(x_0)(x-x_0)+f''(x_0){(x-x_0)}^2
f(x)=f(x0)+f′(x0)(x−x0)+f′′(x0)(x−x0)2
假设
x
(
t
)
=
x
(
t
−
1
)
+
∇
x
x^(t)=x^{(t-1)}+\nabla x
x(t)=x(t−1)+∇x,将
f
(
x
(
t
)
)
f(x^{(t)})
f(x(t))在
x
(
t
−
1
)
x^{(t-1)}
x(t−1)处进行二阶泰勒展开:
f
(
x
(
t
)
=
f
(
x
(
t
)
+
∇
x
)
=
f
(
x
(
t
−
1
)
)
+
f
′
(
x
(
t
−
1
)
)
∇
x
+
f
′
′
(
x
(
t
−
1
)
)
∇
x
2
f(x^{(t)} = f(x^{(t)}+\nabla x)=f(x^{(t-1)})+f'(x^{(t-1)})\nabla x+f''(x^{(t-1)}){\nabla x}^2
f(x(t)=f(x(t)+∇x)=f(x(t−1))+f′(x(t−1))∇x+f′′(x(t−1))∇x2
3.1 梯度下降法
梯度下降法是最常用的最优化方法。在目标函数为凸函数的问题中,梯度下降法的解是全局最优解。梯度下降法的优化思想是用当前位置负梯度方向作为搜索方向,因为该方向为当前位置的最快下降方向,所以也被称为是最速下降法。
假设t时刻的
θ
(
t
)
\theta^{(t)}
θ(t),(t-1)时刻的参数为
θ
(
t
−
1
)
\theta^{(t-1)}
θ(t−1),且
θ
(
t
)
=
θ
(
t
−
1
)
+
∇
θ
\theta^{(t)} =\theta^{(t-1)}+\nabla \theta
θ(t)=θ(t−1)+∇θ,让目标函数
L
(
θ
(
t
)
)
L(\theta^{(t)})
L(θ(t))在
θ
(
t
−
1
)
\theta^{(t-1)}
θ(t−1)处进行一阶泰勒展开,
L
(
θ
(
t
)
)
=
L
(
θ
(
t
−
1
)
+
∇
θ
)
=
L
(
θ
(
t
−
1
)
)
+
L
′
(
θ
(
t
−
1
)
)
∇
θ
L(\theta^{(t)}) = L(\theta^{(t-1)}+\nabla \theta)=L(\theta^{(t-1)}) +L'(\theta^{(t-1)})\nabla\theta
L(θ(t))=L(θ(t−1)+∇θ)=L(θ(t−1))+L′(θ(t−1))∇θ
由于我们期望的
L
(
θ
(
t
)
)
<
L
(
θ
(
t
−
1
)
)
L(\theta^{(t)})<L(\theta^{(t-1)})
L(θ(t))<L(θ(t−1)),则
L
′
(
θ
(
t
−
1
)
)
∇
θ
<
0
L'(\theta^{(t-1)})\nabla\theta<0
L′(θ(t−1))∇θ<0,取
∇
θ
=
−
L
′
(
θ
(
t
−
1
)
)
α
\nabla\theta=-L'(\theta^{(t-1)})\alpha
∇θ=−L′(θ(t−1))α则一定满足
L
(
θ
(
t
)
)
<
L
(
θ
(
t
−
1
)
)
L(\theta^{(t)})<L(\theta^{(t-1)})
L(θ(t))<L(θ(t−1)),
α
>
0
\alpha>0
α>0,因此取
θ
(
t
)
=
θ
(
t
−
1
)
−
α
L
′
(
θ
(
t
−
1
)
)
\theta^{(t)} = \theta^{(t-1)} -\alpha L'(\theta^{(t-1)})
θ(t)=θ(t−1)−αL′(θ(t−1)),
α
\alpha
α是步长。
在线性回归中,参数
θ
i
θ_i
θi的更新一般是用梯度下降法进行更新,假设目标函数就是代价函数
L
(
θ
)
=
(
1
/
m
)
∑
i
=
0
m
(
y
i
−
θ
X
i
)
2
L(\theta) =(1/m)\sum_{i=0}^m(y_i - \theta X_i)^2
L(θ)=(1/m)∑i=0m(yi−θXi)2,假设时刻t的参数
θ
\theta
θ的值为
θ
(
t
)
\theta^(t)
θ(t),那么用梯度下降进行优化时,(t+1)时刻的参数
θ
(
t
+
1
)
=
θ
(
t
)
−
α
L
′
(
θ
(
t
)
)
\theta^(t+1) = \theta^(t)-\alpha L'(\theta^{(t)})
θ(t+1)=θ(t)−αL′(θ(t)),其中
α
\alpha
α是学习率,
L
′
(
θ
(
t
)
L'(\theta^{(t)}
L′(θ(t)是目标函数的梯度。
3.2 牛顿法
牛顿法的原理与梯度下降法原理相似,只是牛顿法是二阶收敛,梯度下降是一阶收敛。
假设t时刻的
θ
(
t
)
\theta^{(t)}
θ(t),(t-1)时刻的参数为
θ
(
t
−
1
)
\theta^{(t-1)}
θ(t−1),且
θ
(
t
)
=
θ
(
t
−
1
)
+
∇
θ
\theta^{(t)} =\theta^{(t-1)}+\nabla \theta
θ(t)=θ(t−1)+∇θ,让目标函数
L
(
θ
(
t
)
)
L(\theta^{(t)})
L(θ(t))在
θ
(
t
−
1
)
\theta^{(t-1)}
θ(t−1)处进行二阶泰勒展开,
L
(
θ
(
t
)
)
=
L
(
θ
(
t
−
1
)
+
∇
θ
)
=
L
(
θ
(
t
−
1
)
)
+
L
′
(
θ
(
t
−
1
)
)
∇
θ
+
1
2
L
′
′
(
θ
(
t
−
1
)
)
∇
θ
2
=
L
(
θ
(
t
−
1
)
)
+
g
∇
θ
+
1
2
h
∇
θ
2
L(\theta^{(t)}) = L(\theta^{(t-1)}+\nabla \theta) =L(\theta^{(t-1)}) +L'(\theta^{(t-1)})\nabla\theta+\frac12L''(\theta^{(t-1)}){\nabla\theta}^2= L(\theta^{(t-1)})+g\nabla\theta+\frac12h{\nabla\theta}^2
L(θ(t))=L(θ(t−1)+∇θ)=L(θ(t−1))+L′(θ(t−1))∇θ+21L′′(θ(t−1))∇θ2=L(θ(t−1))+g∇θ+21h∇θ2,其中g =
L
′
(
θ
(
t
−
1
)
)
L'(\theta^{(t-1)})
L′(θ(t−1)),h =
L
′
′
(
θ
(
t
−
1
)
)
L''(\theta^{(t-1)})
L′′(θ(t−1)),要使得
L
(
θ
(
t
)
)
L(\theta^{(t)})
L(θ(t))值极小,则需要
g
∇
θ
+
1
2
h
∇
θ
2
g\nabla\theta+\frac12h{\nabla\theta}^2
g∇θ+21h∇θ2值极小,假在
g
∇
θ
+
1
2
h
∇
θ
2
g\nabla\theta+\frac12h{\nabla\theta}^2
g∇θ+21h∇θ2对
∇
θ
\nabla\theta
∇θ求导数等于0时,
g
∇
θ
+
1
2
h
∇
θ
2
g\nabla\theta+\frac12h{\nabla\theta}^2
g∇θ+21h∇θ2取极小值,此时
∇
θ
=
−
g
h
\nabla\theta=-\frac{g}{h}
∇θ=−hg,
θ
(
t
)
=
θ
(
t
−
1
)
+
∇
θ
=
θ
(
t
)
−
g
h
\theta^{(t)} =\theta^{(t-1)}+\nabla\theta=\theta^{(t)} -\frac{g}{h}
θ(t)=θ(t−1)+∇θ=θ(t)−hg
4、sklearn参数详解
sklearn中线性回归模型用如下形式调用:
class sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)
各个参数的含义:
fit_intercept:线性回归模型中是否存在截距,默认True即存在截距,即上面目标函数中的
θ
0
θ_0
θ0
normalize:标准化标志,默认为false,当fit_intercept设置为false的时候,这个参数会被自动忽略。如果为True,回归器会标准化输入参数:减去平均值,并且除以相应的二范数。但是进行标准化还是建议用sklearn.preprocessing.StandardScaler来实现。
copy_X : 默认为True,即在操作是是对X的副本进行操作, 否则X会被改写
n_jobs:计算时设置的任务个数(number of jobs)。如果选择-1则代表使用所有的CPU。这一参数的对于目标个数>1(n_targets>1)且足够大规模的问题有加速作用。
5、逻辑回归
逻辑斯蒂回归模型是一种由条件概率分布表示的分类模型,假设是二元逻辑回归,则条件概率分布如下:
P
(
Y
=
1
∣
x
)
=
(
e
x
p
(
w
x
+
b
)
)
/
(
1
+
e
x
p
(
w
x
+
b
)
)
P(Y=1|x) = (exp(wx+b))/(1+exp(wx+b))
P(Y=1∣x)=(exp(wx+b))/(1+exp(wx+b))
P
(
Y
=
0
∣
x
)
=
1
/
(
1
+
e
x
p
(
w
x
+
b
)
)
P(Y=0|x) = 1/(1+exp(wx+b))
P(Y=0∣x)=1/(1+exp(wx+b))
其中
x
∈
R
n
x ∈ R^n
x∈Rn是输入,
Y
∈
0
,
1
Y ∈ {0,1}
Y∈0,1是输出,
w
∈
R
n
w ∈ R^n
w∈Rn和
b
∈
R
b∈R
b∈R是模型参数,w是权重向量,b是偏置。
对于训练样本
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
(
x
3
,
y
3
)
,
⋯
,
(
x
N
,
y
N
)
{(x_1,y_1), (x_2,y_2), (x_3,y_3), ⋯ ,(x_N,y_N)}
(x1,y1),(x2,y2),(x3,y3),⋯,(xN,yN),其中
x
i
∈
R
n
,
y
i
∈
0
,
1
x_i ∈R^n,y_i ∈ {0,1}
xi∈Rn,yi∈0,1
假设h(x) = P(Y =1|x),预测值
y
^
=
P
(
Y
=
1
∣
x
)
\hat{y}= P(Y =1|x)
y^=P(Y=1∣x)
所以当真实标签y=1时,
P
(
y
∣
x
)
=
y
^
P(y|x) = \hat{y}
P(y∣x)=y^
所以当真实标签y=0时,
P
(
y
∣
x
)
=
1
−
y
^
P(y|x) = 1 - \hat{y}
P(y∣x)=1−y^
因此
P
(
y
∣
x
)
=
y
^
y
(
1
−
y
^
)
(
1
−
y
)
P(y|x) = \hat{y}^y (1 - \hat{y})^{(1-y)}
P(y∣x)=y^y(1−y^)(1−y)
则对于所有的样本的最大似然估计为
∏
i
=
0
n
y
^
y
(
1
−
y
^
)
(
1
−
y
)
\prod_{i=0}^n\hat{y}^y (1 - \hat{y})^{(1-y)}
∏i=0ny^y(1−y^)(1−y)
对上式去对数,不改变它的单调性,并且可以使得相乘变成相加,因此得到
∑
i
=
0
n
(
y
i
l
o
g
y
i
^
+
(
1
−
y
i
)
l
o
g
(
1
−
y
i
^
)
)
\sum_{i=0}^n(y_i log\hat{y_i}+ (1-y_i)log(1 -\hat{y_i }))
∑i=0n(yilogyi^+(1−yi)log(1−yi^))
对于最大似然估计,我们希望得到最大值,但是对于损失函数,我们希望loss越小越好,因此损失函数为如下形式:
L
o
s
s
=
−
∑
i
=
0
n
(
y
i
l
o
g
y
i
^
+
(
1
−
y
i
)
l
o
g
(
1
−
y
i
^
)
)
Loss = -\sum_{i=0}^n(y_i log\hat{y_i}+ (1-y_i)log(1 -\hat{y_i }))
Loss=−∑i=0n(yilogyi^+(1−yi)log(1−yi^))