1 简介
logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。
2 逻辑回归过程
逻辑回归大致有两个个过程:线性变化、logistic函数
2.1 线性变化
Y = x w T Y = xw^T Y=xwT
2.2 logistic函数
logistic函数主要是将Y映射到(0,1)之间,并且导数比较好计算
g
(
z
)
=
1
1
+
e
−
z
g(z) = \frac{1}{1+e^{-z}}
g(z)=1+e−z1
将上一步的结果代入,
g
w
(
x
)
=
1
1
+
e
−
x
w
T
g_w(x)=\frac{1}{1+e^{-xw^T}}
gw(x)=1+e−xwT1
3 逻辑回归梯度下降更新公式
3.1 损失函数
逻辑回归的损失函数有几种理解方式,这里从最大似然估计角度出发。
概率分布函数可以统一写成:
p
(
y
∣
x
;
w
)
=
(
g
w
(
x
)
)
y
(
1
−
g
w
(
x
)
)
(
1
−
y
)
p(y|x;w)=(g_w(x))^y(1-g_w(x))^{(1-y)}
p(y∣x;w)=(gw(x))y(1−gw(x))(1−y)
似然函数:
L
(
w
)
=
∏
i
p
(
y
i
∣
x
i
;
w
)
L(w) = \prod_i{p(y_i|x_i;w)}
L(w)=i∏p(yi∣xi;w)
l ( w ) = − l o g ( L ( w ) ) = − ∑ i y i l o g ( g w ( x i ) ) − ∑ i ( 1 − y i ) l o g ( 1 − g w ( x i ) ) l(w)=-log(L(w))=-\sum_i{y_ilog {(g_w(x_i))}}-\sum_i{(1-y_i)log {(1-g_w(x_i))}} l(w)=−log(L(w))=−i∑yilog(gw(xi))−i∑(1−yi)log(1−gw(xi))
3.2 梯度下降更新公式
∂ l ( w ) ∂ w j = − ( y − g w ( x ) ) x j \frac{\partial l(w)}{\partial w_j}=-(y-g_w(x))x_j ∂wj∂l(w)=−(y−gw(x))xj
w j = w j − a ∂ l ( w ) ∂ w j w_j=w_j-a\frac{\partial l(w)}{\partial w_j} wj=wj−a∂wj∂l(w)
4 python实现
使用TensorFlow2,keras API实现
from keras import losses ,optimizers
from keras import layers
import keras
import tensorflow as tf
import numpy as np
def build_model():
model = keras.Sequential([
layers.Dense(1, activation='sigmoid',input_shape=[3],use_bias = True)
])
# 优化器使用Adam
adam = optimizers.Adam(lr=0.01)
# 损失函数使用二进制交叉熵函数,评价函数使用二分类评价函数
model.compile(loss='binary_crossentropy',
optimizer=adam,
metrics=['binary_accuracy'])
return model
def prepare_data(n):
x = np.arange(n)
x = np.append(x,[np.sin(x),np.cos(x)])
x = x.reshape((3,n)).T
y = np.zeros((n))
for i in range(x.shape[0]):
if x[i][0]*x[i][1]*x[i][2] >n/2:
y[i]=1
else :
y[i]=0
return (x,y)
(x,y)=prepare_data(1000)
model=build_model()
model.summary()
model.fit(x,y,epochs=30)