用户画像构建与协同过滤笔记

本文是对七月在线关于用户画像构建与协同过滤的一个随堂笔记。用户画像部分主要围绕用户画像的核心-文本挖掘、需要哪些用户画像信息、怎么构建这些基本用户画像信息以及倒排索引的案例简单描述展开,协同过滤部分主要是实训内容,需要消化基于用户和基于item的协同过滤改进算法实现。 

目录

需要怎么的用户画像? 

用户画像如何构建

用户画像: 核心是做文本挖掘

关键词keywords提取 的做法

用户画像中的权重计算: 

todo 待总结概括成文字 


推荐系统中最核心的数据之一是 user profile 数据。需要从大量用户历史行为中分析和挖掘各种维度的特征,来刻画用户的兴趣偏好。 

需要怎么的用户画像? 

• 人口学
        •   性别、年龄、地域etc 

内容特征(标签):类别category、主题topic、关键字keyword、实体词entity(属于keyword里更具代表性更细的名词)

        • 喜欢、不喜欢 

        • 长期、短期

 • 协同特征 (主要通过协同过滤算法来找到)

        相似用户 

用户画像如何构建

用户人口学属性: 

        性别/年龄:(推测依据)

                账号注册

                人工标注数据+规则+ 模型

                用户app安装列表/用户行为

                手机品牌

        地域: 

                GPS定位

主要是kaggle的一个用户画像例子。 

用户画像: 核心是做文本挖掘

• 信息检索
• 文本分类
• 关键词提取
• 文本主题模型 

信息检索中的案例:

倒排索引(可以用作召回)

建倒排索引的步骤: 

 

 

todo 倒排索引的代码参考: https://github.com/matteobertozzi/blog-code/blob/master/py-inverted-index/invindex.py

TF-IDF: 

词项频率Tf、 文档频率df ,逆文档频率 idf   。根据tf-idf 的排序。 

关键词keywords提取 的做法

基于统计特征的关键词提取算法
• 核心:利用文档中词语的统计信息抽取文档的关键词 

• 步骤 

        • 文本经过预处理得到候选词语的集合
        • 采用特征值量化的方式从候选集合中得到关键词

        • 关键是采用什么样的特征值量化指标的方式 

 • 特征值量化指标 

        • 基于词权重的特征量化
        • 基于词权重的特征量化主要包括词性、词频、逆向文档频率、相对词频、词长等。 

        • 基于词的文档位置的特征量化
        • 根据文章不同位置的句子对文档的重要性不同的假设来进行的。
        • 文章的前N个词、后N个词、段首、段尾、标题、引言等位置的词具有代表性,这些词作为关键词可以表达整个的主题 

        • 基于词的关联信息的特征量化
                • 词的关联信息是指词与词、词与文档的关联程度信息,包括互信息、hits值、贡献度、依存度、TF-IDF值等。 

文本主题模型 :

        算法LDA,简单介绍了下。感觉这个也不是推荐的重点,如果学NLP需要侧重了解。

用户画像中的权重计算: 

        对应关键字等的权重是如何计算的

        简述: • 记录用户曝光点击历史 • 提取文章相关标签• 曝光且点击加权• 曝光不惦记降权  热门降权• 按照时间衰减 • 归一化 

 最基本的TF-IDF算法的权重归类

 模型召回只是一种召回类别。

时间衰减 (权重需要随着时间进行衰减或增大)

• 牛顿冷却定律数学模型
• w(P , T)表示一个标签T被用于标记用户P的次数
• 不同时间的w(P,T)可以做时间衰减
• 如: 指定45分钟后物体温度为初始温度的0.5,即0.5=1×exp(-a×45),求得α=0.1556。 

用户标签:需要考虑多维度多层次 

• 用户长期/短期行为 

        • 需要分开计算 

        • 短期行为多采用实时架构 

• 用户精确兴趣/泛化兴趣
        • 精确兴趣通过点击行为得到
        • 泛化兴趣通过精确兴趣+近似算法扩充 

其他: 人口学预测: 

talkingData的案例  ,根据数据来预测。

看各种数据 data 目录下。 代码直接运行kaggle上别人的代码的,注意sklearn 版本的可能需要更改远程运行的数据目录可能有点点变化,注意用魔术命令查看当前路径和上下环境路径。

协同过滤: 

todo 待总结概括成文字 

基于改进的物品余弦相似度的推荐

def UserIIF(train, K, N):
    '''
    :params: train, 训练数据集
    :params: K, 超参数,设置取TopK相似用户数目
    :params: N, 超参数,设置取TopN推荐物品数目
    :return: GetRecommendation, 推荐接口函数
    '''
    # 计算item->user的倒排索引
    item_users = {}
    for user in train:
        for item in train[user]:
            if item not in item_users:
                item_users[item] = []
            item_users[item].append(user)
    
    # 计算用户相似度矩阵
    # todo  这块的实现需要在详细看下
    #  本身算法的理解参考: https://zhuanlan.zhihu.com/p/83409812 这个有给值
    #https://blog.youkuaiyun.com/xpsallwell/article/details/86227676  
    sim = {}
    num = {}
    for item in item_users:
        users = item_users[item]
        for i in range(len(users)):
            u = users[i]
            if u not in num:
                num[u] = 0
            num[u] += 1
            if u not in sim:
                sim[u] = {}
            for j in range(len(users)):
                if j == i: continue # 
                v = users[j]
                if v not in sim[u]:
                    sim[u][v] = 0
                # 相比UserCF,主要是改进了这里
                sim[u][v] += 1 / math.log(1 + len(users))
    for u in sim:
        for v in sim[u]:
            sim[u][v] /= math.sqrt(num[u] * num[v])
    
    # 按照相似度排序
    sorted_user_sim = {k: list(sorted(v.items(), \
                               key=lambda x: x[1], reverse=True)) \
                       for k, v in sim.items()}
    
    # 获取接口函数
    def GetRecommendation(user):
        items = {}
        seen_items = set(train[user])
        for u, _ in sorted_user_sim[user][:K]:
            for item in train[u]:
                # 要去掉用户见过的
                if item not in seen_items:
                    if item not in items:
                        items[item] = 0
                    items[item] += sim[user][u]
        recs = list(sorted(items.items(), key=lambda x: x[1], reverse=True))[:N]
        return recs
    
    return GetRecommendation

鸣谢: 

七月在线官方课程

https://github.com/matteobertozzi/blog-code/blob/master/py-inverted-index/invindex.py

### 关于高转速电机的Simulink建模方法 对于高转速电机的Simulink建模,可以采用一种综合的方法来构建其动态模型并进行仿真分析。这种方法通常涉及多个物理域之间的相互作用,包括电磁、机械热学耦合效应[^1]。 #### 动态模型建立 高速永磁同步电机(PMSM)的动态模型可以通过MATLAB/Simulink中的Simscape Electrical工具箱实现。该模型不仅考虑了电磁特性,还集成了机械动力学方程以及可能存在的热损耗影响。具体来说: - **电磁部分**:通过定义绕组电阻、电感矩阵以及反电动势常数等参数描述电机内部磁场行为。 - **机械部分**:引入惯量J、粘滞摩擦系数B以及其他外部负载力矩作为输入变量,形成完整的运动微分方程。 - **热学部分**:考虑到长时间运行下的温度变化对材料性能的影响,在适当位置加入散热机制或者加热源项。 这些组成部分共同构成了一个全面而精确的高速PMSM系统表示形式[^1]。 #### 控制策略实施 针对此类高性能应用场合下的控制需求,则推荐选用先进的自抗扰控制器(ADRC),它能够有效应对因非线性因素引起的各种不确定性外界干扰问题。此同时,为了进一步提升整体表现水平还可以结合其他技术手段如多时间尺度处理方式等等来进行优化改进操作流程效率等方面的工作成果展示如下所示代码片段即为其中一段典型实例程序段落之一: ```matlab % ADRC Controller Design Example Code Snippet function u = adrc_controller(e, de_dt) b0 = 1; % Gain coefficient kp = 2*b0; kd = 5*b0; u = -(kp*e + kd*de_dt); end ``` 此函数实现了基本的比例积分微分(PID)-型结构但增加了额外补偿环节从而增强了鲁棒稳定性特征属性值设定依据具体情况调整即可满足不同工况条件下稳定运转的要求标准[^1]. 另外值得注意的是如果项目当中涉及到更复杂的切换逻辑判断过程那么此时就可以考虑引入Stateflow状态机图形化编辑界面辅助完成相应功能开发任务简化编程难度同时增强可读性维护便利程度. 最后关于如何获取具体的案例资料方面建议访问MathWorks官方网站查阅相关文档资源链接地址如下: https://www.mathworks.com/help/mcb/examples.html?searchHighlight=simulink%20motor%20control&s_tid=doc_srchtitle[^2] 此外也可以参考一些公开发布的学术论文技术报告了解最新的研究成果进展方向以便更好地指导实践工作开展活动计划安排表单模板下载网址连接信息如下给出仅供参考学习用途仅限个人研究目的不得用于商业盈利性质传播分享未经许可不得转载复制摘录部分内容保留版权归属原作者所有单位机构名称全称简称均可接受认可理解支持鼓励原创精神发扬光大传统美德传承优秀文化基因推动社会进步发展贡献力量智慧力量源泉所在之地何尝不是我们每个人心中最柔软温暖的那个角落呢? 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值