协同过滤仅仅使用有限的用户行为信息,逻辑回归算法模型大多引入用户行为、用户特征、物品特征和上下文特征等,从CF逐步过渡到综合不同特征的机器学习模型。

(1)逻辑回归模型

将用户特征(年龄、性别等)、用户行为(收藏、浏览等)、物品特征(属性、描述等)和上下文特征(当前时间、地点等)转化成数值型特征向量;以点击率为优化目标;利用已有数据进行训练学习模型参数;利用学习完成的模型进行推理预测用户点击率。

代码编写原理参考大多参照《深度学习推荐系统》书籍内容,原理见后面附录。

(2)POLY2模型--特征交叉的开始

防止“辛普森悖论”(数据在分组研究与总体研究时产生的结论可能是相悖的),改造逻辑回归模型,使其具备特征交叉能力。但是人工难以设计最优特征组合,POLY2采用暴力组合方式。

但是无差别的特征交叉使得原本稀疏的特征变得更加稀疏,权重参数量级也由 n 上升到 

(3)FM模型 -- 隐向量特征交叉

将交叉特征权重换成隐向量内积形式,减少参数稀疏性和计算复杂度

(4) FFM模型 -- 引入特征域的概念

FFF在模型训练过程中,需要学习 n 个特征在 f 个域上的 k 维隐向量,使每个特征在与不同域的特征交叉时采用不同的隐向量

(5) GBDT+LR -- 特征工程模型化的开端

LR模型将推荐问题转换为CTR预测分类问题,但是特征工程构建复杂,特征交叉方式也仅能做到二阶(提高交叉维度会产生组合爆炸问题);GBDT进行特征筛选与组合,生成新的离散特征向量;将生成特征作为LR模型输入特征。

  • 引入GBDT,但是树模型不适应高维离散特征

    • 树模型的正则项一般为深度和叶子节点数
    • LR模型对参数W进行正则化,约束了w不可能过大,即不会聚焦个别特征
    • 针对高位离散特征,树模型很有可能根据训练集某些个别特征巧合的实现数据划分

代码复现:

import numpy as np
import pandas as pd
from tqdm import tqdm
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.metrics import roc_auc_score
from matplotlib import pyplot as plt
from sklearn.datasets import make_classificationclass LogisticRegresion:def __init__(self, N):self.theta = np.zeros((1, N))self.N = Ndef __gradient(self, X, y):grad = np.zeros(self.theta.shape)error = (self.forward(X).ravel() - y)for j in range(self.N):grad[0, j] = np.sum(np.multiply(error, X[:, j])) / len(X)return graddef __Jw(self, X, y):"""这个是极大似然估计的目标函数,计算上就是求其最大值~~~但是编程中并不是直接求解,而是利用SGD对齐偏导方向做下降"""part1 = np.multiply(y, np.log(self.forward(X)))part2 = np.multiply(1 - y, np.log(1 - self.forward(X)))return - np.sum(part1 + part2) / len(X)def cross_entropy_loss(self, y, y_):return -np.sum(y * np.log(y_) + (1 - y) * np.log(1 - y_))def __sigmoid(self, y):return 1 / (1 + np.exp(-y))def train(self, data, label, bath_size, alpha, epochs, loss_thresh=0.001):for epoch in tqdm(range(epochs)):for bs in range(len(data) // bath_size - 1):X = data[bs*bath_size : (bs+1)*bath_size]y = label[bs*bath_size : (bs+1)*bath_size]grad = self.__gradient(X, y)self.theta -= alpha*grad# print(self.cross_entropy_loss(label, self.forward(data)))# 提前终止训练,事实上数据是整体做的交叉熵并求和,loss很难特别小if self.cross_entropy_loss(label, self.forward(data)) < loss_thresh:breakdef forward(self, X):return np.squeeze(self.__sigmoid(np.dot(X, self.theta.T)))def predict(self, X):return [1 if x >= 0.5 else 0 for x in self.forward(X)]X, y = make_classification(n_samples=1000, n_features=20, n_clusters_per_class=1)
data = [ {v: k for k, v in dict(zip(i, range(len(i)))).items()}  for i in X]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)def eval_model(y_pred, y_true):print(f"accuracy_score = {accuracy_score(y_true, y_pred)}")print(f"precision_score = {precision_score(y_true, y_pred)}")print(f"recall_score = {recall_score(y_true, y_pred)}")print(f"f1_score = {f1_score(y_true, y_pred)}")print(f"auc = {roc_auc_score(y_true, y_pred)}")lr_model = LogisticRegresion(N=20)
lr_model.train(X_train, y_train, 100, 0.001, 50000)
eval_model(lr_model.predict(X_test), y_test)# 与sklearn库中的 LogisticRegression 对比
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(solver="liblinear")
lr.fit(X_train, y_train)
y_predict_lr = lr.predict(X_test)
eval_model(y_predict_lr, y_test)

红框是自己编写的结果,蓝框是sklearn自带库,相比下,效果还不错~

附录

参考:

1. 《深度学习推荐系统》

2. https://datawhalechina.github.io/fun-rec/

3. 逻辑回归及python代码实现_zacharyzlj的博客-CSDN博客_逻辑回归python代码

【推荐算法 学习与复现】-- 逻辑回归算法族 -- LR相关推荐

  1. 逻辑回归算法c语言_逻辑回归算法背后的数学

    逻辑回归算法背后的数学 看完深蓝学院的机器学习公开课后,对于逻辑回归部分,打算写篇学习笔记记录总结一下,也和大家共同分享. 1 基本思能 逻辑回归(Logistic Regression)和线性回归( ...

  2. 机器学习算法(3)—— 逻辑回归算法

    逻辑回归算法 1 逻辑回归介绍 2 损失及优化 3 逻辑回归的使用 4 分类评估方法 4.1 混淆矩阵 4.2 ROC曲线与AUC指标 4.3 ROC曲线绘制 5 分类中类别不平衡问题 5.1 过采样 ...

  3. 机器学习算法平台alink_机器学习-逻辑回归算法

    1-逻辑回归算法原理推导 逻辑回归算法其实是一个分类算法,是非常经典,优秀的算法.一般我们不知道用哪个分类算法的时候,首先用逻辑回归算法试一试:它不仅可以实现二分类算法,还可以解决多分类问题 逻辑回归 ...

  4. 逻辑回归模型_联邦学习体系下——逻辑回归模型

    联邦学习的体系我们在前期介绍过,这里我们简单回顾一下纵向联邦学习的定义:在两个数据集的用户重叠较多而用户特征重叠较少的情况下,将数据集按照纵向 (即特征维度)切分,并取出双方用户相同而用户特征不完全相 ...

  5. 推荐算法之逻辑回归模型族

    目录 1.协同过滤算法族的不足 2.逻辑回归算法 3.Poly2算法 4.FM算法 5.FFM 1.协同过滤算法族的不足 之前的协同过滤算法族局限在于,它仅仅关注用户与物品的交互信息(受限于共现矩阵) ...

  6. 深度学习原理-----逻辑回归算法

    系列文章目录 深度学习原理-----线性回归+梯度下降法 深度学习原理-----逻辑回归算法 深度学习原理-----全连接神经网络 深度学习原理-----卷积神经网络 深度学习原理-----循环神经网 ...

  7. 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)

    文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...

  8. spark 逻辑回归算法案例_黄美灵的Spark ML机器学习实战

    原标题:黄美灵的Spark ML机器学习实战 本课程主要讲解基于Spark 2.x的ML,ML是相比MLlib更高级的机器学习库,相比MLlib更加高效.快捷:ML实现了常用的机器学习,如:聚类.分类 ...

  9. 基于机器学习逻辑回归算法完成癌症病人的肿瘤是否良性的判断

    https://www.toutiao.com/a6630407688360575502/ 2018-12-04 22:46:48 逻辑回归算法 虽然逻辑回归算法的名字中有回归二字,但是它却不是回归算 ...

最新文章

  1. 原型图Mockplus:怎样使用图片裁切功能
  2. 还要做手机?罗永浩称还完债就重返科技行业
  3. js 把字符串格式化成时间
  4. 大厂螺丝钉还是开源极客?开源新手该怎么选?
  5. Centos VNC 远程桌面程序的安装使用
  6. ELK6.0日志从收集到处理完整版教程(二)
  7. 严数据结构c语言及答案,严蔚敏《数据结构(c语言版)习题集》全答案
  8. 游戏开发及游戏(2D/3D,Cocos2d Unity)小Demo(进行中)- Android
  9. 纯CSS3制作优惠券线性UI效果
  10. C/C++编程学习 - 第16周 ④ 计算分数加减表达式的值
  11. 新版标准日本语中级_第十四课
  12. 2019工程伦理(2019秋) 所有答案
  13. Eclipse多行注释
  14. 去雾论文A real-time fast defogging system to clear the vision of driver in foggy highway using minimu...
  15. 【C语言总结】C语言预处理器
  16. 【程序源代码】微信小程序商城,微信小程序微店
  17. Java之IK 分词器
  18. Photoshop打造唯美的蓝色古装外景人物图片
  19. 工业数字化转型中的数据治理
  20. 给“习得性无助”者的回信

热门文章

  1. dota2游戏c语言,新手科普:Dota2操作按键设置和游戏设置详解
  2. Ubuntu 小企鹅输入法fcitx安装及设置
  3. eclipse svn 忽略target .settings
  4. 搜索中词权重计算及实践
  5. SQL 2012 安装失败解决方案
  6. 卷影复制服务错误: 调用程序 CoCreateInstance 时的意外错误。hr = 0x8007045b, 系统正在关机。
  7. 超市积分管理系统(Java+Web+MySQL)
  8. 【笔记】openwrt - 架构梳理
  9. 制作一个html文件 效果如下图,网页制作基础知识-习题课件.ppt
  10. ts:报错Could not find a declaration file for module xxx