加载Na和xEF;使用weka-jar在java代码中创建ve-Bayes模型
我使用了weka并通过使用wekagui制作了一个朴素贝叶斯分类器。然后,我通过以下操作保存了此模型。现在我想通过Java代码加载这个模型,但是我找不到任何方法来加载使用weka保存的模型 这是我的要求,我必须单独制作模型,然后在单独的程序中使用它加载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
如果有人能在这方面指导我,我将非常感谢您。您可以使用以下命令轻松地在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()代码>
- 从
文件创建测试实例 实例trainingData=getDataFromFile(PathToArffile).arff
- 负载分级机
分类器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