运行过程
项目启动方式:
数据集下载地址[http://www2.informatik.uni-freiburg.de/~cziegler/BX/]
将下载好的数据放入data文件夹下
运行read_data_save_to_mysql.py文件 将数据导入到mysql中。(27万数据还是挺快的 咔咔)
注意mysql的链接参数.默认是root,密码123456,端口是3300.如果你的不是, 需要修改read_data_save_to_mysql和web/config.yml文件下的mysql的配置参数。
//查看端口号代码如下 我的是3306 mysql -u root -o 密码是123456 show global variables like ‘port‘;
pip install pymysql //我的报错了,没安装
进入web文件夹,运行app.py
我的报错 修改了代码
if __name__ == '__main__': # app.run(debug=True, port=8080) from gevent import pywsgi server = pywsgi.WSGIServer(('127.0.0.1',8000),app) server.serve_forever()
在浏览器上访问 127.0.0.1:8000 与上面设置的同步就行
使用下载数据中的UserID和其对应的Location作为账号密码登录网站。(这里我新建了一个 看一下新用户冷启动啥的问题 是没有推荐)
系统管理员的账号:admin 密码:admin 通过这个账号密码进入后台管理(管理书籍 没有删除用户的功能)
项目介绍
该项目:
看到首页,登录之前没有推荐数据。我们有两种登录方式。
①数据集用户登录,用户的userid和location作为用户名和密码,此时的推荐书籍模块是基于协同过滤模型生成的离线推荐。我们可以看到有推荐分数。
eg:
用户:167166 密码:weyhe bei bremen, bremen, germany
用户:20 密码:langhorne, pennsylvania, usa
用户:173453 密码:mountain view, california, usa(采用这个)
②对于新注册用户,在猜你喜欢和书籍推荐模块没有推荐数据,属于冷启动问题,在产生用户行为后,猜你喜欢将进行实时推荐。
我们可以点击浏览书籍,可以发现猜你喜欢模块进行了书籍推荐,然后对于书籍进行一个评分,可以发现猜你喜欢模块有更新书籍,然后我们通过搜索Harry pottery系列,进行评分,再次回到猜你喜欢可以看到产生一个明显的系列推荐。
相关问题
一些相关问题:
1.为什么用slope one算法而没用其他推荐算法
基于评分的Slope One算法具有简单、易懂、易于维护和执行、及时更新性等特点。与其他的个性化推荐算法相比,该算法不计算项目之间的相似度, 而是用一种简单的线性回归模型进行预测(可以扩展)。
2.实时推荐实时性如何
较快,里面用到了sql查询语句,直接在数据库进行查询返回,呈现在界面上。
3.冷启动解决
冷启动问题的出现是数据集的用户信息不够,如果上线后,引入多维度的信息,可以解决用户的冷启动问题。或者系统在用户第一次登录时,引导用户输入一些冷启动特征。对于图书领域的特征收集,可以选择历史、悬疑、文言等风格。
4.归一化作用
将评分数据控制在0-1范围,为了后期训练模型梯度下降更快,同时消除量纲的作用。
5.协同过滤算法
包括基于用户和基于物品的两种推荐算法。
6.新用户的推荐逻辑?
首先,根据用户在网页上产生的用户行为,包括点击浏览与评分,分别赋予不同的权重对数据集进行一个更新。其次,根据数据集中新用户评分高的书筛选出相似度高的书籍并排序。最后将top_N通过sql语句进行一个实时查询呈现在猜你喜欢模块上。
7.数据集的选取和处理?
先尝试了厦门图书馆数据集,经过数据分析后发现该数据集存在数据缺失问题,并且受众与书籍类型有局限性,决定更换数据集。选用book-crossing数据集后做的数据处理包括:异常值处理、空值填充、可视化分析。