0.    前言

互联网发展历史中,最绚烂的结果当属搜索引擎,但通用的搜索引擎并不能完全满足用户对于有偏好信息检索的需求,基于关键词的搜索在很多情况下不能精准和深刻的反映用户的潜在需求,搜索引擎始终无法平衡在搜索广度和搜索精准程度之间的矛盾,推荐系统应运而生。

1.    推荐系统概述

a)     初识推荐系统-亚马逊网站

推荐系统算法原理精妙却不复杂,它的迅速成功归因于它着力于对需求的深刻理解,从需求定位,多数情况用户需求很难用简单的关键字来表述;从需求个性,用户需要更加符合个人偏好的查询结果;衍生需求的模糊性,购买行为产生新的购买需求。

对亚马逊网站的简单分析可以得到商品列表这样的组成部分:

-      经常一起购买的产品->打包销售

-      购买此商品的顾客也购买了:协同过滤

-      看过此商品的顾客购买的其它商品:通过浏览行为做出推荐

-      用户商品评论列表:评论文本和打分

b)    推荐系统架构

如下图,从左到右分为三部分,第一部分是环形区域,表示推荐系统的数据来源,第二部分是矩形排列的部分,是算法区域,第三部分是推荐结果,建立物品与用户的关联:

-      第一部分是环形区域,表示一个完整的推荐系统最少存在的三个参与方(一个矩阵)

物品信息

用户信息

用户对物品或者信息的偏好

显式的用户反馈

隐式的用户反馈【浏览信息】

用户偏好在不同企业都存在差异,可以简单了解一下各个因素以及其起作用的方式【图片来自《探索推荐引擎内部的秘密》】:

-      第二部分是算法区域:

基于人口统计学的推荐机制【根据用户基本信息发现用户关联程度】

基于内容的推荐【根据物品或者内容的相关性】

基于协同过滤的推荐【根据用户对物品或者信息的偏好发现物品或者内容本身的相关性或者用户的相关性】,分为:

基于用户的推荐

基于项目的推荐

基于隐语义的推荐模型,也称基于模型的推荐(协同过滤的相似度计算模型),目前精度最高的算法是SVD隐语义模型,当然啊还有其他

c)     开源推荐系统

机器学习的大多数算法有以下特点:

经历了较长时间的验证,稳定性强,一旦部署不轻易修改

执行的多数数据密集型的任务,即在训练阶段属于CPU密集型任务,再分类或者预测阶段属于I/O密集型任务。

算法改进和优化涉及知识产权,脚本代码多数会被反编译不是和具有知识产权的算法编码

2.    协同过滤机器算法

a)     协同过滤

系统过滤通过用户和产品及用户的偏好信息产生推荐的策略,最基本的策略有两种,一是找到具有类似品味的人所喜欢的物品,二是从一个人喜欢的物品中找出类似的物品,即基于用户和基于物品的推荐技术,它们被称为系统过滤。

协同过滤可以利用用户和物品的信息来预测用户的好恶,并发现新的用户还不知道的东西,形成促销策略。它一般在海量的用户中发掘出一小部分和你品味比较类似的,在协同过滤中,这些用户成为领导,根据他们所喜欢的其他东西组织成一个排序的目录作为推荐给你。

首先了解一下协同过滤的模型和算法

数据预处理和UI矩阵

推荐模型:User CF和Item CF

KMeans计算相似性

SVD计算相似性

b)    数据预处理

大型电商五站都提供多种跟踪用户行为的方法,组合这些用户可以参考以下两种方式:

将不同的行为分组

根据不同行为反映用户偏好的程度将它们进行加权,得到用户对于物品的总体偏好

收集了用户行为数据,还需要对数据进行一定的预处理,减噪和归一化是最常用的方法,目的是为了下一步的聚类:

用户行为数据是用户在使用应用过程中产生的,可能存在大量噪声和用户的误操作,通过减噪算法过滤数据中的噪声,一般是离群点,这样可以使我们的分析更加精准

归一化:在计算用户对物品的偏好程度时,不同的数据取值量纲不同,甚至差异很大

使用专门的方法聚类:原始数据都是基于单个用户和单个物品的,这样会导致计算量过大

-      使用Scikit-Learn的KMeans聚类

-      User CF原理

User Item即UI矩阵,行是用户列表,列是物品列表,值是用户对物品的偏好,一般是归一化之后的,基于用户的CF基本思想很简单,基于用户对物品的偏好划分用户类型(聚类),找到最近邻用户(kNN算法),然后将同类用户和相邻用户所喜欢的推荐给当前用户。计算上就是建一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到K邻居后,根据邻居的相似度权重及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。

-      Item CF原理

基于物品的CF原理,在计算时采用物品之间的相似度,而不是从用户的角度,即基于用户对物品的偏好划分物品类型找到最近邻物品将其推荐给当前用户。从计算的角度就是将所有用户对每个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。

-      SVD原理与计算

在协同过滤的模型中我们得到一个UI矩阵,并希望通过此得到基于User CF或者Item CF的相似性,一次作为依据进行推荐,实践中关于相似性计算存在如下一些问题:

物品的人为分类对推荐算法造成影响,分类是认为指定的,不同的分类标准对不同用户带来预测精度的问题

类中物品的相似度是一个消费行为的问题,需要针对不同用户确定不同的权重

即使能够构建权重和分类,也不能完全确定某个用户对某类产品感兴趣的程度

因此,需要一种针对每类用户的不同消费行为来计算对不同物品的相似度的算法,相比与传统的相似性计算方法,SVD的推荐算法的有点在于通过训练样本集对用户和物品建模,训练样本集可以很大,它反映了一段时间内用户与物品的各种综合指标,这样较少了认为预测的敢于,特别是物品或用户的错分,对孤立值不敏感。

c)     KMeans算法

-      算法流程

从N个数据文房中随机选取K个数据文档作为质心

对剩余的每个数据文档测量其到每个质心的距离并把它归到最近的质心的类

重新计算各个类的质心

迭代以上两部直至质心与原质心相等或者小于制定阈值,算法结束

整体流程如下图:

KMeans算法简单容易掌握,数学上可证明收敛,但是也存在一些问题:

算法的初识中心点选择与算法的运行效率密切相关,而随机选取中心点有可能导致迭代次数很大或者局部最优,通常k<<n且t<<n,所以算法经常局部最优收敛

K均值最大问题是要求用户必须实现给出k的个数,k的选择一般基于一些经验值或者多次实验结果

对异常偏离的数据敏感

-      算法改进-二分KMeans算法

二分KMeans的主要思想是:首先将所有点作为一个cu,然后将该簇一分为二。之后选择能最大限度降低聚类代价函数【误差平方和】的簇分为两个簇,以此进行下去,直到簇的数目等于用户给定的数目k为止。隐含的一个原则是:因为聚类的误差平方和能够衡量聚类性能,该值越小表示数据点越接近于他们的质心,聚类效果就越好,所以我们就需要对误差平方和最大的簇进行再一次划分,因为误差平方和越大,表示该簇聚类效果约不好,越有可能是多个簇被当成一个簇,所以我们首先需要对这个簇进行划分。

d)    SVD算法【详见博文】

欢迎扫描二维码关注微信公众号 深度学习与数学   [每天获取免费的大数据、AI等相关的学习资源、经典和最新的深度学习相关的论文研读,算法和其他互联网技能的学习,概率论、线性代数等高等数学知识的回顾]

推荐系统概述——《ML算法原理和实践》学习笔记相关推荐

  1. Hbase原理与实践(学习笔记一:基本概念):

    相关笔记: <Hbase原理与实践>读书笔记--1.HBase概述_凯哥多帅哦的博客-CSDN博客_hbase的实现原理1.1 HBase前世今生Google当年风靡一时的"三篇 ...

  2. NB-IoT从原理到实践 学习笔记 part1-8

    PART A 四大特性篇 第一讲 NB-IoT基本介绍 Narrow Band Internet of Things 5G LTE-V Wifi.UWB LPWA,eMTC BT.Zigbee NB- ...

  3. 数据降维--------主成分分析(PCA)算法原理和实现学习笔记

    1 主成分分析背景 '''PCA计算步骤(思想是把数据投影到方向向量使数据集的特征向量到方向向量的垂线长度最短) 1.去平均 2.计算协方差矩阵 3.计算协方差矩阵的特征向量和特征值 4.将特征值从小 ...

  4. NB-IoT从原理到实践 学习笔记 Part 13-19 NRS,NPBCH,NPDCCH,NPDSCH,NPRACH,NPUSCH,DMRS

    第13讲 NB-IoT下行参考信号 NRS Narrow-band Reference Signal CRS公式 资源映射 NRS的主要作用是用来做下行测量,仅在NPBCJ.NPDCCH.NPDSCH ...

  5. Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

    文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...

  6. 新书推荐 |《计算机安全:原理与实践(原书第4版)》

    新书推荐 <计算机安全:原理与实践(原书第4版)> 长按二维码 了解及购买 深入浅出地介绍计算机安全的原理,计算机安全领域的知名教材. 编辑推荐 本书作者William Stallings ...

  7. LSA/LSI算法原理和实践

    本篇文章主要转载自LSI/LSA算法原理与实践Demo 目录: 1.使用场景 2.优缺点 3.算法原理 3.1.传统向量空间模型的缺陷 3.2.Latent Semantic Analysis (La ...

  8. 【操作系统】进程调度(3):RR(轮转) 算法 原理与实践

    0 前言 接上一篇文章:进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践 1 前提铺垫 除了与上一篇相同的,这里介绍新的基础知识. 1.1 三种类型的程序 计算密集型(CPU导向) 输 ...

  9. kmeans算法原理以及实践操作

    原文:http://www.cnblogs.com/dudumiaomiao/p/5839905.html kmeans算法原理以及实践操作(多种k值确定以及如何选取初始点方法) kmeans一般在数 ...

  10. 【操作系统】进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践

    0 前言 接上一篇文章:进程调度(2a):SJF(短任务优先) 算法 原理与实践 1 前提铺垫 与上一篇同. 2 STCF 原理 STCF(Shortest Time-to-Completion Fi ...

最新文章

  1. python框架实例_Python之Flask框架项目Demo入门
  2. vuex结合php,vuex中store的使用介绍(附实例)
  3. 技术人生:遇到挫折,不可轻言放弃。
  4. vue中mixin的一点理解
  5. 探讨后端选型中不同语言及对应的Web框架
  6. vc++深入详解学习-NO.3
  7. 大促背后的流量利器|手淘push升级 比你更懂你
  8. 360手机助手游戏怎么实名认证 360手机助手下载的游戏怎么关了悬浮窗
  9. MySQL 体系结构
  10. 05-Elasticsearch官网译文(1)
  11. error: #5: cannot open source input file “stm32f10x_lib.h“:
  12. 单页面应用的路由问题
  13. paip.php调试不能显示局部变量内容with xdebug
  14. 小米笔记本计算机在哪里,小米笔记本电脑配置在哪里查看
  15. 工行u盾显示316_详解工行U盾及使用方法和注意事项
  16. STM32机器人控制开发教程No.4 使用串口通信控制电机(基于HAL库)
  17. matlab cy68013,基于MATLAB的码垛机械手运动学分析与仿真
  18. html去除分页符,分页符怎么删除 删除分页符的两种方法
  19. 2020-04-03-功能性光学脑成像
  20. 伊朗加油站遭网络攻击致瘫痪、Babuk勒索软件源代码泄露|10月28日全球网络安全热点

热门文章

  1. Linux Mysql5.6安装
  2. [Windows API] Listing the Files in a Directory,可用来数文件夹下有多少个子文件(夹)...
  3. 测试:第二章 测试过程
  4. 对理想团队模式的构想以及对软件流程的理解
  5. android布局及其常用属性
  6. libgdx学习记录5——演员Actor
  7. Quora 用了哪些技术 ?(zz)
  8. 中国移动下一代移动技术将选择LTE
  9. jar包add to build path与放入lib下
  10. oracle数据表通过使用SYS_GUID()自动生成唯一主键