我想开发一个系统,通过向用户提出一系列问题后推荐一项运动。系统应动态决定提问哪些问题以及它们的排序,以便为每个用户找到最佳答案。
我有一个三重数据结构:运动与不同的属性相联系,问题可以涉及多个属性。这两种关系都是加权的。
在0到1的范围内,足球与“室内”有0.6的联系,但与“室外”有0.8的联系,因为足球更常在室外进行,并且与“球”有1.0的联系,因为足球无论如何都需要球。问题2与“球拍”(0.7)和“弓”(0.6)相关,因为这两种物品都可以用手操作,但“球拍”的权重更高,因为回答这个问题时更可能想到“球拍”。
# table1: sports (result set)1 | badminton2 | soccer3 | fishing# table2: attributes (describes different results)1 | indoors2 | outdoors3 | ball4 | racket5 | bow# table3: questions (checks for needed attributes)1 | Do you like doing sports outdoors?2 | Do you want to hold a gadget while performing the sport?
我可以尝试基于关系数据库和我在Python/Pandas中实现的某种排名系统来构建这个系统。然而,我觉得我忽略了机器学习的最新发展,显然,对于较小的项目不应该自己构建推荐引擎:
http://www.datacommunitydc.org/blog/2013/05/recommendation-engines-why-you-shouldnt-build-one
据我所知,这可能部分是一个决策树问题,对吗?
就机器学习而言,我的具体问题是什么?在我的Python-Pandas环境中,哪些库可以支持我?
我真的很抱歉这么天真,如果有人能指导我走向正确的方向(关于理论和应用的技术),我保证会尽我所能学习。
回答:
所讨论的机器学习任务不是在已确定的问题与运动之间的权重下寻找最佳运动,而是根据已回答的问题和最喜欢的运动来寻找这些权重。
例如:你有一组人(训练集),他们回答了你的问题,然后使用某种你选择的量表对他们最喜欢的运动进行了排名。然后,你训练某种算法,以尽可能接近地预测训练集的结果来概率性地选择运动。
如果属性已经作为问题存在(比如你的室内与室外示例),那么这些属性实际上并不怎么有用,即便如此,它们的价值也值得怀疑。
例如,你填写问卷:室内还是室外?o,使用小工具吗?y然后你表示你对各种运动的喜爱程度:足球?5,网球?8,篮球?2
从中,你的算法应该确定回答o,y的人喜欢网球,对足球无感,讨厌篮球。当然,更多的数据会产生更准确的结果。
对于建模离散输入,可能适合使用的模型是贝叶斯网络。你*可以*在贝叶斯网络中将属性作为中间隐藏层包含进去,但我建议先从一个简单的贝叶斯网络开始,然后看看中间层是否增加了价值。如果你确信像“使用球”这样的东西在某种意义上是人们喜欢一种运动而不是另一种运动的*根本原因*,那么,是的,在你的网络中使用隐藏层,否则,它将不会有用。