逻辑回归模型及梯度下降法收敛性分析

逻辑回归

logistic 回归即对数几率回归,名字虽然叫“回归”,却是一种用于二分类的分类算法,通过训练样本学到一条线,去把不同类别的样本区别开,而不是通过拟合数据点,用sigmoid函数估计样本属于正样本的概率。
逻辑回归因其易于实现,强解释性,以及容易扩展,被广泛用于点击率预估(CTR),计算广告(CA)以及推进系统(RS)等任务中。
学习输入到输出的映射: f : X → Y f: X \rightarrow Y f:XY
X X X:输入, Y Y Y:输出;
定义条件概率 P ( Y ∣ X ) P(Y|X) P(YX),需要满足两个条件:
1. 0 < = P ( Y ∣ X ) < = 1 0<=P(Y|X)<=1 0<=P(YX)<=1
2. ∑ Y P Y ∣ X = 1 \sum_{Y} P{Y|X}=1 YPYX=1

思考:可不可以用线性回归方程 ω T x + b \omega^Tx+b ωTx+b来表示概率

在这里插入图片描述
不能,因为不满足条件概率第一条,通过引入sigmoid函数来改造线性映射模型:
在这里插入图片描述
在这里插入图片描述
ω T x + b \omega^Tx+b ωTx+b放到 S ( x ) S(x) S(x)函数里面,定义域仍为 x ∈ ( − ∞ , + ∞ ) x\in(-\infty,+\infty) x(,+),值域为 ( 0 , 1 ) (0,1) (0,1),对于而二分类问题,可以写成如下形式:
· P ( Y = 1 ∣ X ) = 1 1 + exp ⁡ ( − ω T + b ) P(Y=1|X)=\frac{1}{1+\exp(-\omega^T+b)} P(Y=1X)=1+exp(ωT+b)1
· P ( Y = 1 ∣ X ) = exp ⁡ ( − ω T + b ) 1 + exp ⁡ ( − ω T + b ) P(Y=1|X)=\frac{\exp(-\omega^T+b)}{1+\exp(-\omega^T+b)} P(Y=1X)=1+exp(ωT+b)exp(ωT+b)
两个式子可以合并为:
在这里插入图片描述

决策边界

如何判断?判断标准如何?
决策边界上的点被判给各类的概率相等,由此可得出: w T + b = 0 w^T+b=0 wT+b=0的线性分类面,从而可以确定逻辑回归属于线性分类模型。

如何求解模型参数 ω \omega ω b b b

模型的实例化=定义明确的目标函数,定义优化器。
已经定义了目标函数:
在这里插入图片描述
如何寻找目标函数最优解:
1.判断是否为凸函数
求解最优解时,当找到一个解时,要通过凸函数还是非凸函数来判断它是否是全局最优解,如果是凸函数则是唯一的全局最优解,如果是非凸函数,还要考察其是否为局部最优解,通过调整步长来得到多个局部最优解,最后判断全局最优解。
2.选择最优化算法
GD,SGD,Adamgrad
通过代码实现逻辑回归:

1.首先定义出sigmoid函数

def sigmoid(x):
	reutrn 1. / (1+np.exp(-x))

2.在sigmoid函数的基础上定义出概率函数 h θ ( x ) h_{\theta}(x) hθ(x), X X X为特征矩阵

def model(X,theta):
	reutrn sigmoid(np.dot(X,theta.T))

3.定义目标函数,其中 X X X为特征矩阵, y y y为标签

def cost(X,y,theta):
	left = np.multiply(y,np.log(model(X,theta))
	right = np.multiply(1-y,np.log(1-model(X,theta))
	return np.sum(-left-right) / X.shape[0]

4.定义目标函数的梯度值

def gradient(X,y,theta):
	grad = np.zeros((theta.shape))
	error = (model(X,theta)-y).ravel()
	for j in range(theta.shape[1]):
		temp = np.multiply(error,X[:,j])
		grad[0,j] = np.sum(term) / (2*X.shape[0])
	return grad		

5.迭代求解的终止条件

STOP_ITER = 0
STOP_COST = 1
STOP_GRAD = 2
#三种停止策略
def stopCriterion(stopType, value, threshold):
    if stopType == STOP_ITER:   return value > threshold
    elif stopType == STOP_COST:  return abs(value[-1]-value[-2]) < threshold
    elif stopType == STOP_GRAD:   return np.linalg.norm(value) < threshold

6.打乱样本,原始数据是有规律集中采样,打乱样本更适合训练数据


from numpy import random
def shuffleData(data):
	random.shuffle(data)
	cols = data.shape[1]
	X = data[:,0:cols-1]
	y = data[:,0:cols-1]
	return X,y

7. 训练函数

import time
def descent(data,theta,batchSize,stoptype,threshold,alpha):
	init_time = time.time()
	i = 0 #迭代次数计数器
	k = 0 #mini-batch,训练所需样本数
	X,y = shuffleData(data)
	grad = np.zeros((theta.shape)) #梯度,初始化为0
	costs = [cost(X,y,theta)] #损失函数值
	while True:
		grad = gradient(X[k:k+batchSize],y[k:k+bactchSize],theta)
		k += batchSize
		if(k>X.shape[0]):
			k = 0
			X,y = shuffleData(data)
		theta = theta - alpha*grad #参数更新
		costs.append(cost(X,y,theta))
		i += 1
		if stopType == STOP_ITER:   value = i
        elif stopType == STOP_COST:  value = costs
        elif stopType == STOP_GRAD:  value = grad
        if stopCriterion(stopType, value, threshold): break
        return theta, i, costs, grad, time.time() - init_time

	

逻辑回归梯度下降法收敛性分析

在这里插入图片描述

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值