java对人物画像分级_绘制用户画像——根据用户行为计算标签权重介绍及实现...
上篇博客说到绘制用户画像时根据用户行为计算标签权重很重要,计算标签权重最常用的算法是TF-IDF标签权重算法,但是如何计算并没有详细介绍,那么这篇博客咱们就来详细说说基于TF-IDF算法计算用户标签权重。
TF-IDF算法用以评估一个字词对于一个文件集或一个语料库中的其中一份文件的重要程度,常用于计算标签的重要程度,一个标签的重要程度随着它在一篇文章出现的次数成正比,随着它在整个文档集中出现的次数成反比。
我们用W(P,T)表示一个标签T被用于标记商品P的次数,用TF(P,T)表示这个标签在商品P所有标签中所占的比重。
TF为词频即词条在某文档中出现的频率,TF(P,T)=W(P,T)/ΣW(P,Ti),即TF=该标签标记该商品的次数 / 该商品全部标签个数
IDF为逆向文件频率即标签T在全部标签中的稀缺程度,IDF(P,T)=ΣW(Pi,Ti) / ΣW(Pi,T),即IDF=全部商品个数 / 包含T标签的商品数
实例
标签A:商品1 商品2 商品4 商品6
商品1:标签A 标签C 标签D
商品2:标签B 标签C 标签E
商品3:标签A 标签D
对于标签A,TF(1,A)=1/3,IDF(1,A)=3/2,则该标签对于该商品的重要程度即该标签的权重值=TF*IDF=1/3 * 3/2= 1/2
用户行为表结构
user_id:用户id
tag_id:标签id
tag_name:标签名称,用户某一行为与该标签联系
tag_type:标签类型
action_name:用户行为名称,如搜索,点击,收藏等
action_count:用户该行为的次数
action_time:用户该行为的时间,某年某月某日
weight:该标签的权重
行为类型权重
用户浏览、搜索、收藏、取消收藏等不同行为反映用户对商品的喜爱程度,不同行为的权重也不同,权重值的设置该应根据具体应用场景来设置其值。比如浏览、搜索、收藏代表用户喜欢商品,应设为正值,但是收藏>搜索>浏览,取消收藏代表用户不喜欢该类商品,其权重应设为负值。
时间衰减
一般考虑时间,用户的行为会随着时间的过去,历史行为和当前的相关性不断减弱,例如去年发生的行为和今年发生的行为应该是有衰减逻辑在里面的,在建立与时间衰减相关的函数时,我们可套用牛顿冷却定律数学模型。如果周期小或业务场景稳定,也可以选择忽略这个因素。
行为次数
记录用户在同一天中,同一行为的次数。
标签重要度
代码实现
packagerecommender;
importjava.util.Arrays;
importjava.util.List;
/*** Created by bee on 2020/2/5.
*/
public classtest {
/***calculate the tag frequency
*/
public double tf(Listproduct, String term) {
double termFrequency = 0;
for(String str : product) {
if(str.equalsIgnoreCase(term)) {
termFrequency++;
}
}
return termFrequency /product.size();
}
/***calculate the document frequency
*/
public int df(List>tags, String term) {
int count = 0;
if (term != null && term != "") {
for (Listproduct : tags) {
for(String tag : product) {
if(term.equalsIgnoreCase(tag)) {
count++;
break;
}
}
}
} else{
System.out.println("要计算的tag不能为空");
}
returncount;
}
/***calculate the inverse document frequency
*/
public double idf(List>tags, String term) {
return Math.log(tags.size()/(double)df(tags,term));
}
/*** calculate tf-idf
*/
public double tfIdf(List product, List>tags, String term) {
return tf(product, term) *idf(tags, term);
}
public static voidmain(String[] args) {
List product1 = Arrays.asList("男鞋", "潮流", "秋季", "皮鞋", "英伦","简约");
List product2 = Arrays.asList("简约", "秋季", "运动鞋", "男鞋", "休闲", "时尚");
List product3 = Arrays.asList("女鞋", "日韩", "可爱", "娃娃鞋", "甜美", "名媛风");
List> tags =Arrays.asList(product1, product2, product3);
test calculator = newtest();
double tfidf = calculator.tfIdf(product1, tags, "简约");
System.out.println("TF-IDF (简约) = " +tfidf);
double count = (1.0/6) * Math.log(3.0/2);
System.out.println(count);
}
}
运行结果
java对人物画像分级_绘制用户画像——根据用户行为计算标签权重介绍及实现...相关推荐
- java抠图人物背景图片_人物抠图换背景两种实用方法!
人物抠图在平面设计中是非常常见的,那么到底要如何将图片素材中的人物抠出来,换到新的背景中呢?其中都有哪些要点?下面小编分享给大家两种实用的人物抠图方法,会使用到两种不同的图片编辑软件. 一.PS抠图 ...
- java如何无感知部署_干货!如何平稳用户无感知的完成系统重构升级
前言 我们在实际开发系统的过程当中,很有可能会遇到需要进行系统重构升级的情况,需要重构的原因可能是之前的设计不合理,导致现在维护起来非常的困难,也有可能是现在的业务发展非常迅速,需要进行分库分表了又或 ...
- java抠图人物背景图片_如何进行人物抠图?让你快速完成复杂背景人像的在线抠图...
大多数男生心目中都有一个女神,虽然在其他人眼中不过是普通人,但是在自己眼中她怎么看怎么有魅力.当然对于女神提出的各种各样的"要求"或是请求,你们定然是不会轻易拒绝的.但若是女神需要 ...
- java实现人物关系预测_用 NetworkX + Gephi + Nebula Graph 分析人物关系(上篇)
我们都知道<权利的游戏>在全世界都很多忠实的粉丝,除去你永远不知道剧情下一秒谁会挂这种意外"惊喜",当中复杂交错的人物关系也是它火爆的原因之一,而本文介绍如何通过 Ne ...
- java 账户挤下线提示_运用session来控制用户的异地登录被挤下线情况
在用QQ的过程中我们如果你的账号在另外一台手机上面登录,这是腾讯后台会提醒你异地登录,可能你的账号被盗了,然后你手机上得QQ就会被退出登录,这个时候你就需要重新登录修改密码,以确保账号的安全.那这种被 ...
- java抠图人物背景图片_对外景人物照片精细抠图换背景的PS教程
通道抠图有两个难点:通道部分的处理和背景颜色的更换:通道部分:我们需要用选区来控制高光和暗部,然后分别调亮和压暗,这样发丝细节可以保存完好,跟以往的方法有很大细节上的提高:背景部分:这里用色相/饱和度 ...
- 分布式 java 应用:基础与实践_西研技术大讲堂第二期FRCS应用情况介绍及分布式技术平台能力应用实践...
为制定高质量的技术培训课程,营造崇尚技术的浓厚学习氛围,使研发部组建云计算.分布式框架.用数赋智等专业技术队伍,每周四晚,"西研技术大讲堂"开课啦!第一期<工银磐石(分布式技 ...
- java调用keras theano模型_使用Keras / Theano和LSTM进行多标签文本分类
尝试使用Keras / Theano运行LSTM多标签文本分类 . 我有一个文本/标签csv . 文本是纯文本,标签是数字,总共9个,从1到9 . 我想我没有为这个问题正确配置模型 . 我的代码到目前 ...
- 我的世界java史莱姆生成条件_关于我的世界史莱姆的生成条件分析介绍
关于我的世界史莱姆的生成条件分析介绍.那下面给大家分享的则是我的世界玩家浅谈史莱姆的生存心得哦~有感兴趣的玩家不妨进来看看下面的介绍吧!希望对大家有所帮助. 游戏园我的世界官方群:325049520 ...
- 【BI学习心得03-推荐系统眼中的你——用户画像】
内容目录 1.背景故事 2.概述 3.用户画像流程 3.1整体流程 3.2用户为什么进行标注 3.3用户如何打标签 3.3.1数据结构 3.3.2用户画像模块 3.3.3数据指标体系 3.3.4常见的 ...
最新文章
- 【python】使用python脚本将LFW数据中1672组同一个人多张照片拷贝出来
- parameter缩略语_缩略语
- 关于python语言、下列说法不正确的是-关于Python中的字符串,下列说法错误的是()...
- [译] 你是如何拆分组件的?
- boost::range_result_iterator相关的测试程序
- 树形结构 —— 树与二叉树 —— 树的中心
- 网络七大趋势 媒介将很快彻底消失
- 百度92年程序员因“篡改数据”被抓;运营商辟谣首批 5G 用户被抛弃;特斯拉回应上海工厂摄像头被入侵 | 极客头条...
- Java框架学习顺序是哪些
- js版in_array函数
- [Error Msg] The root link_base has an inertia specified in the URDF, but KDL does not support ...
- Greenplum 分布键 distribute hash分布和随机分布
- Unity3d设置鼠标指针的样式
- Rich Dad Poor Dad
- 掌握模电必需阅读的几本书
- 如何消除图片锯齿 html,Html5 canvas drawImage图片抗锯齿
- varchar和char区别
- 临河三中宏志班2021年高考成绩查询,内蒙古巴彦淖尔市临河三中2018-2019高一下学期第二次月考(宏志)生物试卷 Word版含答案.doc...
- 热修复 移动平台热更新技术背景
- 【node.js】nvm安装最新教程
热门文章
- jbpm5.4 mysql_5.BDF2-JBPM4
- ARM920T的MMU
- CSDN——缩进两个字符
- 简化为“圆弧-直线”的侧方停车路径
- java8 时间加一秒_都9012了,Java8中的日期时间API你还没有掌握?
- 永续公债(or统一公债)的麦考利久期(Macaulay Duration)的计算
- 记录linux历史命令,Linux历史记录命令
- 老公分不到股份?问题根源是创业者人才观缺失
- PowerDesigner 反向工程获取数据库表结构
- 用户画像设计与搭建(附金融行业用户画像案例)