5

我有一组二进制向量,其中每个向量代表一天的房屋入住情况,由 48 个元素组成(每个元素代表一天中的 30 分钟)。每个元素可以是 1 表示房屋被占用,0 表示未占用房屋。

我的任务是根据同一天的历史(星期一从星期一的历史等)预测第二天。到目前为止,我正在使用汉明距离来查找历史上最相似的 5 天,并从中计算入住概率作为这 5 个数字的平均值。当概率高于某个 X 时,在我的例子中为 0.4,我预测它被占用。

但是肯定有一些更有效的方法可以做到这一点,任何可以捕捉历史趋势的算法?

4

2 回答 2

1

您的方法听起来相当合理(称为 K 近邻或 KNN),但我不确定您使用的距离度量是否正确(今天到目前为止的汉明距离)。你的方法对一天的精确结构相当敏感,可能需要很长时间才能适应假期等事情,而一天的前几个小时可能过于敏感。

我将尝试对您的方法进行的一种更改是查看前 24 小时而不是“今天到目前为止”,或者使用两种方法并对结果进行平均。例如,之前的 24 小时方法会很快获得假期,但是如果用户碰巧在星期三或其他什么时候没有假期,那么到目前为止的今天方法可能会错过假期。这是一个类似于这个石头剪刀布游戏的概念,它会查看你的最后四次投掷来预测下一次投掷。

我考虑的另一个改变是在汉明距离计算中使用权重。例如,通过 对每个位匹配进行加权lambda^(-n),其中lambda是您可以调整的参数(从 1.1 之类的东西开始),并n表示该位所代表的过去小时数。

任何各种分类算法,如 SVM、逻辑回归、随机森林等,都应该可以很好地工作。添加到特征向量的特征:

  • 星期几
  • 小时
  • 这个小时的平均入住率
  • 当天平均入住人数
  • 平均入住人数(天,小时)
  • 各种 N 值的过去占用 N-gram(即前 N 小时的位向量)
  • 是假期吗?
  • 日出后的几个小时

最后,对于新用户,可能需要一段时间才能获得足够的训练数据,因此您可能需要两个模型:基于所有用户的整体模型和单个用户模型。然后,您可以对两个模型的输出进行加权,用户模型的权重会增加

于 2013-05-09T04:01:17.763 回答
0

您可能只想保存最近的 N 天,和/或为最近的几天分配更大的权重。否则,算法将无法对用户习惯的变化做出足够快的反应。

如果您按间隔而不是位向量比较占用率,您也可能会得到更好的结果——通常房子会在很长一段时间内被占用/无人占用,而不是例如每半小时交替占用一次。在工作日尤其如此,从早上到晚上,房子将有八(或九,或十)小时无人居住;早上的入住间隔将很好地预测中午(非)入住间隔,因为如果居住者早点或晚点离开上班,那么他们可能会早点或晚点回家。如果他们在 10:00 或 11:00 仍然在家,那么他们可能会整天在家(由于生病或度假)。与位向量相比,比较和索引间隔也很容易 - 例如,您可以将日期存储在间隔树(或者更确切地说是转换为树图的间隔树),以间隔为键,日期为值,以便快速确定哪些天共享当天的早上占用间隔。

您将需要两个数据结构:间隔树(地图)数组,一周中每天一棵树,它使用早上的占用间隔作为键和前几天的集合作为值。该集合需要汇总晚上入住时间间隔;任何给定半小时期间的预测入住率是具有相同早晨入住间隔的前几天的模式(因此,如果您存储了 7 天,其中 5 天预测时间 X 的入住率,那么数据结构预测时间的入住率X)。您还需要所有前几天的队列,以便您可以从间隔树中删除最旧的日期。(作为替代方案,为最近的日子分配更大的权重;但是,这实施起来比较棘手,因为您还需要降低较早日子的权重。)

您可能会发现只需要两棵区间树,一棵用于工作日,一棵用于周末。

于 2013-05-09T01:37:25.107 回答