经常上当当网购书的朋友都知道,当选择了几本书,放入购物车中,然后系统就会推荐你,购买了这两本书的用户还购买了什么书,淘宝等购物网站也有类似的功能。 在推荐系统中还有一个经典的案例,具体我记得不太清楚了,好像是沃尔玛的啤酒和尿布的案例,也是各大BI厂商的经常提起的一个案例,自动推荐系统现在已经是各大电子商务网站必不可少的营销方式了。
另一个类似的应用就是好友推荐系统,经常使用校内的朋友知道,当你加了好多同学后,
系统会自动为你推荐,你很可能认识某某某。而且推荐的还算比较准,至少针对我的推荐是比较准确的。
曾经想过这些东西,也查过资料,但是一查就扯远了,都是什么BI等各大厂商炒作出来的名词。
最近,由于在研究报警关联分析和过滤方面的算法,用到了很多布尔代数和矩阵方面的知识。周末没什么事情,翻了翻Oracle的大厚本《Oracle专家编程》,看到索引聚集表,发现这个和搜索引擎中常用算法中的倒排序有些相像。突然想起了javaeye上流传的那个迅雷的变态的面试还是笔试题(大概内容5000观看电影纪录,一亿的用户记录,如何有效的合并,如果快速找出看了5个影片的用户)。想了想思路,能否借鉴Oracle的索引聚集表或矩阵等数学模型解决呢?尝试着是否可以用矩阵的数据模型,理论上好像可行,但是实际上,还是空间和效率的问题。
我的思路是这样的,建立一个矩阵,横坐标为影片ID,纵坐标为用户ID,这样就构成一个二维的矩阵,(x,y)的值为1或0,代表着X用户看了影片Y或没看。
但是算了下,这个矩阵的大小也是非常庞大的,光靠内存看样是不行了。
拿笔画了几下,怎么能找出看了五个以上电影的用户呢?只能是在影片集合里每次5个不同的影片,然后按这五个影片ID取出5列,全部进行&操作,结果为1的,就是看了五个,但是这个方法效率问题有问题,而且也不容易实现。
这个问题没解决,但是确在这个矩阵上发现了一个规律。
取出两个影片,可以很快的计算出看了这两个影片的用户ID。例如去影片Y1,Y2
他们对应的列进行&操作,结果列中,值为1 的下标为同时看过这两个影片的用户的ID。
找到看了这两个影片用户的ID的同时,又很容易找到他们还看了哪些影片。通过用户ID,找到对应的行,这一行中为1 的值,则代表这个用户看过的影片了。
知道这些,再运用点概率方面的知识,不就是个影片推荐系统吗,其他的推荐系统不也可以用类似的方式解决了吗?
是否能用矩阵解决推荐系统的问题。出于好奇,就将这个问题深入研究了一下,我的周末就这样没有了,呵呵。
假设有商品进行如下编号
0大米,1白面,2豆油,3巧克力,4洗发水,5沙发,6酱油,7方便面,8桌子,9椅子,10沙发垫,11洗面奶,12卫生纸,13火腿肠,14可乐
现在建立一个矩阵。(0,0)为顶点,为了方便商品和客户编号都从0开始的整数。
横向15个,为产品编号。
000000000000000
000000000100000
010000000000000
000000000000000
000000000000000
横坐标为为顾客的ID,纵坐标为产品的ID,例如上图中
(1,9)的值为1,代表了编号为1的顾客购买了编号为9的这个商品。
(2,1)的值为1,代表了编号为1的顾客购买了编号为1的这个产品。
假设通过历史数据训练后的矩阵如下所示,这是只是为了说明问题,如果真正应用,这个矩阵可能非常大的。
000000000000000
111000000000100
111000000010000
111000000010000
010000000000000
历史数据建立好以后,系统开始正式运行了。
当你选择了,大米和白面这两个商品后(编号为0和1),系统开始进行推荐运算,如果运算的呢?
取大米和白面这两个列,第0列,和第1列。
如下
大米 白面 大米&白面
0 0 0
1 1 1
1 1 1
1 1 1
0 1 0
然后进行&(and)运算得到右边的的列(大米&白面) ,第1行,第2行,第3行的值都唯一(下标从第0行开始计算),则代表这个编号为1,2,3的顾客曾经同时购买过大米和白面。
得到这些信息后,可以推测,有相同购买记录的人购买行为据有一定的相似性。只要能知道顾客1,2,3还购买了其他的什么产品,然后按购买的比率进行统计下,就可以有效的进行推荐了。
怎么求顾客1,2,3还购买了其他的什么产品呢?全在矩阵中表示着呢。 矩阵的每一行代表每个顾客购买的产品记录。1,2,3购买的产品记录如下。
111000000000100
111000000010000
111000000010000
设这3行为 T1,T2,T3,那么T=T1|T2|T3 ,可以知道T代表这三个人都购买了哪些产品。
上面的T = 111000000010100 ,对照产品编号表,这三个顾客购买了大米0,白面1,
豆油2,卫生纸12,沙发垫10。你已经选择了大米和白面那么去除大米和白面后。
T = 001000000010100
那么豆油,卫生纸,沙发垫,都可以作为推荐的产品。
但是这样的推荐有点不可靠,不能每个人都购买趋向都相同。所以必须利用一些概率的知识来解决此问题。
现在已经得到豆油2,卫生纸12,沙发10垫了等都是可以推荐的商品了。
这些数据来源于3个顾客的购买记录。
那么统计一下,在相同购买记录中(大米,白面)的这些用户(1,2,3)购买豆油,卫生纸,沙发垫的百分比是多少,然后根据这个百分比,把百分比高的作为首要推荐产品,就更有效了。
111000000000100
111000000010000
111000000010000
豆油(2列)上,所有的位置都为1 ,可以认为是100%的够购买过豆油。
沙发垫(10)上,3个中两个位置为1,可以认为都买沙发垫的占67%。
卫生纸(12)上,只有一个1,那么可以认为购买此物品的占33%。
那么给出了最终的推荐结果
强烈推荐:豆油
首要推荐:沙发垫
次要推荐:卫生纸
这样一个简单的商品自动推荐系统的雏形就出来了,这只是个简单的想法,应该还有很多地方不成熟,与真实的商用系统相差应该比较遥远,只是希望能起到抛砖引玉的作用。
再来看看好友推荐系统,横坐标,纵坐标都为用户的ID,是好友的,就在相应的位置标志为1,知道这个人的所有好友,然后计算所有好友的好友,他们中间的一些共同的好友可能就是你认识的。一般取20%-30%(我估计的数字)以上应该就可以了,推荐系统,应为几乎不存在你所有的好友都是其中的一个人的好友。
这个好友关系组成的矩阵,又可以抽象为图论中的一个有向图。那么另一个功能,我怎么能认识他,例如我通过谁可以认识奥巴马?通过好友的好友去与奥巴马建立关系,可以抽象为在这儿图上两点之间的最短路径问题,理论上好像是可以,没有去深入研究,应该不会这么简单的,毕竟六度空间不是那么容易实现的。
分享到:
相关推荐
布尔矩阵在推荐系统中的应用是数据挖掘领域的一个重要方法,尤其在处理大量用户与商品交互数据时,能够高效地表示用户...通过学习这些知识,我们可以构建出更加精准和个性化的推荐系统,从而提高用户满意度和商业效益。
对于初学布尔矩阵的,学习求其逆运算的基础。
关于布尔矩阵乘法的两种算法:定义算法和凝聚算法
针对 Apriori 关联规则挖掘算法在计算频繁项集时需要生成大量的候选项集且多次扫描数据库的问题以及布尔矩阵关联规则挖掘算法在计算频繁项集过程中具有计算速度快和内存占用率低等特点 , 但在计算频繁项集之前未对...
2. OpenMP多线程组织:本研究通过OpenMP多线程技术并行化了布尔矩阵乘法操作。OpenMP作为一种常用的并行编程接口,允许程序员通过编译器指令、库函数等手段实现共享内存多处理器环境下的多线程程序设计。在布尔矩阵...
针对可快速在大型交易事务数据库中挖掘关联规则的问题,基于布尔矩阵提出一种新的挖掘算法。该算法通过仅需存储布尔位节约了内存,通过简单布尔运算提高了求解频繁项集的效率。实验证明该算法较之于Apriori 算法有更...
提出了一种改进掩蔽信号的方法,采用自适应加权的方式构造掩蔽信号的频率,权值的选择基于分离误差最小化的准则。仿真实验表明,对具有不同幅度比与频率比的信号,提出的改进方法能够有效地提高EMD的频率分辨能力。
有向图的强连通性和弱连通性是图论中的核心...整体来说,基于布尔矩阵运算的有向图可达矩阵方法,为图论的研究和实际应用提供了一个强有力的工具,可以广泛地应用于网络结构分析、算法设计、系统建模和优化等多个领域。
布尔矩阵可以与其他数据结构如cell arrays、structs等配合使用,以实现更复杂的数据组织和处理。 综上所述,MATLAB中的布尔矩阵是实现各种逻辑运算和数组操作的关键工具,在"MultiViewMoSeg"项目中,它在多视图...
该系统的核心在于其个性化推荐模块子系统,这个子系统能够根据师生的专业、年龄和借阅记录等数据进行智能分析,并基于此提供个性化的图书推荐。此外,该系统还包括辅助模块,例如,根据图书流通情况,运用数据挖掘...
解释结构模型法(Interpretative ...里面的布尔矩阵,指的是方阵,矩阵中的第i行与第i列对应同一个要素。 本资源提供了可达矩阵计算的MATLAB方法,直接下载后在MATLAB运行即可,需要MATLAB安装包或计算问题可以私信我
综上所述,基于布尔处理的键盘矩阵解读方法减少了扫描过程中的计算量,提高了扫描效率,减少了对CPU资源的消耗,特别适合于处理能力有限的嵌入式系统环境。通过对标志位的操作、消抖动延时等技术的运用,使整个键盘...
matlab布尔矩阵产生代码
例如,对于长度为2的项集AB,其支持度等于矩阵A与矩阵B对应位置元素乘积之和除以总交易数。 3. **候选集生成**:通过矩阵的并集操作,可以生成新的候选集。比如,对于长度为k的频繁项集,可以找到所有长度为k-1的...
1. **矩阵创建与初始化**:在LabVIEW中,可以使用数组构造函数或矩阵构造函数来创建和初始化矩阵。用户可以选择不同类型的矩阵,如一维数组、二维数组或多维数组,根据需要填充数值。 2. **基本矩阵运算**:LabVIEW...
基于布尔矩阵和关联度量的直觉模糊聚类算法
书中讨论了大系统和小系统的不同处理方法,包括系统的图和布尔矩阵,以及如何用方框图表示大系统。 书中进一步深入讨论了矩阵的范数、矩阵的收敛性和极限、矩阵的微分与积分等高级概念。这些概念对于理解系统动态和...