逻辑斯蒂回归及其在推荐系统中的应用
完整代码实现和Jupyter运行:(github.com/Myolive-Lin…)
逻辑斯蒂回归(Logistic Regression, LR)是一种广泛应用于分类问题的统计学方法。与线性回归不同,逻辑斯蒂回归用于处理二分类问题,预测某一事件发生的概率。其主要优势在于能够提供概率输出,且具有较好的计算效率。近年来,随着大数据和机器学习技术的快速发展,逻辑斯蒂回归逐渐在推荐系统中展现出重要的应用价值,尤其在用户行为预测和个性化推荐方面。
1. 推荐系统中逻辑回归的核心思想
协同过滤和矩阵分解主要依据用户与物品之间的相似度来进行推荐,而逻辑回归则独辟蹊径,将推荐问题转化为一个分类问题。它通过预测用户对物品产生正反馈(如点击、购买、观看等)的概率,对物品进行排序,从而生成推荐列表。本质上,逻辑回归是将推荐问题转化为点击率(CTR,Click-Through Rate)预估问题,通过对用户在特定情境下与物品交互可能性的预测,实现精准推荐。
2. 推荐过程
在协同过滤中,推荐系统通过分析用户历史行为(如点击、浏览、购买等)来预测用户可能感兴趣的物品。逻辑斯蒂回归通过分析用户与物品之间的交互特征,能够有效地判断用户是否会对某个物品产生兴趣。
例如,假设我们有以下特征:
- 用户的年龄、性别等人口统计信息;
- 用户历史行为,如过去购买过的商品类别;
- 物品的特征,如价格、品牌、评分等。
逻辑斯蒂回归可以利用这些特征建立一个分类模型,预测用户对特定商品的点击概率或购买概率。通过训练逻辑斯蒂回归模型,我们能够输出用户与物品的匹配度,从而生成个性化推荐列表。
3. 评估推荐效果
推荐系统的效果评估通常依赖于一些常见的度量标准,如精确度(Precision)、召回率(Recall)、F1值以及ROC曲线等。逻辑斯蒂回归可以通过输出概率值来生成推荐的排序,并与真实标签进行对比,从而评估推荐的效果。
例如,假设用户是否点击某个推荐物品作为目标变量,逻辑斯蒂回归可以根据推荐的概率值来排序推荐物品。通过与实际行为数据对比,计算精确度、召回率等指标,进而评估推荐系统的性能。
4. 逻辑回归的数学模型
4.1 输入与加权求和
-
输入与加权求和:将特征向量 作为模型的输入,为每个特征赋予相应的权重 ,通过加权求和得到 ,以此来表示各特征在模型中的重要性差异。
-
sigmoid 函数映射:将 输入 sigmoid 函数,其数学表达式为 。sigmoid 函数能够将输入值映射到 0~1 的区间,正好符合点击率的物理意义,即预测用户点击物品的概率。因此,逻辑回归模型的最终输出为 ,其中 b 为偏置项。
4.2 Sigmoid 函数映射
将 输入 Sigmoid 函数,其数学表达式为:
Sigmoid 函数能够将输入值映射到 的区间,正好符合点击率的物理意义,即预测用户点击物品的概率。因此,逻辑回归模型的最终输出为:
其中,( b ) 为偏置项。
5. 逻辑回归模型的训练方法
逻辑回归模型的训练方法众多,其中梯度下降法是应用最为广泛的一种。梯度下降法是一种一阶最优化算法,其核心思想是沿着函数当前点对应梯度的反方向,以规定的步长进行迭代搜索,从而找到函数的局部极小值。
5.1 确定目标函数
在使用梯度下降法来优化逻辑回归模型时,第一步是明确逻辑回归的目标函数。根据上述公式,逻辑回归的数学形式为 。对于一个输入样本 ,其预测结果可以是正样本(类别 1)或负样本(类别 0),对应的概率分别为:
将其联合起来,得到数据点的条件概率表达式:
根据极大似然估计的原理,逻辑回归的目标是最大化样本数据的似然性。通过对样本数据的分析,我们可以得到逻辑回归的目标函数为:
其中 表示在给定特征 和参数 的情况下,样本属于类别 的概率。
5.2 目标函数转换
由于目标函数是连乘的形式,不便于求导,因此我们对其两侧取对数,并乘以系数 ,将求最大值的问题转化为求最小值的问题。经过转换后,目标函数变为:
-
其中m是样本的数量
-
是逻辑回归的预测值,通常通过sigmoid函数表示
-
是第i个样本的标签
5.3 求偏导与梯度下降
对目标函数 中的每个参数求偏导,得到梯度方向。例如,对参数 求偏导的结果为:
- 是第 i 个样本的标签。
- 公式中的 是逻辑回归模型的参数, 是样本i的第 j 个特征。
损失函数对偏置 b 的偏导数计算如下:
-
是第 i 个样本的预测值,计算公式为:
-
是第 i 个样本的真实标签。
在得到梯度之后,我们利用梯度下降法来更新模型参数。梯度下降的更新规则为:
通过以上步骤,我们就完成了逻辑回归模型参数更新的推导过程。 至此,完成了逻辑回归模型的更新推导。
6. 代码实现
def sigmoid(w,x,b):
"""
计算sigmoid函数
Args:
w (ndarray): 权重参数,n*1
x (ndarray): 样本矩阵,m*n
b (scalar): 偏置项
Returns:
p (ndarray): sigmoid计算结果,m*1
"""
z = np.dot(x,w) + b
return 1 / (1 + np.exp(-z))
def compute_cost(X, y, w, b, fw = None):
"""
计算损失函数
Args:
X (ndarray): 样本矩阵,m*n
y (ndarray): 标签矩阵,m*1
w (ndarray): 权重参数,n*1
b (scalar): 偏置项
Returns:
cost (scalar): 损失函数值
"""
m = X.shape[0]
#同样使用矩阵计算
#如果已经计算了fw,就不用再计算一遍了sigmoid
if fw is not None :
cost = -(1/m) * np.sum((y * np.log(fw) + (1 - y) * np.log(1 - fw)))
else:
cost = -(1/m) * np.sum((y * np.log(sigmoid(w, X, b)) + (1 - y) * np.log(1 - sigmoid(w, X, b))))
return cost
def logicstic_regression(X, y, learning_rate = 0.01, num_iterations = 1000):
"""
X: input data
y: output data
learning_rate: learning rate for gradient descent
num_iterations: number of iterations for gradient descent
return: weights and bias
"""
rows,cols = X.shape
w = np.random.rand(cols,1)
b = 0
pbar = tqdm(range(num_iterations),desc ='Logicstic Regression',ncols = 100,unit = 'it')
for i in pbar:
predictions = sigmoid(w,X,b).astype(np.float32)
cost = compute_cost(X, y, w, b,fw = predictions)
# 注意这里用矩阵计算,纬度是m*1
error = predictions - y
dw = (1/rows) * np.dot(X.T,error)
db = (1/rows) * np.sum(error)
w -= learning_rate * dw
b -= learning_rate * db
pbar.set_postfix({"cost": cost})
return w, b
7. 逻辑斯蒂回归的优势
-
高效性 逻辑斯蒂回归的计算复杂度相对较低,适合大规模数据的处理,尤其在实时推荐系统中能够提供较快的预测结果。
-
可解释性强 与深度学习模型不同,逻辑斯蒂回归具有较好的可解释性。其参数(即权重)可以直接反映每个特征对预测结果的影响,为推荐系统的调试和优化提供了便利。
-
概率输出 逻辑斯蒂回归提供的是一个概率值,可以根据实际需求调整推荐的阈值,生成不同的推荐列表。
8. 总结
逻辑回归模型凭借其对多特征的融合能力和成熟的训练方法,在推荐系统中发挥着重要作用。通过将推荐问题转化为分类问题,利用梯度下降法优化模型参数
9 Reference
- 王喆 《深度学习推荐系统》
- 机器学习中的数学——激活函数(一):Sigmoid函数
- 神经网络中的激活函数——Sigmoid函数