算法公式
Sigmoid函数
推导过程
逻辑回归模型常用的训练方法是梯度下降法、牛顿法、拟牛顿法等,其中梯度下降是应用最广泛的训练方法;
目标函数:
综合后可以写成:
求解偏导:
模型参数的更新公式:
优缺点
逻辑回归模型将推荐问题转换成一个点击率(Click Through Rate,CTR)预估问题;
优点:
- 可解释性强:不同特征指定不同的权重,代表不同特征的重要程度;
- 多特征综合考虑:相比于矩阵分解等算法,融合多方面特征进行预测;
- 工程上易于并行、模型简单、训练开销小;
局限性:
表达能力不够强,无法进行特征交叉、特征筛选等一系列较为“高级”的操作,因此不可避免地造成信息地损失;
代码实现
def descent(self, data, theta, batch_size, stop_type, thresh, alpha): """梯度下降求解""" init_time = time.time() i = 0 k = 0 train, label = self.shuffle_data(data) # 打乱数据 # grad = np.zeros(theta.shape) # 梯度初始化 costs = [self.cost(train, label, theta)] # 初始损失 value = 0 while True: # 批量计算梯度 grad = self.gradient(train[k:k + batch_size], label[k:k + batch_size], theta) k += batch_size # 当k>n时,打乱数据,k赋值0 if k >= self.n: k = 0 train, label = self.shuffle_data(data) theta = theta - alpha * grad # 模型参数更新公式 costs.append(self.cost(train, label, theta)) # 记录当前损失 i += 1 # 停止迭代的条件判断 if stop_type == self.STOP_ITER: value = i elif stop_type == self.STOP_COST: value = costs elif stop_type == self.STOP_GRAD: value = grad if self.stop_criterion(stop_type, value, thresh): break # 输出参数、迭代次数、损失列表、当前梯度、消耗时间 return theta, i - 1, costs, grad, time.time() - init_time