推荐系统实践第四章: 利用用户标签

基本上可以通过3种方式联系用户兴趣和物品:

  • 用户喜欢过的物品(item-cf)
  • 用户的好友或者有相似兴趣的好友喜欢过的物品(user-cf)
  • 用户具有哪些feature, 哪些物品保护

之前用了user-cf,item-cf, 现在考虑使用标签进行推荐。

标签是一种无层次化结构的、用来描述信息的关键词。

给物品打标签:

  • 专家、作者
  • 用户

标签系统中存在的问题:

  • 如何基于标签推荐
  • 如何给用户推荐标签

基于标签的推荐系统示例:

利用Delicious数据集:(待链接)

     格式:userID     bookmarkID     tagID     timestamp

方法如书上介绍:

代码如下:

# -*- coding: UTF-8 -*-
‘‘‘
Created on 2014??9??15??

@author: joeyqzhou
‘‘‘

import random

def addValueToMat(theMat,key,value,incr):
    #theMat是字典格式
    #它的value也是字典格式
    if key not in theMat: #如果key没出先在theMat中
        theMat[key]=dict();
        theMat[key][value]=incr;#
    else:
        if value not in theMat[key]:
            theMat[key][value]=incr;
        else:
            theMat[key][value]+=incr;

user_tags = dict();
tag_items = dict();
user_items = dict();
user_items_test = dict();

def InitStat():
    #init:
    data_file = open(‘E:\\RecomDataSet\\Decilious\\bookTag\\user_taggedbookmarks-timestamps.dat‘)
    line = data_file.readline(); ##去掉第一行
    line = data_file.readline();
    while line:
        if random.random()>0.1:##添加xunlianji
            terms = line.split("\t");
            user=terms[0];
            item=terms[1];
            tag=terms[2];
            addValueToMat(user_tags,user,tag,1)
            addValueToMat(tag_items,tag,item,1)
            addValueToMat(user_items,user,item,1)
            line = data_file.readline();
        else:

            addValueToMat(user_items_test,user,item,1)
    data_file.close();   

def Recommend(usr):
    recommend_list = dict();
    tagged_item = user_items[usr];
    for tag_,wut in user_tags[usr]:
        for item_,wit in tag_items[tag_]:
            if item_ not in tagged_item:
                if item_ not in recommend_list:
                    recommend_list[item_]=wut*wit;
                else:
                    recommend_list[item_]+=wut*wit;

InitStat();
#Recommend(8);

recom_len=0;#推荐的总长度
hit=0;#预测准确的个数
test_len=0;#测试集长度

for user in user_items_test:#计算测试集的长度,来计算召回率
    test_len+=user_items_test[user].__len__();

for user in user_items:
    for item in user_items[user]: #item被用户打过的标签至少打过一次
        if user_items[user][item]>0:#如果打过三次以上就推荐
            recom_len+=1;
            if item in user_items_test:
                hit+=1;

print "precision="+str(hit*1.0/recom_len);
print "recall="+str(hit*1.0/test_len);

###利用内置sorted函数排序
#print sorted(user_items[‘8‘].items(),key=lambda dic:dic[1],reverse=True)

把数据集分为10%测试,90%训练,个人程序跑的结果如下:

准确率:1.8%

召回率:5.6%

  • 上面简单的方法可能会造成容易推荐热门,可以利用TF-IDF来优化
  • 对于新用户或者新item,标签比较稀疏,那么可以进行标签扩展。方法有:
    • topic model
    • 利用数据统计标签相似度

标签清理

    • 不是所有标签都反应用户的兴趣(比如“不好笑)
    • 有利于给推荐解释
    • 方法:去掉停止词,合并同义词或者分隔符造成的同义词。
时间: 2024-10-24 23:09:30

推荐系统实践第四章: 利用用户标签的相关文章

推荐系统实践(项亮)— 第4章 利用用户标签数据

标签应用:一种是让作者或专家给物品打标签:另一种是让普通用户给物品打标签(UGC).当一个用户对一个物品打上标签,这个标签一方面描述了用户的兴趣,另一方面则表示了物品的语义,从而将用户和物品联系了起来.标签,是一种重要的特征表现方式. 4.1 UGC标签系统的代表应用 标签系统的最大优势:发挥群体智力,获得对物品内容信息比较准确的关键词描述,而准确的内容信息是提升个性化推荐系统性能的重要资源. Delicious / CiteLike / 豆瓣 / Hulu 4.2 标签系统中的推荐问题 主要问

第四章:用户和组管理

第四章:用户和组管理 1.基本概念 1.1.UID&GID Linux是通过UID和GID号来识别用户和组.对某个文件或程序的访问也是以UID和GID为基础.一个执行中的程序继承了调用它的用户的权利和访问权限. 1.2.Linux用户类型 根用户(0):UID为0的用户,能够访问系统任何文件和程序,而不论root根用户是否有权限.root用户通常称为"超级用户" 系统/服务用户(1-999):UID为1-999.系统保留账号,或者某些服务才能使用的的账号 普通用户(大于1000

软件工程——理论、方法与实践 第四章

第四章  开头讲明软件需求是决定软件开发是否成功的一个关键因素:点明其重要性.软件需求划分为业务需求.用户需求.功能需求和非功能需求.系统需求,各种需求都对软件设计过程极为重要.需求工程过程包括需求获取.需求分析.需求规格说明.需求验证以及需求管理,其中需求获取是在问题及其最终解决方案之间架设桥梁的第一步,其获取方法有:面谈.需求专题讨论会.观察用户工作流程.原型化方法.基于用例方法.需求验证要确定正确性.无二义性.完整性.可验证性.一致性.可修改性以及可跟踪性.需求管理的任务是分析变更影响并控

推荐系统实践(项亮)— 第2章 利用用户行为数据

2.1 用户行为数据简介 用户行为数据可分为显性反馈行为和隐性反馈行为: 用户数据的统一表示: 2.2 用户行为分析 在设计推荐算法之前需要对用户行为数据进行分析,了解数据中蕴含的一般规律可以对算法的设计起到指导作用. 用户活跃度和物品流行度 均近似符合长尾分布:e.g. 物品流行度定义:对用户产生过行为的总数:e.g. 用户活跃度定义:对物品产生过行为的总数 活跃度和流行度的关系:一般新用户倾向于浏览热门的物品,因为他们对网站还不熟悉,只能点击首页的热门物品,而老用户会逐渐开始浏览冷门的物品(

第十四章 提升用户体验 之 设计实现国际化和本地化

1. 概述 把程序设计成可以被多种文化下的用户去使用,这个过程就是 全球化. 全球化又被分成两个部分:国际化和本地化. 国际化 是 设计程序去支持多种文化下的用户的过程. 本地化 是 把 数据.标签.帮助文件.支持文档等翻译成当前用户可理解的过程. 本章内容包括:本地化策略.为UI创建和应用资源文件.设置文化区域.创建附属资源集. 2. 主要内容 2.1 设计本地化策略 未完待续...

第2章 利用用户行为数据

本笔记为自己学习之用,对笔记内容感兴趣的读者还请购买正版书籍<推进系统实践>,尊重作者著作权益! 2.1 用户行为数据简介 2.2 用户行为分析 2.2.1 用户活跃度和物品流行度的分布 Power Law,长尾分布 2.2.2 用户活跃度和物品流行度的关系 基于用户行为数据设计的推荐算法一般称为协同过滤算法,比如: 1.基于邻域的方法(neighborhood-based) 2.隐语义模型(latent factor model) 3.基于图的随机游走算法(random walk on gr

python编程:从入门到实践----第四章&gt;操作列表

一.遍历整个列表 1-1.假设有一个魔术师名单,需要将其中每个魔术师的名字都打印出来. # 用for循环来打印魔术师名单中的名字 magicians=['alice','david','carolina'] for magician in magicians: #这里面的magician和magicians是便于让读者得知for循环在哪个列表中进行遍历 print(magician) #输出结果: alice david carolina 解析以上代码: a. 先定义一个列表 b. 定义一个fo

软件工程理论方法与实践第四章读后感

软件需求从用户角度来说是用户解决问题和达到目标所需的条件或能力,从开发人员角度来说系统或系统部件要满足合同标准规范或其他正式规定文档所需具有的条件或能力.软件功能需求必须根据用户需求来考虑,而且应该与业务需求定义的目标一致,业务需求是组织或客户对于系统地高层次目标要求,定义了项目的远景和范围,项目软件产品的发展方向,功能能够范围,目标客户,和价值来源.用户需求是从用户角度描述的系统功能需求和非功能需求.功能需求描述的是系统应该提供的功能或服务,通常涉及用户或外部系统与该系统之间的交互一般不考虑系

c++程序设计原理与实践 第四章部分答案

1 #include <iostream> 2 using namespace std; 3 4 int main() 5 { 6 int a=1,b=100; 7 int f=1; 8 char c=0; 9 10 while(f<=7 && (b-a)>=1) 11 { 12 cout<<"你的数小等于"<<(a+b)/2<<"吗?(y/n)"; 13 cin>>c; 14