大规模Session

编程入门 行业动态 更新时间:2024-10-24 14:26:04

大规模<a href=https://www.elefans.com/category/jswz/34/1770527.html style=Session"/>

大规模Session

基于图的推荐系统算法,需要得到item的临近矩阵或者邻接表才能进行进一步计算。

思路梗概:
1.把session记录(行为session,列为item)转化为一个矩阵,方便运算
2.使用转置矩阵和矩阵自身相乘,得到邻接矩阵

Session based 数据例子

假设有五条sessions,5个items

import numpy as np
all_sessions = [[1, 3, 5],[4, 5],[1,2],[1, 4, 5],[1, 5]]

计算item数量

n_node = len(set([item for session in all_sessions for item in session]))
# n_node: 5

session记录转为一个稀疏矩阵

稀疏矩阵大多数元素为0,占用空间太大,借助scipy包中csr_matrix函数进行处理。
csr_matrix的三个输入:
data:一个包含非零元素值的一维数组(或列表)。这个数组表示稀疏矩阵中非零元素的数值。数组的长度应该与 indices 数组的长度相同,它决定了稀疏矩阵中非零元素的个数。

indices:一个包含非零元素在矩阵中的列索引的一维数组(或列表)。这个数组定义了每个非零元素所在的列位置。indices 数组的长度应与 data 数组的长度相同。

indptr:一个包含每行中非零元素的起始和结束位置的一维数组(或列表)。这个数组指示了每行的非零元素在 data 和 indices 数组中的索引范围。通常,indptr 的长度为行数加1,最后一个元素通常是 data 和 indices 数组的总长度。

from scipy.sparse import csr_matrix
def data_masks(all_sessions, n_node):indptr, indices, data = [], [], []indptr.append(0)for j in range(len(all_sessions)):session = np.unique(all_sessions[j])length = len(session)s = indptr[-1]indptr.append((s + length)) # map data&indices to rowfor i in range(length):indices.append(session[i]-1) #列位置data.append(1) # 1表示在同一个session中出现matrix = csr_matrix((data, indices, indptr), shape=(len(all_sessions), n_node))return matrix
# print(data_masks(all_sessions,n_node))
#   (0, 0)	1
#   (0, 2)	1
#   (0, 4)	1
#   (1, 3)	1
#   (1, 4)	1
#   (2, 0)	1
#   (2, 1)	1
#   (3, 0)	1
#   (3, 3)	1
#   (3, 4)	1
#   (4, 0)	1
#   (4, 4)	1

转为邻接矩阵

H_T = data_masks(all_sessions, n_node)
DH = H_T.T
BH_T = H_T
DHBH_T = np.dot(DH,BH_T)
print(DHBH_T)
#  (3, 0)	1
#   (1, 0)	1
#   (4, 0)	3
#   (2, 0)	1
#   (0, 0)	4
#   (1, 1)	1
#   (0, 1)	1
#   (4, 2)	1
#   (2, 2)	1
#   (0, 2)	1
#   (0, 3)	1
#   (4, 3)	2
#   (3, 3)	2
#   (3, 4)	2
#   (4, 4)	4
#   (2, 4)	1
#   (0, 4)	3

0,1代表item1和item2共现次数,对角线(i,i)代表 i t e m i item_{i} itemi​出现次数

更多推荐

大规模Session

本文发布于:2023-12-06 19:31:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1668590.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Session

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!