基于用户的协同过滤算法UserCF
基于用户的协同过滤,通过不同用户对物品的评分来评测用户之间的相似性,基于用户间的相似性做出推荐。
简单来讲就是:给用户推荐和他兴趣相似的其他用户喜欢的物品。
基于UserCF的基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。
计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到K邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。
基于物品的协同过滤算法ItemCF
基于item的协同过滤,通过用户对不同item的评分来评测item之间的相似性,基于item之间的相似性做出推荐。
简单来讲就是:给用户推荐和他之前喜欢的物品相似的物品。
基于ItemCF的原理和基于UserCF类似,只是在计算邻居时采用物品本身,而不是从用户的角度,即基于用户对物品的偏好找到相似的物品,然后根据用户的历史偏好,推荐相似的物品给他。
从计算的角度看,就是将所有用户对某个物品的偏好作为一个向量来计算物品之间的相似度,得到物品的相似物品后,根据用户历史的偏好预测当前用户还没有表示偏好的物品,计算得到一个排序的物品列表作为推荐。
User CF 和Item CF的比较:
对于电子商务,用户数量一般大大超过商品数量,此时Item CF的计算复杂度较低。
在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。比如在购书网站上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性远远超过了网站首页对该用户的综合推荐。可以看到,在这种情况下,Item CF 的推荐成为了引导用户浏览的重要手段。基于物品的协同过滤算法,是目前电子商务采用最广泛的推荐算法。
在社交网络站点中,User CF 是一个更不错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。
主要分为两个步骤:线下训练和线上计算。
线下训练中使用Hadoop,从搜索引擎日志出发,经历数据清洗、提取特征、合并增量、排序降维、模型求解、模型验证等步骤,最终得出一个特征到权重的映射文件,即所需模型。
在线上计算部分,要经历扩展匹配、广告粗选、CTR计算等步骤,取出CTR中最高的10个广告返回给前端。
逻辑回归模型用于提取数据集中区分度高的特征。
详细可参考:
http://www.doc88.com/p-7042012124449.html
层次分析法的思想:将所有要分析的问题层次化,根据问题的性质和所要达到的总目标,将问题分为不同的组成因素,并按照这些因素间的关联影响即其隶属关系,将因素按不同层次聚集组合,形成一个多层次分析结构模型,最后,对问题进行优劣性比较排序。
层次分析法的步骤:
1)找准各因素之间的隶属度关系建立递阶层次结构。
2)构造判断矩阵(成对比较阵)并赋值。
3)层次单排序(计算权向量)与检验(一致性检验)。
4)层次总排序(组合权向量)与检验(一致性检验)。
5)结果分析。
其它可参见:
http://wenku.baidu.com/link?url=HyKXeXiJ6hzyqXEuKFnKNNOn5aOBnXFP_791mkVYzHv5X97mjkiAAEo1LMjJ5qsUSyT6O_44mdxCuzwCrQbB7RBP3ko_76IrHgRZ5zl1SiW
最大频繁项集是各频繁k项集中符合无超集条件的频繁项集。
项集:由项组成的集合。
若项集的支持度≥给定最小支持度,称其为频繁项集。
超集:若一个集合S2中的每一个元素都在集合S1中,且集合S1中可能包含S2中没有的元素,则集合S1就是S2的一个超集。 S1是S2的超集,则S2是S1的真子集。
如果频繁项集L 的所有超集都是非频繁项集, 那么称L 为最大频繁项集或称最大频繁模式。
频繁项集是最大频繁项集的子集。最大频繁项集中包含了频繁项集的频繁信息, 且通常项集的规模要小几个数量级。所以在数据集中含有较长的频繁模式时挖掘最大频繁项集是非常有效的手段。
FP增长算法:在算法中使用了一种称为频繁模式树(Frequent Pattern Tree)的数据结构。
Apriori算法在产生频繁模式完全集前需要对数据库进行多次扫描,同时产生大量的候选频繁集,这就使Apriori算法时间和空间复杂度较大。但是Apriori算法中有一个很重要的性质:频繁项集的所有非空子集都必须也是频繁的。由此性质,引出了FP增长算法。
首先介绍FP增长算法中的几个概念:
a.FP-Tree:将事务数据表中的各个事务数据项按照支持度排序后,把每个事务中的数据项按降序依次插入到一棵以NULL为根结点的树中,同时在每个结点处记录该结点出现的支持度。
b.条件模式基:包含FP-Tree中与后缀模式一起出现的前缀路径的集合。
c.条件树:将条件模式基按照FP-Tree的构造原则形成的一个新的FP-Tree。
步骤:
挖掘频繁模式前首先要构造FP-Tree,
输入:一个事物数据库D和一个最小支持度threshold.
输出:对应的FP-tree.
算法流程
1.扫描数据库T一遍.得到频繁项的集合F和每个频繁项的支持度.把F按支持度递降排序,结果记为L.
2.创建FP-tree的根节点,记为T,并且标记为”null”.然后对D中的每个事务t,
根据L中的顺序,选出并排序t中的事务项.把t中排好序的事务项列表记为[p|P],其中p是第一个元素,P是列表的剩余部分.调用insert_tree([p|P],T).
函数insert_tree([p|P],T)的运行如下.
如果T有一个子结点N,其中N.item-name=p.item-name,则将N的count阈值+1;
否则,创建一个新节点N,使它的count为1,使它的父节点为T,并且使它的node_link和那些具有相同item_name域串起来.如果P非空,则递归调用insert_tree(P,N).
对FP-Tree进行挖掘,算法如下:
输入:一棵用算法一建立的树Tree
输出:所有的频繁集
步骤:
调用FP-growth(Tree,null).
procedure FP-Growth ( Tree, x)
{
(1) if (Tree只包含单路径P) then
(2) 对路径P中节点的每个组合(记为B)
(3) 生成模式B并x,支持数=B中所有节点的最小支持度
(4) else 对Tree头上的每个ai,do
{
(5) 生成模式B= ai 并 x,支持度=ai.support;
(6) 构造B的条件模式库和B的条件FP树TreeB;
(7) if TreeB != 空集
(8) then call FP-Growth ( TreeB , B )
}}
过拟合:为了得到一致假设而使假设变得过度复杂称为过拟合。
过拟合的产生原因:
1)由于对样本数据,可能存在隐单元的表示不唯一,即产生的分类的决策面不唯一。
2)权值学习迭代次数足够多,拟合了训练数据中的噪声和训练样例中没有代表性的特征。
过度拟合解决方法:
1)权值衰减。
在每次迭代过程中以某个小因子降低每个权值,这等效于修改E的定义,加入一个与网络权值的总量相应的惩罚项,此方法的动机是保持权值较小,避免权值衰减,从而使学习过程向着复杂决策面的反方向偏。
2)适当的停止准则。
3)验证数据。
一个最成功的方法是在训练数据外再为算法提供一套验证数据,应该使用在验证集合上产生最小误差的迭代次数,不是总能明显地确定验证集合何时达到最小误差。当验证出现的错误上升时停止训练。
4)交叉验证。
交叉验证方法在可获得额外的数据提供验证集合时工作得很好,但是小训练集合的过度拟合问题更为严重。
k-fold交叉方法:
把训练样例分成k份,然后进行k次交叉验证过程,每次使用不同的一份作为验证集合,其余k-1份合并作为训练集合.每个样例会在一次实验中被用作验证样例,在k-1次实验中被用作训练样例;每次实验中,使用上面讨论的交叉验证过程来决定在验证集合上取得最佳性能的迭代次数n*,然后计算这些迭代次数的均值,作为最终需要的迭代次数。
5) 减少特征
人工选择,预留一些特征;利用算法选取一些比较好的特征。
6)正则化
降低模型复杂度。
也可参见:
http://blog.csdn.net/heyongluoyao8/article/details/49429629
正则化项即罚函数,该项对模型向量进行“惩罚”,从而避免单纯最小二乘问题的过拟合问题。训练的目的是最小化目标函数,则C越小,意味着惩罚越小,分类间隔也就越小,分类错误也就越少。
正则化项本质上是一种先验信息,整个最优化问题从贝