【发布时间】:2017-03-16 19:58:19
【问题描述】:
项目
我正在做一个小项目,用户可以在其中创建事件(例如Eat、Sleep、Watch a movie 等)并记录与这些事件匹配的日志条目。
我的数据模型看起来像这样(应用程序本身在 Python 3 / Django 中,但我认为这并不重要):
# a sample event
event = {
'id': 1,
'name': 'Eat',
}
# a sample entry
entry = {
'event_id': event['id'],
'user_id': 12,
# record date of the entry
'date': '2017-03-16T12:56:32.095465+00:00',
# user-given tags for the entry
'tags': ['home', 'delivery'],
# A user notation for the entry, it can be positive or negative
'score': 2,
'comment': 'That was a tasty meal',
}
用户可以为任意数量的事件记录任意数量的条目,他们可以在需要时创建新事件。数据存储在关系数据库中。
现在,我想让用户更轻松地输入数据,方法是在用户访问“添加条目”表单时向他们推荐相关事件。目前,他们可以在下拉列表中选择与其条目对应的事件,但我想在此基础上向他们推荐一些相关事件。
我在想,给定用户历史记录(所有记录的条目),应该可以通过识别条目中的模式来预测可能的输入,例如:
-
Eat通常在每天中午和晚上 7:00 左右发生 -
Sleep通常发生在晚上 10:00 之后 -
Watch a movie通常发生在星期五晚上 8:00 之后
理想情况下,我想要一个函数,给定用户 ID 和日期时间,并使用用户历史记录,将返回更可能发生的事件列表:
def get_events(user_id, datetime, max=3):
# implementation
# returns a list of up to max events
return events
因此,如果我采用前面的示例(包含更多人类日期),我会得到以下结果:
>>> get_events(user_id, 'Friday at 9:00 PM')
['Watch a movie', 'Sleep', 'Eat']
>>> get_events(user_id, 'Friday at 9:00 PM', max=2)
['Watch a movie', 'Sleep']
>>> get_events(user_id, 'Monday at 9:00 PM')
['Sleep', 'Eat', 'Watch a movie']
>>> get_events(user_id, 'Monday at noon')
['eat']
当然,在现实生活中,我会传递真实的日期时间,并且我想获得一个事件 ID,以便从数据库中获取相应的数据。
我的问题
(对不起,如果需要一些时间来解释整个事情)
我的实际问题是,实现这一目标所需的实际算法/工具/库是什么?甚至有可能做到吗?
我目前的猜测是,我需要使用一些花哨的机器学习东西,使用 scikit-learn 和分类器之类的东西,用用户历史记录来训练它,然后让整个东西发挥它的魔力。
我对机器学习完全不熟悉,我担心自己没有足够的数学/科学背景来开始自己的学习。你能提供一些参考资料来帮助我理解如何解决这个问题,我必须挖掘的算法/词汇,或者一些伪代码吗?
【问题讨论】:
-
我认为这可以通过机器学习来完成,但对于这种特殊情况来说可能有点矫枉过正。看来您有相当静态的存储桶(例如,晚上 7 点到晚上 9 点的存储桶包括睡眠、饮食、电影)。因此,您可以按照您有多少条目的顺序来维护这些存储桶(例如,跟踪用户 1 在存储桶 19:00 中提交吃 50 次,因此按该用户的计数排序)。这基本上就是您的预测性 AI 会做的事情(我相信),除非您独立于用户训练它,然后它将预测所有用户的常用关键字。
-
对不起,如果不清楚:跟踪确实与用户无关,用户可以提交 10s 或 100s 不同的事件。使用手工计数,我可能还会丢失所有模式(每周、每月、仅一周中的某些天等)。
标签: python algorithm machine-learning scikit-learn