回归模型可用于预测连续值,分类模型可用于预测离散值。
线性回归是一种回归模型,通过将特征之间进行线性组合,从而得到连续的输出。可用特征组合处理非线性规律。
逻辑回归是分类模型,可用于二分类也可用于多分类问题。是从线性回归中衍生出来的分类策略,通过将S型函数用于线性预测而得到分类任务中每个标签的概率。逻辑回归是一种极其高效的概率计算机制。
一、线性回归
线性回归用于预测连续值。
可用于处理线性问题,也可用于处理非线性问题。对于非线性问题,使用特征组合来解决。
y
′
=
b
+
w
1
x
1
+
w
2
x
2
+
.
.
.
.
+
w
n
x
n
y' = b + w_1x_1 + w_2x_2 + ....+w_nx_n
y′=b+w1x1+w2x2+....+wnxn
x
i
x_i
xi 是输入的特征,
w
w
w是权重,
b
b
b是偏差
线性回归损失函数
均方误差 (MSE) 指的是每个样本的平均平方损失。要计算 MSE,请求出各个样本的所有平方损失之和,然后除以样本数量:
M
S
E
=
1
N
∑
(
x
,
y
)
∈
D
(
y
−
p
r
e
d
i
c
t
i
o
n
(
x
)
)
2
MSE = \frac{1}{N} \sum_{(x,y)\in D} (y - prediction(x))^2
MSE=N1(x,y)∈D∑(y−prediction(x))2
二、逻辑回归
逻辑回归是一种高效的概率计算机制。
可用于二分类问题也可用于多分类问题,输出的结果为概率值。
逻辑回归通过S型函数将逻辑回归的输出固定在0~1之间。
(1)S型函数
y
=
1
1
+
e
−
z
y = \frac{1}{1 + e^{-z}}
y=1+e−z1
z
z
z 表示逻辑回归模型线性层的输出,$z = b + w_1x_1 + w_2x_2 + …+w_nx_n $。
y
′
y^{'}
y′ 是逻辑回归模型针对特定样本
x
x
x的输出。
S型函数图像如下:
(2)逻辑回归损失函数
逻辑回归的损失函数是对数损失函数,定义如下:
L
o
g
L
o
s
s
=
∑
(
x
,
y
)
∈
D
−
y
l
o
g
(
y
′
)
−
(
1
−
y
)
l
o
g
(
1
−
y
′
)
Log Loss = \sum_{(x,y)\in D} -ylog(y') - (1 - y)log(1 - y')
LogLoss=(x,y)∈D∑−ylog(y′)−(1−y)log(1−y′)
“
y
y
y”是有标签样本中的标签。由于这是逻辑回归,因此“
y
y
y”的每个值必须是 0 或 1。
“
y
′
y^{'}
y′”是对于特征集“
x
x
x”的预测值(介于 0 和 1 之间)。
对数损失函数是似然函数的负对数(假设“
y
y
y”属于伯努利分布即两点分布)。
使用最大似然估计求逻辑回归中的一系列参数(权重和偏差)
似然函数
似然函数是一种关于统计模型中参数的函数,在参数估计方法中具有重要作用,表示模型参数的似然性。
概率用于在已知一些参数的情况下,预测接下来的观测所得到的结果,而似然性则是用于在已知某些观测所得到的结果时,对有关事物的性质的参数进行估计。
似然函数也是一种条件概率函数,似然函数取得最大值表示相应的参数能够使得统计模型最为合理。
三、有关Logloss的推导:
1、S型函数的由来
推导过程中会用到贝叶斯分类的知识,有关内容请点击:贝叶斯分类
面对二分类问题,贝叶斯公式可以写为如下形式:
P
(
类
别
1
∣
特
征
)
=
P
(
特
征
∣
类
别
1
)
P
(
类
别
1
)
P
(
特
征
∣
类
别
1
)
P
(
类
别
1
)
+
P
(
特
征
∣
类
别
2
)
P
(
类
别
2
)
P(类别1|特征)= \frac{P(特征|类别1) P(类别1)}{P(特征|类别1) P(类别1)+P(特征|类别2) P(类别2)}
P(类别1∣特征)=P(特征∣类别1)P(类别1)+P(特征∣类别2)P(类别2)P(特征∣类别1)P(类别1)
P
(
c
1
∣
x
)
=
P
(
x
∣
c
1
)
P
(
c
1
)
P
(
x
∣
c
1
)
P
(
c
1
)
+
P
(
x
∣
c
2
)
P
(
c
2
)
P(c1|x)= \frac{P(x|c1) P(c1)}{P(x|c1) P(c1)+P(x|c2) P(c2)}
P(c1∣x)=P(x∣c1)P(c1)+P(x∣c2)P(c2)P(x∣c1)P(c1)
P
(
c
1
∣
x
)
=
1
1
+
P
(
x
∣
c
2
)
P
(
c
2
)
P
(
x
∣
c
1
)
P
(
c
1
)
P(c1|x)= \frac{1}{1+\frac{P(x|c2) P(c2)}{P(x|c1) P(c1)}}
P(c1∣x)=1+P(x∣c1)P(c1)P(x∣c2)P(c2)1
P
(
c
1
∣
x
)
=
1
1
+
e
−
z
P(c1|x)= \frac{1}{1+{e^{-z}}}
P(c1∣x)=1+e−z1
其中:
z
=
l
n
(
P
(
x
∣
c
1
)
P
(
c
1
)
P
(
x
∣
c
2
)
P
(
c
2
)
)
z=ln(\frac{P(x|c1) P(c1)}{P(x|c2) P(c2)})
z=ln(P(x∣c2)P(c2)P(x∣c1)P(c1)),即:
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z)=\frac{1}{1+{e^{-z}}}
σ(z)=1+e−z1
2、LogLoss推导
y
′
=
1
1
+
e
−
z
y ^{'}= \frac{1}{1 + e^{-z}}
y′=1+e−z1
z
z
z 表示逻辑回归中模型线性层的输出,$z = b + w_1x_1 + w_2x_2 + …+w_nx_n $;
y
′
y^{'}
y′ 是逻辑回归模型针对特定样本
x
x
x的输出(某一类别的概率)。
在输入特定样本
x
x
x后,样本为1类的概率为
y
′
y^{'}
y′:
P
(
y
=
1
∣
x
)
=
y
′
P(y=1|x)=y^{'}
P(y=1∣x)=y′
所以有:
P
(
y
∣
x
)
=
{
y
′
y
=
1
1
−
y
′
y
=
0
P(y|x)= \left\{\begin{matrix} y^{'} & y=1\\ 1-y^{'}& y=0 \end{matrix}\right.
P(y∣x)={y′1−y′y=1y=0
综合上式,可以得到:
P
(
y
∣
x
)
=
y
′
y
⋅
(
1
−
y
′
)
(
1
−
y
)
P(y|x)=y^{' y}\cdot(1-y^{'})^{(1-y)}
P(y∣x)=y′y⋅(1−y′)(1−y)
−
l
n
P
(
y
∣
x
)
=
∑
(
x
,
y
)
∈
D
−
y
l
o
g
(
y
′
)
−
(
1
−
y
)
l
o
g
(
1
−
y
′
)
-ln P(y|x) = \sum_{(x,y)\in D} -ylog(y') - (1 - y)log(1 - y')
−lnP(y∣x)=(x,y)∈D∑−ylog(y′)−(1−y)log(1−y′)
故逻辑回归的似然函数为:
L o g l o s s = ∑ ( x , y ) ∈ D − y l o g ( y ′ ) − ( 1 − y ) l o g ( 1 − y ′ ) Logloss= \sum_{(x,y)\in D} -ylog(y') - (1 - y)log(1 - y') Logloss=(x,y)∈D∑−ylog(y′)−(1−y)log(1−y′)
四、softmax
公式如下:
y
i
^
=
p
(
y
=
i
∣
x
)
=
e
(
w
i
T
x
+
b
i
)
∑
j
=
1
n
e
(
w
j
T
x
+
b
j
)
\hat{y_{i}}=p(y = i|\textbf{x}) = \frac{e^{(\textbf{w}_i^{T}\textbf{x} + b_i)}}{\sum_{j=1}^{n} {e^{(\textbf{w}_j^{T}\textbf{x} + b_j)}} }
yi^=p(y=i∣x)=∑j=1ne(wjTx+bj)e(wiTx+bi)
其中n代表类别总数,也是最后一层神经元的数目,P代表i类的概率
请注意,此公式本质上是将逻辑回归公式延伸到了多类别。
softmax loss函数
l
(
y
,
y
~
)
=
∑
i
=
1
n
y
i
l
o
g
y
i
^
l(y,\tilde{y})=\sum_{i=1}^{n}{y_{i}log \hat{y_{i}}}
l(y,y~)=i=1∑nyilogyi^
其中, y y y 为真实值,是一个one_hot编码, y i ^ \hat{y_{i}} yi^ 为预测值(softmax的输出结果)。
one_hot编码:如果样例 x 是类别 i,则 y 的第 i 维的值为 1,其余维的值为 0(例如,x 是类别 2, 共 4 类,则 y 的 值为 [0, 1, 0, 0])
cross entropy交叉熵:
l
(
y
,
y
~
)
=
∑
i
=
1
n
y
i
l
o
g
p
i
^
l(y,\tilde{y})=\sum_{i=1}^{n}{y_{i}log \hat{p_{i}}}
l(y,y~)=i=1∑nyilogpi^
当交叉熵损失函数中的 ** p i ^ \hat{p_{i}} pi^ 为softmax的输出 y i ^ \hat{y_{i}} yi^ **时,两者完全相同。
#logits为最后一层的输出
losses = tf.nn.softmax_cross_entropy_with_logits(
labels=tf.one_hot(labels_placeholder, num_classes),
logits=logits
)
有关cost function导数推导过程请参考:Softmax 函数与交叉熵