/**基于标签的推荐 算法步骤
* 建立数据模型(user-tag,item-tag)
* user-item 相似矩阵
* 推荐
*/
/**
* 标签模型
*/
TagModel <- function(file){
#读取数据
data <- read.csv( file, header=FALSE )
#命名头部
names( data ) <- c( 'id', 'tag' )
data
}
/**
* 建立用户标签数学模型
* file 是数据保存的文件
* tags 是标签模型
*/
UserDataModel <- function( file, tags ){
#读取数据
data <- read.csv( file, header=FALSE )
#重新命名头部
names( data ) <- c( "uid", "iid", "count" )
#建立行列
m <- unique( sort( data$uid ) )
n <- unique( tags$id )
#建立m行n列的空矩阵
M <- matrix( 0, length( m ), length( n ) )
#将数据集映射成坐标
uid_map <- match( data$uid, m )
iid_map <- match( data$iid, n )
#根据坐标组合成新的数集
new_data <- cbind( uid_map, iid_map, data$count )
#讲new_data中的数据写入到矩阵M中
for( i in 1:nrow( new_data ) ){
#行 new_data[i,][1], 列new_data[i,][2]
M[ new_data[i,][1],new_data[i,][2] ] <- new_data[i,][3]
}
#重命名
dimnames( M ) <- list( m, tags$tag )
M
}
/**
* 建立标签广告数学模型
* file 是数据保存的文件
* tags 是标签模型
*/
ItemDataModel <- function( file, tags ){
#读取数据
data <- read.csv( file, header=FALSE )
#重新命名头部
names( data ) <- c( "tagid", "iid", "count" )
#建立m行n列
m <- unique( tags$id )
n <- unique( sort( data$iid ) )
#建立m行n列的空矩阵
M <- matrix( 0, length( m ), length( n ) )
#将数据集映射成坐标
tagid_map <- match( data$tagid, m )
iid_map <- match( data$iid, n )
#根据坐标组合成新的数集
new_data <- cbind( tagid_map, iid_map, data$count )
#讲new_data中的数据写入到矩阵M中
for( i in 1:nrow( new_data ) ){
#行 new_data[i,][1], 列new_data[i,][2]
M[ new_data[i,][1],new_data[i,][2] ] <- new_data[i,][3]
}
#重命名
dimnames( M ) <- list( tags$tag, n )
M
}
/**
* 计算item 和 user之间的相似度
* user是用户标签数据模型
* item是标签item数据模型
*/
Similarit <- function( user, item ){
#建立一个user为行,item为列的空矩阵
nuser <- nrow( user )
nitem <- ncol( item )
S <- matrix( 0, nuser, nitem )
dimnames(S)[[1]] <- rownames(user)
dimnames(S)[[2]] <- colnames(item)
#循环user
for( i in 1:nuser ){
sub_user <- user[i,]
#每个用户都要跟每个有交集的item进行比较
for( ii in 1:nitem ){
sub_item <- item[ ,ii]
#计算单个user和item直接的交集
inter_num <- intersect( which( sub_user !=0 ), which( sub_item != 0 ))
if( length( inter_num ) ){
#循环计算每组相交的元素
sum <- 0
for( z in 1:length( inter_num ) ){
#取sub_user 和 sub_item 之间最小的数为交集
min_inter <- min( sub_user[ inter_num[ z ] ], sub_item[ inter_num[ z ] ] )
#取sub_user 和 sub_item 的并集,用交集除以并集计算相似度
sum_union <- sum( sub_user ) + sum( sub_item )
sum <- sum + min_inter/sum_union
}
S[ i, ii ] <- sum
}
}
}
S
}
/**
* item 如果是广告,那么广告投放算法如下
* iid是item对应的id
* n是投放的用户数
* S是user-item的相似矩阵
*/
Recommender<-function( iid, n, S ){
#取iid对应的列
col <- match( iid, colnames( S ) )
col_data <- S[,col]
#从大到小排序后取前面n个(也可以用order)
sort_data <- sort( col_data, TRUE )
R <- head( sort_data, n)
R
}
/**
* 运行
*/
tags <- TagModel( "tag.csv" )
user_data <- UserDataModel( "user_tag.csv",tags )
item_data <- ItemDataModel( "item_tag.csv",tags )
S <- Similarit( user_data, item_data )
#广告102投放到3个用户
R <- Recommender( 102, 3, S );
没有合适的资源?快使用搜索试试~ 我知道了~
R 语言 基于标签的推荐算法 实现
共5个文件
csv:3个
r:1个
png:1个
0 下载量 137 浏览量
2023-10-22
14:50:41
上传
评论
收藏 107KB ZIP 举报
温馨提示
**算法步骤**: 1. **建立数据模型 (User-Tag, Item-Tag)**: - 从用户和物品的角度,建立一个标签数据模型。这可以是一个表格或矩阵,其中行表示用户,列表示标签,每个单元格中的值表示用户是否与特定标签相关联或感兴趣。用户可以为其喜欢的物品添加标签,或者标签可以通过用户的行为历史自动生成。 - 这一步骤通常需要一个标签系统,其中用户可以选择或创建标签,并将它们与物品相关联。这个过程可以是手动的,也可以使用自动化方法。 2. **User-Item 相似矩阵**: - 基于建立的用户-标签和物品-标签关系,计算用户与物品之间的相似性。这个相似性通常使用一种相似度度量,例如余弦相似度、Jaccard相似度或基于标签的相似性来计算。 - 为了计算用户-物品相似性,你可以构建用户-标签矩阵和物品-标签矩阵,然后通过这两个矩阵计算用户-物品相似矩阵。这将给出用户和物品之间的相似性得分。 - 这个相似性得分表示用户与物品之间的标签相关性,可以用于生成推荐。 3. **推荐**: - 一旦得到用户-物品相似矩阵,就
资源推荐
资源详情
资源评论
收起资源包目录
标签.zip (5个子文件)
标签投放.R 4KB
投放改善.png 113KB
item_tag.csv 195B
user_tag.csv 152B
tag.csv 152B
共 5 条
- 1
资源评论
Mrrunsen
- 粉丝: 8469
- 资源: 473
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功