php用不了推荐算法吗?
推荐算法是非常古老的,在机器学习还没有兴起的时候就有需求和应用了。
协同过滤(Collaborative Filtering)作为推荐算法中最经典的类型,包括在线的协同和离线的过滤两部分。所谓在线协同,就是通过在线数据找到用户可能喜欢的物品,而离线过滤,则是过滤掉一些不值得推荐的数据,比比如推荐值评分低的数据,或者虽然推荐值高但是用户已经购买的数据。
下面就介绍下怎样用PHP+MySQL实现简单的协同过滤算法。
要实现协同过滤推荐算法,首先就要理解算法的核心思想和流程。该算法的核心思想可以概括为:若a,b喜欢同一系列的物品(暂时称b是a的邻居吧),则a很可能喜欢b喜欢的其他物品。算法的实现流程可以简单概括为:1.确定a有哪些邻居 2.通过邻居来预测a可能会喜欢哪种物品 3.将a可能喜欢的物品推荐给a。
算法核心的公式如下:
1.余弦相似度(求邻居):
2.预测公式(预测a可能会喜欢哪种物品):
仅从这两个公式我们就可以看出,仅仅是按照这两个公式进行计算,就需要进行大量的循环与
来源gaodai.ma#com搞##代!^码网
判断,而且还涉及到排序的问题,就涉及到排序算法的选择与使用,这里选快排。
首先建表:
DROP TABLE IF EXISTS `tb_xttj`;CREATE TABLE `tb_xttj` ( `name` varchar(255) NOT NULL, `a` int(255) default NULL, `b` int(255) default NULL, `c` int(255) default NULL, `d` int(255) default NULL, `e` int(255) default NULL, `f` int(255) default NULL, `g` int(255) default NULL, `h` int(255) default NULL, PRIMARY KEY (`name`)) ENGINE=MyISAM DEFAULT CHARSET=latin1; INSERT INTO `tb_xttj` VALUES ('John', '4', '4', '5', '4', '3', '2', '1', null);INSERT INTO `tb_xttj` VALUES ('Mary', '3', '4', '4', '2', '5', '4', '3', null);INSERT INTO `tb_xttj` VALUES ('Lucy', '2', '3', null, '3', null, '3', '4', '5');INSERT INTO `tb_xttj` VALUES ('Tom', '3', '4', '5', null, '1', '3', '5', '4');INSERT INTO `tb_xttj` VALUES ('Bill', '3', '2', '1', '5', '3', '2', '1', '1');INSERT INTO `tb_xttj` VALUES ('Leo', '3', '4', '5', '2', '4', null, null, null);
这里只对最后一行的Leo进行推荐,看看f,g,h哪个可以推荐给他。
用php+mysql,流程图如下:
连接数据库并将其存储为二维数组的代码如下:
header("Content-Type:text/html;charset=utf-8"); mysql_connect("localhost","root","admin");mysql_select_db("geodatabase");mysql_query("set names 'utf8'"); $sql = "SELECT * FROM tb_xttj";$result = mysql_query($sql); $array = array();while($row=mysql_fetch_array($result)){$array[]=$row;//$array[][]是一个二维数组}