我有一个包含96个元素的二进制数组,它可能看起来像这样:
[false, true, true, false, true, true, false, false, false, true.....]
每个元素代表从00:00开始的15分钟时间间隔。第一个元素是00:15,第二个是00:30,第三个是00:45,以此类推。布尔值表示在该时间间隔内房屋是否有人居住。
我想训练一个分类器,以便在只知道当天部分时间的情况下预测一天的剩余时间。假设我有过去100天的观测数据,并且我只知道当天前20个元素的情况。
我如何使用分类来预测一天的剩余时间?
我尝试创建了一个如下所示的ARFF文件:
@RELATION OccupancyDetection@ATTRIBUTE Slot1 {true, false}@ATTRIBUTE Slot2 {true, false}@ATTRIBUTE Slot3 {true, false}...@ATTRIBUTE Slot96 {true, false}@DATAfalse,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,false,true,true,true,false,true,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,falsefalse,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false.....
并对其进行了Naive Bayes分类。问题是,结果只显示了一个属性的成功情况(例如,最后一个属性)。
某一天的“真实”样本可能看起来像这样:
true,true,true,true,true,true,true,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?
我如何一次预测所有未标记的属性?
我根据WekaManual-3-7-11制作了这个,它可以工作,但只适用于单个属性:
.. Instances unlabeled = DataSource.read("testWEKA1.arff"); unlabeled.setClassIndex(unlabeled.numAttributes() - 1); // create copy Instances labeled = new Instances(unlabeled); // label instances for (int i = 0; i < unlabeled.numInstances(); i++) { double clsLabel = classifier.classifyInstance(unlabeled.instance(i)); labeled.instance(i).setClassValue(clsLabel); DataSink.write("labeled.arff", labeled);
回答:
抱歉,我认为你不能使用Weka中的Naive Bayes来预测多个属性。
作为替代方案,如果你通过Java代码运行Weka,你可以遍历所有需要填充的属性。这可以通过构建具有n个属性的分类器并填充下一个空白,直到所有缺失的数据都被填入来实现。
看起来你的数据还与时间有关。如果模型稍作重构,可能可以全部纳入一个模型中。例如,你可以有用于预测时间、星期几以及过去几小时的存在情况的属性,以及描述房屋历史存在的属性。这可能对你的问题来说有些过头,但也可以消除对多个分类器的需求。
希望这对你有帮助!
更新!
根据你的请求,我花了几分钟思考这个问题。这个基于时间的预测的关键是你希望能够预测一天的剩余时间,而你的分类器可用的数据量取决于一天中的时间。这意味着,根据当前结构,你需要为每个15分钟的时间段预测值的分类器,其中早期时段包含的输入数据远少于后期时段。
如果可能,你可以使用另一种方法,其中每个时间段使用相同数量的历史信息,并且可能为所有情况共享同一个分类器。一个可能的信息集可以如下所示:
- 要估计的时间段
- 星期几
- 前一小时或两小时的活动
- 前24小时的其他活动
- 关于一般时间段的历史信息
如果你每天获取信息,可能会量化这些因素,然后用它来预测任何时间段。然后,如果你想预测一整天,你可以继续输入之前的预测,直到完成一天的预测。
我曾做过一个类似的预测到达时间的问题,基于类似的因素(之前的行为、公共假日、星期几等),估计通常是合理的,尽管对于人类过程来说准确性可能不如预期。