• 14-利用SVD简化数据


     参考:http://blog.csdn.net/geekmanong/article/details/50494936

             http://www.2cto.com/kf/201503/383087.html

    SVD(Singular Value Decomposition)奇异值分解:

    优点:用来简化数据,去除噪声,提高算法的结果。

    缺点:数据的转换可能难以理解。

    适用数据类型:数值型数据。

    一、SVD与推荐系统

    下图由餐馆的菜和品菜师对这些菜的意见组成,品菜师可以采用1到5之间的任意一个整数来对菜评级,如果品菜师没有尝过某道菜,则评级为0

    建立一个新文件svdRec.py并加入如下代码:

    def loadExData():  
        return[[0, 0, 0, 2, 2],  
               [0, 0, 0, 3, 3],  
               [0, 0, 0, 1, 1],  
               [1, 1, 1, 0, 0],  
               [2, 2, 2, 0, 0],  
               [5, 5, 5, 0, 0],  
               [1, 1, 1, 0, 0]]
    u, s, vt = la.svd(loadExData())
    print s
    #[  9.64365076e+00   5.29150262e+00   9.99338251e-16   4.38874654e-16
    #   1.19121230e-16]

    我们可以发现得到的特征值,前两个比其他的值大很多,所以可以将最后三个值去掉,因为他们的影响很小。

    可以看出上图中前三个人,喜欢烤牛肉和手撕猪肉,这些菜都是美式烧烤餐馆才有的菜,这两个特征值可以分别对应到美食BBQ和日式食品两类食品上,所以可以认为这三个人属于一类用户,下面四个人属于一类用户,这样推荐就很简单了。

    建立一个新文件svdRec.py并加入如下代码:

    def loadExData():  
      return[[1, 1, 1, 0, 0],  
        [2, 2, 2, 0, 0],  
        [1, 1, 1, 0, 0],  
        [5, 5, 5, 0, 0],  
        [1, 1, 0, 2, 2],  
        [0, 0, 0, 3, 3],  
        [0, 0, 0, 1, 1]] 
    u, s, vt = la.svd(loadExData())
    print s
    #[  9.72140007e+00   5.29397912e+00   6.84226362e-01   1.18665567e-15
    #   3.51083347e-16]

    我们可以发现得到的特征值,前3个比其他的值大很多,所以可以将最后2个值去掉,因为他们的影响很小。

    上面例子就可以将原始数据用如下结果近似:

    二、基于协同过滤的推荐引擎

    协同过滤(collaborative filtering)是通过将用户与其他用户的数据进行对比来实现推荐的。

    1.相似度计算

     

    def ecludSim(inA,inB):
        return 1.0/(1.0 + la.norm(inA - inB))  #计算向量的第二范式,相当于直接计算了欧式距离
     
    def pearsSim(inA,inB):
        if len(inA) < 3 : return 1.0
        return 0.5+0.5*corrcoef(inA, inB, rowvar = 0)[0][1] #corrcoef直接计算皮尔逊相关系数。pearsSim会检查是否存在3个或更多的点。不存在返回1,因为此时两个向量完全相关。
     
    def cosSim(inA,inB):
        num = float(inA.T*inB)
        denom = la.norm(inA)*la.norm(inB)
        return 0.5+0.5*(num/denom)  #计算余弦相似度

    2.基于物品的相似度与基于用户的相似度

      当用户数目很多时,采用基于物品的相似度计算方法更好。

    3.示例:基于物品相似度的餐馆菜肴推荐引擎

  • 相关阅读:
    QuickClip—界面原型设计
    视频剪辑软件调研分析及使用感受——后附作品地址
    《梦断代码》——理智上悲观,意志上乐观
    《人月神话》—危险的神话
    zabbix监控交换机
    linux常用经典命令
    zabbix使用tokudb引擎替换innodb引擎
    CART分类回归树算法
    朴素贝叶斯分类算法
    分布式系统阅读笔记(十三)-----命名服务
  • 原文地址:https://www.cnblogs.com/hudongni1/p/5507006.html
Copyright © 2020-2023  润新知