推荐系统实战中LR模型训练(一)

article/2025/9/2 20:46:14

背景:
在“批量导入数据到Redis” 中已经介绍了将得到的itema item1:score1,item2:score2…批量导入到Redis数据库中。本文的工作是运用机器学习LR技术,抽取相应的特征,进行点击率的估计。

点击率(Click-Through-Rate, CTR) 预估点击率 (predict CTR, pCTR) 是指对某个系统将要在某个情形下展现前, 系统预估其可能的点击概率

步骤一:
学习、训练sklearn中自带的LR模型,参考这里

代码如下:(lr.py)

import sys
import numpy as npfrom sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegressiondef load_data():input_data = datasets.load_iris()x_train, x_test, y_train, y_test = train_test_split(input_data.data, input_data.target, test_size = 0.2, random_state = 0)return x_train, x_test, y_train, y_testdef main():print("---------")x_train, x_test, y_train, y_test = load_data()model = LogisticRegression()model.fit(x_train, y_train)print("w: ", model.coef_)print("b: ", model.intercept_)print("precision: ", model.score(x_test, y_test))print("MSE: ", np.mean((model.predict(x_test) - y_test) ** 2))if __name__ == '__main__':main()

执行结果如图1所示:
在这里插入图片描述
上文用到的训练数据集也是sklearn中自带的iris数据集。
该数据集测量了所有150个样本的4个特征,分别是:

  • sepal length(花萼长度)
  • sepal width(花萼宽度)
  • petal length(花瓣长度)
  • petal width(花瓣宽度)

下图2为iris数据集部分数据示意图:
在这里插入图片描述
通过分析iris数据集可得,iris数据集中的特征矩阵为稠密矩阵,由此可见,如果想直接运用sklearn自带的LR算法进行模型训练,则首先要保证输入的数据集的特征为稠密矩阵的形式。不幸的是,现实中很多情况下的数据集的特征一般为稀疏矩阵形式,如下图3所示:(a8a)
在这里插入图片描述
说明: 上图3中数据集的第一列代表数据的分类标签,之后的为特征和对应的评分

步骤二:
将图3所示数据集转化为适合sklearn中LR输入的稠密矩阵形式
代码如下:(lr.py)

import sys
import numpy as npfrom scipy.sparse import csr_matrix
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression#外部输入数据集
data_in = sys.argv[1]#重写数据集加载函数
def load_data():#特征的行号fea_row_list = []#特征的列号fea_col_list = []#标签列表target_list = []#特征对应的评分data_list = []#行索引row_index = 0#最大的特征编号max_col = 0#一行行读数据并解析with open(data_in, 'r') as fd:for line in fd:ss = line.strip().split(' ')label = ss[0]fea = ss[1:]target_list.append(int(label))for fea_score in fea:sss = fea_score.strip().split(':')if len(sss) != 2:continuefeature, score = sssfea_row_list.append(row_index)fea_col_list.append(int(feature))data_list.append(float(score))if int(feature) > max_col:max_col = int(feature)row_index += 1row = np.array(fea_row_list)col = np.array(fea_col_list)data = np.array(data_list)fea_datasets = csr_matrix((data, (row, col)), shape=(row_index, max_col+1)).toarray()#当特征维度过大时,选下面这种方式(加toarray()和不加都是对的),内存不容易爆掉#fea_datasets = csr_matrix((data, (row, col)), shape=(row_index, max_col+1))x_train, x_test, y_train, y_test = train_test_split(fea_datasets, target_list, test_size = 0.2, random_state = 0)return x_train, x_test, y_train, y_test#自带iris数据集加载函数
#def load_data():
#       input_data = datasets.load_iris()
#
#       x_train, x_test, y_train, y_test = train_test_split(input_data.data, input_data.target, test_size = 0.2, random_state = 0)
#
#       return x_train, x_test, y_train, y_testdef main():print("---------")x_train, x_test, y_train, y_test = load_data()model = LogisticRegression()model.fit(x_train, y_train)print("w: ", model.coef_)print("b: ", model.intercept_)print("precision: ", model.score(x_test, y_test))print("MSE: ", np.mean((model.predict(x_test) - y_test) ** 2))if __name__ == '__main__':main()

上文代码将稀疏矩阵转换为稠密矩阵,满足了sklearn中LR模型数据集输入格式要求。代码运行结果如图4所示:
在这里插入图片描述

步骤一和步骤二完成了模型训练的代码部分,今天的文章先写到这里,下一篇中将讲到如何将文本数据数字化为本文图3的稀疏矩阵格式。
原始文本数据为:
用户ID / 物品ID / 收听时长 / 收听的时间点 / 性别 / 年龄段 / 收入 / 籍贯 / 物品名称 / 物品总时长 / 物品标签
在这里插入图片描述


http://chatgpt.dhexx.cn/article/hvnZXgjn.shtml

相关文章

Prometheus TSDB存储原理

Python微信订餐小程序课程视频 https://blog.csdn.net/m0_56069948/article/details/122285951 Python实战量化交易理财系统 https://blog.csdn.net/m0_56069948/article/details/122285941 Prometheus 包含一个存储在本地磁盘的时间序列数据库,同时也支持与远程…

数据库必知必会:TiDB(8)TiDB 数据库 SQL 执行流程

数据库必知必会:TiDB(8)TiDB 数据库 SQL 执行流程 数据库 SQL 执行流程DML语句读流程概述SQL的Parse与CompileSQL的Execute DML语句写流程概述执行 DDL语句流程概要执行 知识点回顾 数据库 SQL 执行流程 在TiDB中三个重要组件: …

时不我待,TSDB崛起正当时

近期有小伙伴问Jesse,为什么你们要在现在这个时点做TSDB,这是个好时点吗?我认为这是个挺好的问题,因为再强的个人也比不上一个团队,再牛的团队也需要顺势而为。我们其实一直在深度思考“Why Now”的问题,因…

时间序列数据库TSDB排名

DB-Engines 中时序列数据库排名 我们先来看一下DB-Engines中关于时序列数据库的排名,这是当前(2016年2月的)排名情况: 下面,我们就按照这个排名的顺序,简单介绍一下这些时序列数据库中的一些。下面要介绍的…

TiDB Server

目录 TiDB Server架构 Online DDL GC 缓存管理 热点小表缓存 例题 TiDB Server架构 Protocol Layer:负责处理客户端的连接 Parse,Compile:负责SQL语句的解析与编译,并生成执行计划 Executor,DistSQL&#xff0…

Prometheus TSDB

TSDB 概述: Head: 数据库的内存部分 Block: 磁盘上持久块,是不变的 WAL: 预写日志系统 M-map: 磁盘及内存映射 粉红色框是传入的样品,样品先进入Head中存留一会,然后到磁盘、内存映射中(蓝色框)。然后当内…

TiDB体系结构之TiDB Server

TiDB体系结构之TiDB Server TiDB ServerTiDB Server主要组成模块SQL语句的解析和编译行数据与KV的转化SQL读写相关模块在线DDL相关模块TiDB的垃圾回收TiDB Server的缓存 TiDB Server TiDB Server的主要作用如下: 处理客户端连接SQL语句的解析和编译关系型数据与KV…

TSDB助力风电监控

各位小伙伴大家好,本期Jesse想再来跟大家聊聊TSDB的应用场景,在此也感谢尹晨所著的《时序数据库在风电监控系统中的应用》一文,其为我们探究TSDB在风电系统中的应用提供了重要的帮助。 本文仅代表个人观点,如有偏颇之处&#xff…

dbt-tidb 1.2.0 尝鲜

作者: shiyuhang0 原文来源: https://tidb.net/blog/1f56ab48 本文假设你对 dbt 有一定了解。如果是第一次接触 dbt,建议先阅读 官方文档 或 当 TiDB 遇见 dbt 本文中的示例基于官方维护的 jaffle_shop 项目。关于此项目的细节介绍&a…

为啥用 时序数据库 TSDB

前言 其实我之前是不太了解时序数据库以及它相关的机制的,只是大概知晓它的用途。但因为公司的业务需求,我意外参与并主导了公司内部开源时序数据库influxdb的引擎改造,所以我也就顺理成章的成为时序数据库“从业者”。 造飞机的人需要时刻…

Prometheus 学习之——本地存储 TSDB

Prometheus 学习之——本地存储 TSDB 文章目录 Prometheus 学习之——本地存储 TSDB前言一、TSDB 核心概念二、详细介绍1.block1)chunks2)index3)tombstone4)meta.json 2.WAL 总结 前言 Prometheus 是 CNCF 收录的第二个项目&…

阿里云IoT物模型上报数据流转到实例内TSDB

阿里云物联网平台上存储的数据最多为30天,为了能让数据永久保存下来,就需要把物联网平台的数据流转到其他的数据库,对于企业版实例,内部有一个实例内的时空数据库TSDB,正好可以利用。下边就介绍一下物联网平台的物模型…

使用TSDB自动检测时序数据的异常情况

本期Jesse就带大家来继续了解一下TSDB的应用问题,小伙伴们,让我们直接步入正题吧。 本文仅代表个人观点,如有偏颇之处,还请海涵~ 现今,每天都有数千亿个传感器产生大量时序数据。公司收集大量数据使得分析…

TSDB 存储引擎介绍

本文介绍 DolphinDB 在2.0版本中新推出的存储引擎 TSDB。 1. OLAP 与 TSDB 适用的场景 OLAP 是 DolphinDB 在2.0版本之前的唯一存储引擎。数据表中每个分区的每一列存为一个文件。数据在表中的存储顺序与数据写入的顺序一致,数据写入有非常高的效率。 OLAP 引擎的…

TSDB与Blockchain

各位小伙伴们我们又见面了,伴随着区块链技术的推广,很多企业也在思考是否将其应用。其实TSDB与区块链有很多共通之处,本期Jesse就来和大家聊聊TSDB与区块链。本文参考了Nicolas Hourcard的文章“You Don’t Need a Blockchain, You Need a Ti…

FlashDB嵌入式数据库之TSDB数据存储解析

一、驱动层:SFUD(Serial Flash Universal Driver) 是一款开源的串行 SPI Flash 通用驱动库 二、中间层:FAL(FLASH ABSTRACTION LAYER))FLASH 抽象层 三、应用层:FlashDB(FlashDB 是一…

时间序列数据库 (TSDB)

参考文档:时间序列数据库 TSDB_时间序列数据库 TSDB-阿里云帮助中心 什么是时序数据库 时序数据是随时间不断产生的一系列数据,简单来说,就是带时间戳的数据。数据可能来自服务器和应用程序的指标、物联网传感器的读数、网站或应用程序上的…

TSDB在高速公路大数据平台的应用

好久没有跟大家聊TSDB的应用场景了,Jesse也在国庆期间进行了补课,今天就跟大家聊聊TSDB在高速公路大数据平台的应用。本文借鉴了郝建明、袁逸涛发表在《上海船舶运输科学研究生学报》的《基于时序数据库的高速公路数据集成平台》一文,感谢二位…

时序数据库(TSDB)

时序数据库(TSDB)是一种特定类型的数据库,主要用来存储时序数据。随着5G技术的不断成熟,物联网技术将会使得万物互联。物联网时代之前只有手机、电脑可以联网,以后所有设备都会联网,这些设备每时每刻都会吐…

TSDB数据库

目录 为什么需要时序数据库: 时间序列数据库的特点: 常见的时间序列数据库: 时间序列数据库存储: 时间序列数据库问题: 参考资料: 内容是在我球的docs上直接复制过来的,懒得写两份&#x…