矩阵分解

推荐系统| 基于协同过滤

坚强是说给别人听的谎言 提交于 2019-11-29 23:55:12
基于协同过滤的推荐算法 协同过滤(Collaborative Filtering,CF) 基于近邻的协同过滤     基于用户(User-CF)     基于物品(Item-CF) 基于模型的协同过滤     奇异值分解(SVD)     潜在语义分析(LSA)     支撑向量机(SVM) 1. 协同过滤CF的推荐 基于内容(Content based,CB)主要利用的是用户评价过的物品的内容特征,而CF方法还可以利用其他用户评分过的物品内容 CF 可以解决 CB 的一些局限     物品内容不完全或者难以获得时,依然可以通过其他用户的反馈给出推荐     CF基于用户之间对物品的评价质量,避免了CB仅依赖内容可能造成的对物品质量判断的干扰     CF推荐不受内容限制,只要其他类似用户给出了对不同物品的兴趣,CF就可以给用户推荐出内容差异很大的物品(但有某种内在联系) 分为两类:基于近邻和基于模型 2. 基于近邻的推荐 基于近邻的推荐系统根据的是相同“口碑”准则 是否应该给Cary推荐《泰坦尼克号》? 基于用户的协同过滤(User-CF) 基于用户的协同过滤推荐的基本原理是,根据所有用户对物品的偏好,发现与当前用户口味和偏好相似的“邻居”用户群,并推荐近邻所偏好的物品 在一般的应用中是采用计算“K- 近邻”的算法;基于这 K 个邻居的历史偏好信息,为当前用户进行推荐 User

论文阅读 - Item-Based Collaborative Filtering Recommendation Algorithms

谁说胖子不能爱 提交于 2019-11-29 21:39:40
本文是我在阅读推荐系统经典论文 Item-Based Collaborative Filtering Recommendation Algorithms 时候记录的笔记。 协同过滤算法 协同过滤算法(collaborative filtering algorithm, CF)基于当前用户先前的行为(评分、购买记录等),以及与该用户相似的用户的行为,来给当前用户推荐其可能喜欢的物品(item),或者预测该用户对某物品的喜欢程度。 问题设定是有一组用户 \(\mathcal{U}=\left\{u_{1}, u_{2}, \ldots, u_{m}\right\}\) 和一组物品 \(\mathcal{I}=\left\{i_{1}, i_{2}, \ldots, i_{n}\right\}\) ,每个用户 \(u_i\) 有一组购买、评价过的物品 \(I_{u i}\) 。 这里的用户和物品信息可以构成 user-item 矩阵,用户对物品的交互信息,构成矩阵中的值。矩阵可以是二值的(买过 0、未买过 1),也可以是多值或连续值(用户对物品的评分)。利用这个矩阵,可以用来预测用户对其未交互过的物品的评价值或喜欢的概率,进而可以基于此为用户产生一组推荐。 传统的协同过滤算法会从不同角度进行细分。根据是否需要保存 user-item 矩阵,可以分为 Memory-based CF 和

论文阅读 - Matrix Factorization Techniques for Recommender Systems

不打扰是莪最后的温柔 提交于 2019-11-29 21:38:39
本文为阅读 MF 经典论文 Matrix Factorization Techniques for Recommender Systems 的笔记。 推荐系统算法 从推荐系统做推荐的依据,大体上可以将推荐系统分为两种: 基于内容 协同过滤 基于内容的推荐算法 对于用户,根据个人身份信息或者回答相关问题,来构造用户的特征。对于物品,则根据物品自身的内容,或属性来构造特征。例如电影,其特征可以是类型、风格、参演演员等等。有了用户信息和物品信息之后,将两者特征向量化,然后用某种策略,来给各个用户匹配合适的物品。 基于内容的推荐系统,需要较多的领域知识。用户和物品的特征需要针对不同场景来选择和设计。 协同过滤推荐算法 协同过滤算法依赖于用户过去的行为信息,过去的购买记录、点赞记录、评分等等。协同过滤类的算法往往和领域无关,因为它不直接分析用户和物品自身的属性,只是基于用户与物品之间的交互信息(用户行为)来生成推荐。 协同过滤算法又可分为两大类: 1. Neighborhood methods 这类方法会寻找相似用户或相似物品,以相似关系为依据来生成推荐。包括 Item-based CF 和 User-based CF 两类。 2. Latent factor models latent factor models 也基于 user-item 评分矩阵,但它并不用此矩阵来计算 user 或

Java第三方工具库/包汇总

一个人想着一个人 提交于 2019-11-29 21:33:54
一、科学计算或矩阵运算库 科学计算包: JMathLib 是一个用于计算复杂数学表达式并能够图形化显示计算结果的Java开源类库。它是Matlab、Octave、FreeMat、Scilab的一个克隆,但完全采用纯Java实现。 JSci :Java 科学对象(JSci)开放源代码项目是 Durham(英国 Durham)大学粒子理论中心的三年级研究生 Mark Hale 创立的。JSci 是一个包集合,包含数学和科学类。 使用 JSci,您既可以在 AWT 中也可以在 Swing 中创建简单的条形图、折线图和饼形图。 JSci.swing.JBarGraph 、 JSci.swing.JPieChart 和 JSci.swing.JLineGraph API 组件设计得也很好,这些组件和 AWT 绘图类都遵守 MVC 体系结构。 JScience : http://jscience.org/ JScience 是一个Java的科学计算包 jLab :jLab是数值计算的Java执行环境。该jLab环境的目的是提供一个基于Matlab / Scilab喜欢的科学计算平台所支持的脚本引擎执行的Java语言。 The current jLab ND4J :在JVM上实现快速的科学计算;ND4J是一个开源的数值计算扩展 ,它将 Python中著名的 numpy

python中的矩阵、多维数组

孤者浪人 提交于 2019-11-29 14:44:06
2. 创建一般的多维数组 import numpy as np a = np.array([ 1 , 2 , 3 ], dtype = int ) # 创建1*3维数组 array([1,2,3]) type (a) # numpy.ndarray类型 a.shape # 维数信息(3L,) a.dtype.name # 'int32' a.size # 元素个数:3 a.itemsize #每个元素所占用的字节数目:4 b = np.array([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]],dtype = int ) # 创建2*3维数组 array([[1,2,3],[4,5,6]]) b.shape # 维数信息(2L,3L) b.size # 元素个数:6 b.itemsize # 每个元素所占用的字节数目:4 c = np.array([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]],dtype = 'int16' ) # 创建2*3维数组 array([[1,2,3],[4,5,6]],dtype=int16) c.shape # 维数信息(2L,3L) c.size # 元素个数:6 c.itemsize # 每个元素所占用的字节数目:2 c.ndim # 维数 d = np.array([[ 1 , 2 , 3 ],[ 4 , 5 , 6 ]

python数组和矩阵使用总结

允我心安 提交于 2019-11-29 14:43:08
python数组和矩阵使用总结 1、数组和矩阵常见用法 Python 使用NumPy包完成了对N-维数组的快速便捷操作。使用这个包,需要导入numpy。 SciPy包以NumPy包为基础,大大的扩展了numpy的能力。因此只要导入了scipy,不必在单独导入numpy了!为了使用的方便,scipy包在最外层名字空间中包括了所有的numpy内容。 本文还是区分numpy中实现的和scipy中实现的。 以下默认已经:import numpy as np 以及 impor scipy as sp numpy的基本类型是 多维数组 ,把matrix看做是array的子类。 1.建立矩阵 a1=np.array([1,2,3],dtype=int) #建立一个一维数组,数据类型是int。也可以不指定数据类型,使用默认。几乎所有的数组建立函数都可以指定数据类型,即dtype的取值。 a2=np.array([[1,2,3],[2,3,4]]) #建立一个二维数组。此处和MATLAB的二维数组(矩阵)的建立有很大差别。 同样,numpy中也有很多内置的特殊矩阵: b1=np.zeros((2,3)) #生成一个2行3列的全0矩阵。注意,参数是一个tuple:(2,3),所以有两个括号。完整的形式为:zeros(shape,dtype=)。相同的结构,有 ones() 建立全1矩阵。 empty(

【转】奇异值分解(SVD)

妖精的绣舞 提交于 2019-11-29 11:15:44
转载:http://redstonewill.com/1529/ 普通方阵的矩阵分解(EVD) 我们知道如果一个矩阵 A 是方阵,即行列维度相同(mxm),一般来说可以对 A 进行特征分解: 其中,U 的列向量是 A 的特征向量,Λ 是对角矩阵,Λ 对角元素是对应特征向量的特征值。 举个简单的例子,例如方阵 A 为: 那么对其进行特征分解,相应的 Python 代码为: 1 import numpy as np 2 3 A = np.array([[2,2],[1,2]]) 4 lamda, U = np.linalg.eig(A) # 特征向量和特征值 5 print('方阵 A', A) 6 print('特征值 lamda', lamda) 7 print('特征向量 U', U) 8 9 # 输出 10 # 方阵 A [[2 2] 11 # [1 2]] 12 # 特征值 lamda [3.41421356 0.58578644] 13 # 特征向量 U [[ 0.81649658 -0.81649658] 14 # [ 0.57735027 0.57735027]] 特征分解就是把 A 拆分,如下所示: 其中,特征值 λ1=3.41421356,对应的特征向量 u1=[0.81649658 0.57735027];特征值 λ2=0.58578644,对应的特征向量 u2=

机器学习中的线性代数

◇◆丶佛笑我妖孽 提交于 2019-11-29 10:56:49
第二章 机器学习中的线性代数知识 线性代数作为数学中的一个重要的分支,广发应用在科学与工程中。掌握好线性代数对于理解和从事机器学习算法相关的工作是很有必要的,尤其是对于深度学习而言。因此,在开始介绍深度学习之前,先集中探讨一些必备的线性代数知识。 2.1 标量,向量,矩阵和张量 标量(scalar) :一个标量就是一个单独的数。用斜体表示标量,如 s ∈ R //--> . 向量(vector) :一个向量是一列数,我们用粗体的小写名称表示向量。比如 x //--> ,将向量 x //--> 写成方括号包含的纵柱: x = ⎡ ⎣ ⎢ ⎢ ⎢ ⎢ x 1 x 2 ⋮ x n ⎤ ⎦ ⎥ ⎥ ⎥ ⎥ //--> 矩阵(matrix) :矩阵是二维数组,我们通常赋予矩阵粗体大写变量名称,比如 A ​ //--> 。如果一个矩阵高度是 m ​ //--> ,宽度是 n ​ //--> ,那么说 A ∈ R m × n ​ //--> 。一个矩阵可以表示如下: A = [ x 11 x 21 x 12 x 22 ] //--> 张量(tensor) :某些情况下,我们会讨论不止维坐标的数组。如果一组数组中的元素分布在若干维坐标的规则网络中,就将其称为张量。用 A ​ //--> 表示,如张量中坐标为 ( i , j , k ) ​ //--> 的元素记作 A i , j , k ​ //-

10 协方差矩阵与主成成分分析

梦想与她 提交于 2019-11-29 08:20:27
协方差矩阵 由上,我们已经知道:协方差是衡量两个随机变量的相关程度。且随机变量 之间的协方差可以表示为: 故根据已知的样本值可以得到协方差的估计值如下: 可以进一步地简化为: 如此,便引出了所谓的协方差矩阵: 主成成分分析 尽管从上面看来,协方差矩阵貌似很简单,可它却是很多领域里的非常有力的工具。它能导出一个变换矩阵,这个矩阵能使数据完全去相关(decorrelation)。从不同的角度看,也就是说能够找出一组最佳的基以紧凑的方式来表达数据。这个方法在统计学中被称为主成分分析(principal components analysis,简称PCA),在图像处理中称为Karhunen-Loève 变换(KL-变换)。 根据wikipedia上的介绍,主成分分析PCA由卡尔·皮尔逊于1901年发明,用于分析数据及建立数理模型。其方法主要是 通过对协方差矩阵进行特征分解,以得出数据的主成分(即特征矢量)与它们的权值(即特征值) 。PCA是最简单的以特征量分析多元统计分布的方法。其结果可以理解为对原数据中的方差做出解释:哪一个方向上的数据值对方差的影响最大。 然为何要使得变换后的数据有着最大的方差呢?我们知道,方差的大小描述的是一个变量的信息量,我们在讲一个东西的稳定性的时候,往往说要减小方差,如果一个模型的方差很大,那就说明模型不稳定了。但是对于我们 用于机器学习的数据(主要是训练数据)

从模型到应用,一文读懂因子分解机

拈花ヽ惹草 提交于 2019-11-29 07:49:19
作者丨gongyouliu 编辑丨Zandy 来源 | 大数据与人工智能(ID: ai-big-data) 作者在上篇文章中讲解了《 矩阵分解推荐算法 》,我们知道了矩阵分解是一类高效的嵌入算法,通过将用户和标的物嵌入低维空间,再利用用户和标的物嵌入向量的内积来预测用户对标的物的偏好得分。本篇文章我们会讲解一类新的算法: 因子分解机 ( Factorization Machine ,简称 FM ,为了后面书写简单起见,中文简称为 分解机 ),该算法的核心思路来源于矩阵分解算法,矩阵分解算法可以看成是分解机的特例 (我们在第三节1中会详细说明) 。分解机自从2010年被提出后,由于易于整合交叉特征、可以处理高度稀疏数据,并且效果不错,在推荐系统及广告CTR预估等领域得到了大规模使用,国内很多大厂(如美团、头条等)都用它来做推荐及CTR预估。 本篇文章我们会从 分解机简单介绍、分解机的参数估计与模型价值、分解机与其他模型的关系、分解机的工程实现、分解机的拓展、近实时分解机、分解机在推荐上的应用、分解机的优势 等8个方面来讲解分解机相关的知识点。期望本文的梳理可以让读者更好地了解分解机的原理和应用价值,并且尝试将分解机算法应用到自己的业务中。 一、分解机简单介绍 分解机 最早由Steffen Rendle于2010年在ICDM会议(Industrial Conference on