是否可以用其他方法替换apriori中的fastvector?

时间:2013-11-21 20:48:20

标签: java weka

希望你们周五都有一个美好的星期五。我的名字是Minh,我是论坛的新成员。我正在学习使用Weka,如果您可能知道答案,我有一个问题,我想寻求您的帮助。我打算将weka用于我的Java学校项目,我相信我在我的项目中使用了weka-3.7.7 jar文件。这一切都运行良好,当我使用关联规则的apriori包时,我能够查看输出。但是,当我尝试使用FastVector(例如FastVector = apriori.getAllTheRules())从apriori.getAllTheRules()打印出每个数据项时,我陷入困境。我因为FastVector被弃用而陷入困境,我在google上阅读了一些评论,并说它可以用名为list array的东西替换它,而无需进一步的例子或解释如何追求它。

但是因为我是Weka的新手而且我在网上找不到其他文章,提到如何使用apriori.getAllTheRules()的list数组。因此,如果您碰巧知道一些文章或程序教程,提及有关如何使用列表数组的目的,请转发给我这些资源。我非常感谢您提前提供的所有帮助。

attach是我使用apriori规则的示例java程序

package org.minh;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import weka.associations.Apriori;
import weka.core.Instances;

public class Main
{
  public static void main(String[] args)
  {
    Instances data = null;

    try {
         BufferedReader reader = new BufferedReader( new
         FileReader( "c:\\weka\\CRMArff.arff" ) );

         data = new Instances(reader);
         reader.close();
         data.setClassIndex(data.numAttributes() - 1);
        }

    catch ( IOException e ) {

         e.printStackTrace();
        }

    double deltaValue = 0.05;
    double lowerBoundMinSupportValue = 0.05;
    double minMetricValue = 0.5;
    int numRulesValue = 100;
    double upperBoundMinSupportValue = 1.0;

    String resultapriori;
    Apriori apriori = new Apriori();
    apriori.setDelta(deltaValue);
    apriori.setLowerBoundMinSupport(lowerBoundMinSupportValue);
    apriori.setNumRules(numRulesValue);
    apriori.setUpperBoundMinSupport(upperBoundMinSupportValue);
    apriori.setMinMetric(minMetricValue);

    try
       {
        apriori.buildAssociations( data );
       }
    catch ( Exception e ) {

        e.printStackTrace();
       }
    resultapriori = apriori.toString();

    System.out.println(resultapriori);
   }
}

1 个答案:

答案 0 :(得分:0)

使用FastVector提取每个规则,我使用了这个循环:

 FastVector[] ass=ap.getAllTheRules();
     for (FastVector rule : ass) {  
    if (rule == null) continue;
         System.out.println("---> " + rule);
         for (int i = 0; i < rule.size(); ++i) {
                 Object o = rule.elementAt(i);
                 if (o instanceof AprioriItemSet) {
                      System.out.println(((AprioriItemSet) o).toString(data));
                 } else {
                     System.out.println("rule: "+o);
                 }
         }

      }

不幸的是,我无法帮助您如何使用数组列表来实现这一目的!