Logistic Regression

定义

对于一个样本x,模型模拟函数如下:
y ^ = a = σ ( z ) = σ ( w T x + b ) \hat{y}=a=\sigma(z)=\sigma(w^Tx+b) y^=a=σ(z)=σ(wTx+b)
σ ( z ) = 1 1 + e − z \sigma(z)=\frac 1{1+e^{-z}} σ(z)=1+ez1
z = w T x + b z=w^Tx+b z=wTx+b
其中, σ ( z ) \sigma(z) σ(z)是 sigmod 函数称为激活函数,如下图所示。可依据器输出的值大小对样本x进行分类。由于其值域范围为0~1,可以将该激活函数的输出看做为某一类别的概率。
在这里插入图片描述

loss function & cost function

loss function:
l ( y ^ , y ) = − y l o g y ^ − ( 1 − y ) l o g ( 1 − y ^ ) l(\hat{y},y)=-ylog\hat{y}-(1-y)log(1-\hat{y}) l(y^,y)=ylogy^(1y)log(1y^)
cost function:
J ( w , b ) = 1 m ∑ i = 1 m l ( y ^ ( i ) , y ( i ) ) = − 1 m ∑ i = 1 m y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) J(w,b)=\frac 1m\sum_{i=1}^{m}l(\hat{y}^{(i)},y^{(i)})=-\frac 1m\sum_{i=1}^{m}ylog\hat{y}+(1-y)log(1-\hat{y}) J(w,b)=m1i=1ml(y^(i),y(i))=m1i=1mylogy^+(1y)log(1y^)
其中,m表示样本个数i表示样本个数。损失函数 l l l衡量的时单个样本的预测值和实际值的差距,代价函数cost衡量的时所有样本的差距

代价函数的解释

交叉熵CEH的角度

补充:交叉熵和KL散度正相关,都反映了假设分布到真实分布的距离(无效性)

对于一个假设分布q 和一个真实已确定的分布p,其交叉熵公式如下:
C E H ( p , q ) = E p [ − l o g ( q ) ] = − ∑ x ϵ X [ p ( x ) l o g q ( x ) ] CEH(p,q)=E_p[-log(q)]=-\sum_{x\epsilon{X}}[p(x)logq(x)] CEH(p,q)=Ep[log(q)]=xϵX[p(x)logq(x)]
其中假设样本数据,为已知分布p, 则对于样本x的概率为: p ( x ) = { y , y = 1 1 − y , y = 0 p(x)=\left\{ \begin{aligned} y &&, && y=1 \\ 1-y &&,&& y=0 \\ \end{aligned} \right. p(x)={y1y,,y=1y=0
其中预测的分布为q,则对于样本x 的概率为:
q ( x ) = q ( y ∣ w , b , x ) = { y ^ , y = 1 1 − y ^ , y = 0 q(x)=q(y|w,b,x)=\left\{ \begin{aligned} \hat{y} &&, && y=1 \\ 1-\hat{y} &&,&& y=0 \\ \end{aligned} \right. q(x)=q(yw,b,x)={y^1y^,,y=1y=0
所以,将上面两个概率带入交叉熵函数,可得: J ( w , b ) = 1 m C E H ( p , q ) = − 1 m ∑ i = 1 m y l o g y ^ + ( 1 − y ) l o g ( 1 − y ^ ) J(w,b)=\frac1mCEH(p,q)=-\frac 1m\sum_{i=1}^{m}ylog\hat{y}+(1-y)log(1-\hat{y}) J(w,b)=m1CEH(p,q)=m1i=1mylogy^+(1y)log(1y^)

极大似然估计的角度

补充:似然函数描述的时在参数条件下,某件事发生的概率,我们要做的就是找到该参数使其概率最大

L = ∏ ( y ^ ) y ( 1 − y ^ ) ( 1 − y ) L=\prod(\hat y)^y(1-\hat y)^{(1-y)} L=(y^)y(1y^)(1y)
也就是目标为: − L m i n ( w , b ) -L_{min}(w,b) Lmin(w,b), 对其求对数,转换成对数似然就可得到代价函数。

求解

求解的基本方法梯度下降

求梯度

1、目标是找到,w,b使得代价函数最小,因此需要求,损失函数对w 和 b的偏导。(复合函数求导,chain rule)
∂ l ∂ w = ∂ l ∂ y ^ ∗ ∂ y ^ ∂ z ∗ ∂ z ∂ w \frac{\partial l}{\partial w}=\frac{\partial l}{\partial \hat{y}}*\frac{\partial \hat{y}}{\partial z}*\frac{\partial z}{\partial w} wl=y^lzy^wz
∂ l ∂ b = ∂ l ∂ y ^ ∗ ∂ y ^ ∂ z ∗ ∂ z ∂ b \frac{\partial l}{\partial b}=\frac{\partial l}{\partial \hat{y}}*\frac{\partial \hat{y}}{\partial z}*\frac{\partial z}{\partial b} bl=y^lzy^bz

2、activation function sigmoid , σ ( z ) = 1 1 + e − z \sigma(z)=\frac 1{1+e^{-z}} σ(z)=1+ez1 的导数为:

σ ′ ( z ) = d y ^ d z = σ ( z ) ( 1 − σ ( z ) ) = y ^ ( 1 − y ^ ) \sigma^{'}(z)=\frac{d\hat y}{dz}=\sigma(z)(1-\sigma(z))=\hat y(1-\hat y) σ(z)=dzdy^=σ(z)(1σ(z))=y^(1y^)
3、loss函数对 y ^ \hat{y} y^求偏导
∂ l ∂ y ^ = − y y ^ + 1 − y 1 − y ^ \frac{\partial l}{\partial \hat{y}}=-\frac{y}{\hat y}+\frac{1-y}{1-\hat y} y^l=y^y+1y^1y
4、x为n维向量
∂ z ∂ w 1 = x 1 \frac{\partial z}{\partial w_1}=x_1 w1z=x1
∂ z ∂ w 2 = x 2 \frac{\partial z}{\partial w_2}=x_2 w2z=x2

∂ z ∂ w n = x n \frac{\partial z}{\partial w_n}=x_n wnz=xn
∂ z ∂ b = 1 \frac{\partial z}{\partial b}=1 bz=1

对于样本x依据链式法则:
∂ l ∂ w = ( y ^ − y ) x \frac{\partial l}{\partial w}=(\hat y-y)x wl=(y^y)x
因此:
∂ J ∂ w = 1 m ∑ i = 1 m ( y ^ i − y i ) x i = 1 m X ( Y ^ − Y ) T \frac{\partial J}{\partial w}=\frac{1}{m}\sum_{i=1}^{m}(\hat y^{i}-y^{i})x^{i}=\frac{1}{m}X(\hat Y-Y)^{T} wJ=m1i=1m(y^iyi)xi=m1X(Y^Y)T
∂ l ∂ b = 1 m ∑ i = 1 m ( y ^ − y ) \frac{\partial l}{\partial b}=\frac{1}{m}\sum_{i=1}^{m}(\hat y-y) bl=m1i=1m(y^y)
注: X为nxm维的矩阵,你为特征维度,m为样本个数

迭代求解

repeat:{
w : w − α ∂ w w : w-\alpha \partial w w:wαw
b : b − α ∂ b b:b-\alpha \partial b b:bαb
}

代码示例

```python
# 这段代码用来解释说明 logistic regression
import numpy as np
# activation functuion: sigmoid
def sigmoid(z):
	"""
	z 为入参,类型为 array 数组
	retuen :sigmoid(z)
	"""
	s= 1.0/(1+np.exp(-z))
	return s
	
# 定义初始化参数函数
def initialize_w_b(dim):
	"""
	w: 维度为(dim,1)
	这里 w 和  b 都初始化 为0,也可以采用其他方法,注意出现 梯度消失 的现象。
	"""
	w =  np.zeros((dim,1),dtype=float)
	b = 0
	assert(isinstance(b,float) or ininstance(b,int))
	return w,b
	
# 定义函数 完成 前向计算和反向梯度求解
def propagate(w,b,X,Y):
	"""
	w : shape (nx,1)
	b : bias
	X : shape (nx,number of examples)
	Y : shape (1,number of examples)

	return:
	cost -- 计算代价
	dw   --  w的梯度
	db   --  b的梯度
	"""
	# forward propagatioon
	m  = X.shape[1]  # the number of sample
	A =sigmoid(np.dot(w.T,x)+b)  # the resulr of activation function
	cost = -np.sum((Y*np.log(A)+(1-Y)*np.log(1-A)),axis=1)/m

	# backward propagation
	dw = np.dot(X,(A-Y).T)/m
	db = np.sum((A-Y))/m
	assert(dw.shape == w.shape)
	assert(sb.dtype == float)
	cost = np.squeeze(cost)   
	assert(cost.shape == ())

	# build result
	grads ={"dw":dw,"db":db}
	return grads , cost

# 定义迭代优化求解的函数
def optimize(w,b,X,Y,num_iterations,learning_rate,print_cost=False):
	"""
	简单的梯度下降迭代优化求解
	"""
	costs = []
	for i in range(num_iterations):
		# 计算当前代价 和 参数梯度
		grads, cost = propagate(w,b,X,Y)
		# 更新参数
		dw = grads["dw"]
		db = grads["db"]
		w = w=learning_rate*dw
		b = b-learning-rate*db
		if i%100 ==0:
			costs.append(cost) 
		if print_cost and i % 100 == 0:
			print ("Cost after iteration %i: %f" %(i, cost))
	params = {"w":w,"b":b}
	grads = {"dw":dw,"db":db}
	return params, grads , costs

#end ,至此完成一个logistic regression 训练的所有函数都已经实现完毕。

参考

logistics regression wikipedia
Interpretable Machine Learning
stochastic gradient descent wikipedia
Cross entropy wikipedia

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值