【推荐算法 学习与复现】-- 逻辑回归算法族 -- LR
协同过滤仅仅使用有限的用户行为信息,逻辑回归算法模型大多引入用户行为、用户特征、物品特征和上下文特征等,从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相关推荐
- 逻辑回归算法c语言_逻辑回归算法背后的数学
逻辑回归算法背后的数学 看完深蓝学院的机器学习公开课后,对于逻辑回归部分,打算写篇学习笔记记录总结一下,也和大家共同分享. 1 基本思能 逻辑回归(Logistic Regression)和线性回归( ...
- 机器学习算法(3)—— 逻辑回归算法
逻辑回归算法 1 逻辑回归介绍 2 损失及优化 3 逻辑回归的使用 4 分类评估方法 4.1 混淆矩阵 4.2 ROC曲线与AUC指标 4.3 ROC曲线绘制 5 分类中类别不平衡问题 5.1 过采样 ...
- 机器学习算法平台alink_机器学习-逻辑回归算法
1-逻辑回归算法原理推导 逻辑回归算法其实是一个分类算法,是非常经典,优秀的算法.一般我们不知道用哪个分类算法的时候,首先用逻辑回归算法试一试:它不仅可以实现二分类算法,还可以解决多分类问题 逻辑回归 ...
- 逻辑回归模型_联邦学习体系下——逻辑回归模型
联邦学习的体系我们在前期介绍过,这里我们简单回顾一下纵向联邦学习的定义:在两个数据集的用户重叠较多而用户特征重叠较少的情况下,将数据集按照纵向 (即特征维度)切分,并取出双方用户相同而用户特征不完全相 ...
- 推荐算法之逻辑回归模型族
目录 1.协同过滤算法族的不足 2.逻辑回归算法 3.Poly2算法 4.FM算法 5.FFM 1.协同过滤算法族的不足 之前的协同过滤算法族局限在于,它仅仅关注用户与物品的交互信息(受限于共现矩阵) ...
- 深度学习原理-----逻辑回归算法
系列文章目录 深度学习原理-----线性回归+梯度下降法 深度学习原理-----逻辑回归算法 深度学习原理-----全连接神经网络 深度学习原理-----卷积神经网络 深度学习原理-----循环神经网 ...
- 机器学习算法 03 —— 逻辑回归算法(精确率和召回率、ROC曲线和AUC指标、过采样和欠采样)
文章目录 系列文章 逻辑回归 1 逻辑回归介绍 1.1 逻辑回归原理 输入 激活函数 1.2 损失以及优化 2 逻辑回归API介绍 3 案例:肿瘤良性恶性预测 4 分类模型的评估 4.1 分类评估方法 ...
- spark 逻辑回归算法案例_黄美灵的Spark ML机器学习实战
原标题:黄美灵的Spark ML机器学习实战 本课程主要讲解基于Spark 2.x的ML,ML是相比MLlib更高级的机器学习库,相比MLlib更加高效.快捷:ML实现了常用的机器学习,如:聚类.分类 ...
- 基于机器学习逻辑回归算法完成癌症病人的肿瘤是否良性的判断
https://www.toutiao.com/a6630407688360575502/ 2018-12-04 22:46:48 逻辑回归算法 虽然逻辑回归算法的名字中有回归二字,但是它却不是回归算 ...
最新文章
- 原型图Mockplus:怎样使用图片裁切功能
- 还要做手机?罗永浩称还完债就重返科技行业
- js 把字符串格式化成时间
- 大厂螺丝钉还是开源极客?开源新手该怎么选?
- Centos VNC 远程桌面程序的安装使用
- ELK6.0日志从收集到处理完整版教程(二)
- 严数据结构c语言及答案,严蔚敏《数据结构(c语言版)习题集》全答案
- 游戏开发及游戏(2D/3D,Cocos2d Unity)小Demo(进行中)- Android
- 纯CSS3制作优惠券线性UI效果
- C/C++编程学习 - 第16周 ④ 计算分数加减表达式的值
- 新版标准日本语中级_第十四课
- 2019工程伦理(2019秋) 所有答案
- Eclipse多行注释
- 去雾论文A real-time fast defogging system to clear the vision of driver in foggy highway using minimu...
- 【C语言总结】C语言预处理器
- 【程序源代码】微信小程序商城,微信小程序微店
- Java之IK 分词器
- Photoshop打造唯美的蓝色古装外景人物图片
- 工业数字化转型中的数据治理
- 给“习得性无助”者的回信
热门文章
- dota2游戏c语言,新手科普:Dota2操作按键设置和游戏设置详解
- Ubuntu 小企鹅输入法fcitx安装及设置
- eclipse svn 忽略target .settings
- 搜索中词权重计算及实践
- SQL 2012 安装失败解决方案
- 卷影复制服务错误: 调用程序 CoCreateInstance 时的意外错误。hr = 0x8007045b, 系统正在关机。
- 超市积分管理系统(Java+Web+MySQL)
- 【笔记】openwrt - 架构梳理
- 制作一个html文件 效果如下图,网页制作基础知识-习题课件.ppt
- ts:报错Could not find a declaration file for module xxx