(转载请注明出处:http://blog.csdn.net/buptgshengod)

1.背景

      协同过滤(collaborative filtering)是推荐系统经常使用的一种方法。cf的主要思想就是找出物品类似度高的归为一类进行推荐。cf又分为icf和ucf。

icf指的是item collaborative filtering,是将商品进行分析推荐。同理ucf的u指的是user,他是找出知趣类似的人,进行推荐。

通常来讲icf的准确率可能会高一些。通过这次參加天猫大数据比赛。我认为仅仅有在数据量很庞大的时候才适合用cf,假设数据量很小。cf的准确率会很可怜。

博主在比赛s1阶段,大概仅仅有几万条数据的时候,尝试了icf,准确率不到百分之中的一个。

。。

。。

2.经常用法

     cf的经常用法有三种,各自是欧式距离法、皮尔逊相关系数法、余弦类似度法。

       測试矩阵,行表示三名用户,列表示三个品牌。对品牌的喜爱度依照1~5添加。

(1)欧氏距离法

        就是计算每两个点的距离,比方Nike和Sony的类似度aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIoAAAAWCAYAAAAfIwRcAAAEN0lEQVRoBe2Xu2sVQRTGfaJGUwhaiM2KojaConZKmrTBQhDSSOwkjQ+wsFvBSm0tUhkUUthK/oBg6QPBxhcmYucDBV/49vtd94TDsPdm9t5ZLrnsB9+d2ZkzZ745c2Z37ooVDZoINBFoIpAqAisjHe2R3YZI28ZscCLwWkt5z3LWRKyJZLomzkbYNiaDFYEfWk4rUWKWtVtGZ2IMG5vBjcCqiKUdlM2DCLvGZIAjEJMoB7T+R32MQaa558TJPmqoOvWQBtwRp6oO7KN9R80xibJJ4j+7BWxX3S7BlJvFYfGQa1c1CpmsGOd18Knz2KKHEfG6b6xYT6nZpt6qiukONe9U35j4SVwndgPuj2wesPgS625h+5TJAfWkmkkEv0Es3p+SGT3/LciprwLsP4g23oLCAsp8caHuBik12/xoRbcFO7Vm/BMbEnFUZC6LFeupCvRZnClJwqSacXZWBJxKxBo4KUxKMlUFvi4UgxiPnxPFM8WkmFMp4PusLaZMqdnPx6cYzZlrDDUfUZ+9cZxZVNU2E2P/2eew+D2IciajebHsbZRM87gmOFqoQSCJY2ASFgT9W8b6O5VktAcL4eR44Bc7Eopg8c0fEsvA+LJNSanZ5mWzMhFNlB6meZ8amZu4+Jh523aaeWOwVoP/dBEjxlUBn0h0QcaGMaSdOMdollk5rqh5WLRTH24Gi5gQmSwXuwXjfUDwE25yJ98EIEQdmtl0OxToy4JJe9WMO3xwbysDCdTN25V9IxGIM/SI0kwmeezVwxPXQJJwIaMsw3c1TosvxLtiLgJEHRe/8FBgo8pLYiiUxR8W8eXxUQ/HxKu+0dVJrIviGzETcxHMiM9ELuFl6FYzwX4qrhZJQsBFe4FKgV41m593VnElMQW3/xeLvxOq8dbweKuHadfwR/XH4lrxp4g9NmApzS0jnyin1HJZ5FPzUiQYtqnfVO+Eh0Enm0GSwE6YVOct8X4bo6XG+35fx11qzdsKjb+d1nuq7xAXXFuow3W1qr7f10M7/8z9gjjt941F/avK0A9tZfilRhKD0iMc7/tK6+fVeqPo4TV7rqhb0vhPD/32zOswL2xji1EZzou8GYZEvv3mT9VWkmZUIoCfEHVo9nOUvbI5WJk36lAv04w5b1gOkIHDjF+ShThxSYaxYBwExBpfHlU0L45br9orcZc4Lo6IhilVJuxBJRNAFpaLVYBwG28l/g0WHHteqpyXgU8ys0+p2XxaSaLwr8qQSjM+iYnB4uNL64spiQFj5wqi01BVs41rlaf1e1PkbuDvJnZCW0bFD5tDe2qQfO0udFXmWo6aWR/rtztJlfW2s2Wfyg5ST3HmwvNcnC2ZlcQhM+tELudjCSdYjppZPnFGe13I5bjnOJ+UE/499AN1vKHqXkddmuvySzyS+OY11e7vZd1Bb/w3EWgi0ESgicBAR+AfZ/buoQR9owcAAAAASUVORK5CYII=" alt="" />。

数值越小。表示类似的越高。

def OsDistance(vector1, vector2):
sqDiffVector = vector1-vector2
sqDiffVector=sqDiffVector**2
sqDistances = sqDiffVector.sum()
distance = sqDistances**0.5
return distance

(2)皮尔逊相关系数

       

两个变量之间的相关系数越高。从一个变量去预測还有一个变量的准确度就越高,这是由于相关系数越高,就意味着这两个变量的共变部分越多,所以从当中一个变量的变化就可越多地获知还有一个变量的变化。

假设两个变量之间的相关系数为1或-1,那么你全然可由变量X去获知变量Y的值。

·         当相关系数为0时。X和Y两变量无关系。

·         当X的值增大。Y也增大。正相关关系,相关系数在0.00与1.00之间

·         当X的值减小,Y也减小,正相关关系。相关系数在0.00与1.00之间

·         当X的值增大。Y减小,负相关关系。相关系数在-1.00与0.00之间

当X的值减小。Y增大,负相关关系,相关系数在-1.00与0.00之间

相关系数的绝对值越大。相关性越强,相关系数越接近于1和-1,相关度越强,相关系数越接近于0,相关度越弱。

在python中用函数corrcoef实现。详细方法见http://infosec.pku.edu.cn/~dulz/doc/Numpy_Example_List.htm

(3)余弦类似度

         通过測量两个向量内积空间的夹角的余弦值来度量它们之间的类似性。

0度角的余弦值是1,而其它不论什么角度的

余弦值都不大于1;而且其最小值是-1。从而两个向量之间的角度的余弦值确定两个向量是否大致指向同样的方向。两
个向量有同样的指向时,余弦类似度的值为1;两个向量夹角为90°时,余弦类似度的值为0;两个向量指向全然相
反的方向时。余弦类似度的值为-1。

在比較过程中。向量的规模大小不予考虑,仅仅考虑到向量的指向方向。余弦相

似度通经常使用于两个向量的夹角小于90°之内,因此余弦类似度的值为0到1之间。

       
       
def cosSim(inA,inB):
num = float(inA.T*inB)
denom = la.norm(inA)*la.norm(inB)
return 0.5+0.5*(num/denom)

【机器学习算法-python实现】协同过滤(cf)的三种方法实现的更多相关文章

  1. python每次处理一个字符的三种方法

    python每次处理一个字符的三种方法 a_string = "abccdea" print 'the first' for c in a_string: print ord(c) ...

  2. Python 文件行数读取的三种方法

    Python三种文件行数读取的方法: #文件比较小 count = len(open(r"d:\lines_test.txt",'rU').readlines()) print c ...

  3. Python 判断文件是否存在的三种方法

    通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...

  4. python webdriver api-上传文件的三种方法

    上传文件: 第一种方式,sendkeys(),最简单的 #encoding=utf-8 from selenium import webdriver import unittest import ti ...

  5. Python 中删除列表元素的三种方法

    列表基本上是 Python 中最常用的数据结构之一了,并且删除操作也是经常使用的. 那到底有哪些方法可以删除列表中的元素呢?这篇文章就来总结一下. 一共有三种方法,分别是 remove,pop 和 d ...

  6. python列表删除重复元素的三种方法

    给定一个列表,要求删除列表中重复元素. listA = ['python','语','言','是','一','门','动','态','语','言'] 方法1,对列表调用排序,从末尾依次比较相邻两个元素 ...

  7. 用Python获取Linux资源信息的三种方法

    方法一:psutil模块 #!usr/bin/env python # -*- coding: utf-8 -*- import socket import psutil class NodeReso ...

  8. Python判断文件是否存在的三种方法

    通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try ...

  9. Python判断文件是否存在的三种方法【转】

    转:http://www.cnblogs.com/jhao/p/7243043.html 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先 ...

  10. python删除list中元素的三种方法

    a.pop(index):删除列表a中index处的值,并且返回这个值. del(a[index]):删除列表a中index处的值,无返回值. del中的index可以是切片,所以可以实现批量删除. ...

随机推荐

  1. R语言基础-list matrix array

    列表可以包含多种类型,如数字/字符/向量/data.frame/list # 创建含一个向量元素的list list1 = list(c(1,2,3)) # list2有三个元素 list2 = li ...

  2. cygin常用命令

    基本操作命令: ---------------------------------------------------------------------- --------------------- ...

  3. java foreach的实现原理

    http://blog.csdn.net/moqihao/article/details/51078464 本质是通过集合的iterator方式实现,所以再使用foreach集合,要强制判断集合的是否 ...

  4. Dell Omsa在Linux服务器上安装部署

    前言 本页详述了在一台Linux(RHEL6.4 x86_64)服务器上部署安装OMSA的通用做法,包括OMSA软件的获取方法和安装步骤. 演示环境: PowerEdge R620, RHEL 6.4 ...

  5. HDU-1532 Drainage Ditches,人生第一道网络流!

    Drainage Ditches 自己拉的专题里面没有这题,网上找博客学习网络流的时候看到闯亮学长的博客然后看到这个网络流入门题!随手一敲WA了几发看讨论区才发现坑点! 本题采用的是Edmonds-K ...

  6. 如何部署 sources and javadoc jars

    mvn org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy-file -Durl=file:///home/me/m2-repo \ - ...

  7. (转)iOS字体

    一.iOS原生字体展示 在 label中选择字体的font,并把font由system改成custom后,就能在family中看到72种特殊字体.这些里面就有很炫的字体,但 是全部是只针对英文数字,对 ...

  8. BZOJ 3529 [Sdoi2014]数表 ——莫比乌斯反演 树状数组

    $ans=\sum_{i=1}^n\sum_{j=1}^n\sigma(gcd(i,j))$ 枚举gcd为d的所有数得到 $ans=\sum_{d<=n}\sigma(d)*g(d)$ $g(d ...

  9. BZOJ3926 [Zjoi2015]诸神眷顾的幻想乡 【广义后缀自动机】

    题目 幽香是全幻想乡里最受人欢迎的萌妹子,这天,是幽香的2600岁生日,无数幽香的粉丝到了幽香家门前的太阳花田上来为幽香庆祝生日. 粉丝们非常热情,自发组织表演了一系列节目给幽香看.幽香当然也非常高兴 ...

  10. toolbarlite随笔之插件的闭包写法

    toolbarlite这个东西至今没搞懂是什么玩意.因为除了源代码我实在是找不到除了toolbar之外的任何关于toolbarlite的东西了.不知道toolbarlite是不是toolbar的子集, ...