7.Apriori算法---无监督学习 Apriori算法是关联规则挖掘算法中用的比较早的算法,事物和事物之间通常存在一定的联系,关联规则挖掘的目的就在于从在大量的数据项中发现隐藏着的联系或者相关性,揭示数据项间的依赖关系,如用户去超市购买啤酒的同时也会选择购买花生,那么啤酒和花生之间就形成了一定的关联关系 Apriori算法的基本步骤如下: 1.生成1-项候选项集; 2.生成1-项频繁项集; 3.生成2-项候选项集; 4.生成2-项频繁项集; 5.重复上述步骤,直至频繁项集为空,根据频繁项集产生关联规则; 频繁项集是根据设置的最小支持度产生,即频繁项集在整个数据集中出现的概率大于最小支持度;候选项集为前一项的频繁项集*除了其自身之外的其余频繁项集(即做连接操作)(除了1-项候选项集之外);关联规则是根据设置的最小置信度产生,最终的频繁项集可以产生多条规则,计算每条规则的概率(实质上就是计算条件概率),若概率大于最小置信度,则该条规则就为一条关联规则 优点:思路简单;易于实现; 缺点:需要重复扫描数据库,因此带来一定的性能开销;最小支持度和最小置信度都是人为设置的,因此使得结果会有一定的偏差,需要不断训练,达到最优效果; 针对Apriori算法的缺点,可以进行相应的改进,如下: Apriori算法概括起来就为剪枝,连接,改进的思路从剪枝过程着手,若k-项频繁项集中某一频繁项x,x中的某一项j,j在k-项频繁项集中出现的次数小于k,则将k-项频繁项集中所有包含j的项去掉,最后将剩下的频繁项进行连接操作,得到候选项集。改进的理由是若x中的某项j,它在k-项频繁项集中出现的次数小于k,则x肯定不会出现在(k+1)-项频繁项集中,因为若x出现在了(k+1)-项频繁项集中,即x为(k+1)-项频繁项,那它生成的(k+1)个k项集都会为频繁项,即出现在k-项频繁项集中,则j出现的次数为k,这样j在整个k-项频繁项集中出现的次数大于等于k,与之前的假设相反,因此x不会是频繁项,于是我们可以进行上述的改进。这样改进的好处在于减少了频繁项的数目,在一定程度上减弱了连接操作的负担,同时也减少了扫描数据库的次数 或者每次产生频繁项集后就检查其是否满足最小置信度的条件,这样也能减少连接次数。。。 Apriori算法是比较常用的一种关联规则算法,但由于它需要重复扫描数据库造成效率低下,因此出现了一种效率比较高的关联规则算法: FP-Growth,它的具体内容可以借鉴博客:http://blog.sina.com.cn/s/blog_68ffc7a40100uebg.html加以理解,反正这个算法在阿里面试的时候被问到过,那个时候脑抽了,居然忘了。。。 8.协同过滤推荐---无监督学习 协同过滤算法是如今推荐系统比较常用且理论比较成熟的的推荐算法,它有两种基本的类型:基于用户的协同过滤和基于项目的协同过滤; 基于用户的协同过滤:1.计算用户之间的相似度---将用户对各个项目的评分作为其用户向量,计算每个用户向量之间的距离,距离可以采用欧式距离或者夹角余弦距离等等;2.选取相似用户-----选取出距离最小的n个用户作为其相似用户;3.进行推荐----根据n个相似用户的项目评分来统计每个项目的评分,选择评分靠前的几个项目进行推荐,如相似用户有A,B,A的评分记录为(3,2,1),B的评分记录为(1,3,2),则项目1的评分总结果为4,项目2的评分总结果为5,项目3的评分总结果为3,因此推荐项目2,项目1 基于项目的协同过滤:1.计算项目之间的相似度---将各个用户对项目评分作为其项目向量,计算每个项目向量之间的距离,距离可以采用欧式距离或者余弦距离等等;2.选取相似项目-----选取出距离最小的n个项目作为其相似项目;3.进行推荐----推荐这n个相似项目 优点:理论成熟;准确率高; 缺点:稀疏性问题---用户-项目矩阵中存在许多零值,即存在许多未被用户进行评分的项目;没有任何评分的项目可能不会被推荐;计算量大; 如何解决稀疏性问题?? 1.填值:用固定的值代替零值,误差大; 2.降维:删除那些很少被评分的项目或者很少进行评分的用户,这样被删除的项目和用户就不会被推荐,出现信息丢失的问题;奇异值分解(SVD);主成分分析(R语言中有讲过) 参考博客: http://blog.sina.com.cn/s/blog_73de143c010153vp.html http://www.cnblogs.com/luchen927/archive/2012/02/01/2325360.html http://www.zgqkk.com/lwxs/jsj/22675_2.html 腾讯面试的时候问到了和协同过滤相关的几个问题: 1.冷启动问题,即用户或者商品没有历史数据? 答:对于冷启动,第一:可以给用户随机推荐热门商品,或者将商品随机推荐给用户,但这样不算是个性化的推荐了;第二:根据用户或者商品本身的信息(比如用户的年龄,性别,工作职业,商品属性等等)实现粗粒度个性化推荐(即不根据用户对商品的评分来计算相似度,而是根据用户或商品本身的信息来计算相似度) 2.基于项目的协同过滤和基于用户的协同过滤分别适用于什么场景? 基于项目的协同过滤:商品数<用户数,商品数据比较稳定 基于用户的协同过滤:商品数>用户数,用户数据比较稳定 未完待续。。。