Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加载Na和xEF;使用weka-jar在java代码中创建ve-Bayes模型_Java_Weka_Naivebayes - Fatal编程技术网

加载Na和xEF;使用weka-jar在java代码中创建ve-Bayes模型

加载Na和xEF;使用weka-jar在java代码中创建ve-Bayes模型,java,weka,naivebayes,Java,Weka,Naivebayes,我使用了weka并通过使用wekagui制作了一个朴素贝叶斯分类器。然后,我通过以下操作保存了此模型。现在我想通过Java代码加载这个模型,但是我找不到任何方法来加载使用weka保存的模型 这是我的要求,我必须单独制作模型,然后在单独的程序中使用它 如果有人能在这方面指导我,我将非常感谢您。您可以使用以下命令轻松地在java中加载保存的模型: Classifier myCls = (Classifier) weka.core.SerializationHelper.read(pathToMode

我使用了weka并通过使用wekagui制作了一个朴素贝叶斯分类器。然后,我通过以下操作保存了此模型。现在我想通过Java代码加载这个模型,但是我找不到任何方法来加载使用weka保存的模型

这是我的要求,我必须单独制作模型,然后在单独的程序中使用它


如果有人能在这方面指导我,我将非常感谢您。

您可以使用以下命令轻松地在java中加载保存的模型:

Classifier myCls = (Classifier) weka.core.SerializationHelper.read(pathToModel);
为了获得完整的Java工作流,我在SO文档中撰写了以下文章,现在复制到这里:

Weka中的文本分类 基于LibLinear的文本分类
  • 从.arff文件创建培训实例

    private static Instances getDataFromFile(String path) throws Exception{
    
        DataSource source = new DataSource(path);
        Instances data = source.getDataSet();
    
        if (data.classIndex() == -1){
            data.setClassIndex(data.numAttributes()-1);
            //last attribute as class index
        }
    
        return data;    
    }
    

  • 使用StringToOrdVector将字符串属性转换为数字表示:

    • 此过滤器的重要功能:

    • tf idf代表
    • 堵塞
    • 小写词
    • 停止语
    • n-gram表示*

    • 对培训数据应用过滤器:
      trainingData=filter.useFilter(培训数据,过滤器)

    • 创建线性分类器

    • 下面的SVM类型0对应于L2正则化逻辑回归
    • 设置
      setProbabilityEstimates(true)
      以打印输出概率

      分类器cls=null;
      LibLINEAR LibLINEAR=新的LibLINEAR();
      liblinear.setSVMType(新选择的标记(0,liblinear.TAGS_SVMTYPE));
      liblinear.setProbabilityEstimates(真);
      //liblinear.setBias(1);//默认值
      cls=线性;
      cls.构建分类器(训练数据)

    • 保存模型

      System.out.println(“保存模型…”);
      对象输出流oos;
      oos=newObjectOutputStream(newFileOutputStream(path+“mymodel.model”);
      oos.writeObject(cls);
      oos.flush();
      oos.close()

    • .arff
      文件创建测试实例

      实例trainingData=getDataFromFile(PathToArffile)

    • 负载分级机

    分类器myCls=(分类器)weka.core.SerializationHelper.read(路径+“mymodel.model”)

    • 使用与上述相同的StringToOrdVector过滤器,或为testingData创建一个新的过滤器,但记住使用此命令的训练数据:
      filter.setInputFormat(训练数据)这将使培训和测试实例兼容。
      或者,您可以使用
      InputMappedClassifier

    • 将筛选器应用于testingData:
      testingData=filter.useFilter(testingData,filter)

    • 分类

    1.获取测试集中每个实例的类值

    对于(int j=0;jres
    是一个双精度值,对应于
    .arff
    文件中定义的标称类。要获取标称类,请使用:
    testintData.classAttribute().value((int)res)


2.得到每个实例的概率分布

 for (int j = 0; j < testingData.numInstances(); j++) {
    double[] dist = first.distributionForInstance(testInstances.get(j));
 }
for(int j=0;j
dist
是一个双数组,包含
.arff
文件中定义的每个类的概率


注意。分类器应支持概率分布,并使用:
myClassifier.setProbabilityEstimates(true)启用它们

您可以使用以下命令轻松地在java中加载保存的模型:

Classifier myCls = (Classifier) weka.core.SerializationHelper.read(pathToModel);
为了获得完整的Java工作流,我在SO文档中撰写了以下文章,现在复制到这里:

Weka中的文本分类 基于LibLinear的文本分类
  • 从.arff文件创建培训实例

    private static Instances getDataFromFile(String path) throws Exception{
    
        DataSource source = new DataSource(path);
        Instances data = source.getDataSet();
    
        if (data.classIndex() == -1){
            data.setClassIndex(data.numAttributes()-1);
            //last attribute as class index
        }
    
        return data;    
    }
    

  • 使用StringToOrdVector将字符串属性转换为数字表示:

    • 此过滤器的重要功能:

    • tf idf代表
    • 堵塞
    • 小写词
    • 停止语
    • n-gram表示*

    • 对培训数据应用过滤器:
      trainingData=filter.useFilter(培训数据,过滤器)

    • 创建线性分类器

    • 下面的SVM类型0对应于L2正则化逻辑回归
    • 设置
      setProbabilityEstimates(true)
      以打印输出概率

      分类器cls=null;
      LibLINEAR LibLINEAR=新的LibLINEAR();
      liblinear.setSVMType(新选择的标记(0,liblinear.TAGS_SVMTYPE));
      liblinear.setProbabilityEstimates(真);
      //liblinear.setBias(1);//默认值
      cls=线性;
      cls.构建分类器(训练数据)

    • 保存模型

      System.out.println(“保存模型…”);
      对象输出流oos;
      oos=newObjectOutputStream(newFileOutputStream(path+“mymodel.model”);
      oos.writeObject(cls);
      oos.flush();
      oos.close()

    • .arff
      文件创建测试实例

      实例trainingData=getDataFromFile(PathToArffile)

    • 负载分级机

    分类器myCls=(分类器)weka.core.SerializationHelper.read(路径+“mymodel.model”)

    • 使用与上述相同的StringToOrdVector过滤器,或为testingData创建一个新的过滤器,但记住使用此命令的训练数据:
      filter.setInputFormat(训练数据)这将使培训和测试实例兼容。
      或者,您可以使用
      InputMappedClassifier

    • 将筛选器应用于testingData:
      testingData=filter.useFilter(testingData,filter)

    • 分类

    1.获取测试集中每个实例的类值

    fo