如何使用WEKA和NaiveBayes一次预测几个未标记的属性?

时间:2014-11-11 13:38:13

标签: machine-learning weka

我有一个包含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}

@DATA
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,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,false
false,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
.....

并对其进行了朴素贝叶斯分类。问题是,结果只显示一个属性(例如最后一个属性)的成功。

A"真实"在给定日期拍摄的样本可能如下所示:

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);

3 个答案:

答案 0 :(得分:0)

我无法判断您的arff文件是否有问题。

但是,这里有一个想法:你可以添加一个NominalToBinary无监督属性过滤器,以确保属性slot1-slot96被识别为二​​进制。

答案 1 :(得分:0)

很抱歉,但我不相信你可以在Weka中使用Naive Bayes预测多个属性。

如果通过Java代码运行Weka,您可以做的替代方法是循环遍历需要填充的所有属性。这可以通过构建具有n个属性的分类器并填入下一个空白直到输入所有缺失数据来完成。

看来你所拥有的也是基于时间的。也许如果模型有些重组,它可能都适合单个模型。例如,您可以拥有预测时间,星期几和过去几个小时的存在的属性以及描述房屋中历史存在的属性。它可能会超出您的问题的顶部,但也可以消除对多个分类器的需求。

希望这有帮助!

更新!

根据您的要求,我花了几分钟时间考虑手头的问题。关于这种基于时间的预测的一点是,您希望能够预测当天剩余的时间,并且分类器可用的数据量是动态的,具体取决于一天中的时间。这意味着,在当前结构的情况下,您需要一个分类器来预测每个15分钟时隙的值,其中较早的时隙包含的输入数据远远少于后来的时隙。

如果可能,您可以使用不同的方法,您可以为每个时间段使用相同数量的历史信息,并可能为所有情况共享相同的分类器。一组可能的信息可以如下所述:

  • 待估计的时段
  • 星期几
  • 前一小时或两小时的活动
  • 过去24小时的其他活动
  • 关于一般时段的历史信息

如果您每天获取信息,可以量化这些因素中的每一个,然后使用它来预测任何时间段。然后,如果你想预测它一整天,你可以继续喂它以前的预测,直到你完成当天的预测。

我根据类似因素(以前的行为,公众假期,星期几等)预测到达时间也有类似的问题,估计通常是合理的,尽管对人类过程的预期准确。

答案 2 :(得分:0)

有两个框架可以在WEKA之上提供多标签学习和工作:

MULAN:http://mulan.sourceforge.net/
MEKA:http://meka.sourceforge.net/

我只尝试过MULAN,效果非常好。要获得最新版本,您需要克隆他们的git存储库并构建项目。

相关问题