weka介绍
参见
1)百度百科:http://baike.baidu.com/link?url=V9GKiFxiAoFkaUvPULJ7gK_xoEDnSfUNR1woed0YTmo20Wjo0wYo7uff4mq_wg3WzKhTZx4Ok0JFgtiYY19U4q
2)weka官网: http://www.cs.waikato.ac.nz/ml/weka/
简单文本分类实现:
此处文本为已处理好的文本向量空间模型,关于文本特征提取主要是基于TF-IDF算法对已分词文档进行特征抽取,然后基于已提取特征将所有文档表示为向量空间模型。
偷个小懒,就用weka自带的*.arff格式文档来做实现。
weka对于文本分类提供两种方式,一种是批量式文本分类,即将所有数据一次性放入内存进行分类处理,这种情况对内存有所要求;为适应大量数据的分类实现,另一种增量式
文本分类,允许分批次导入数据至内存进行分类,这样就避免了因数据集过大而内存不足的问题。具体实现如下:
1)采用增量式朴素贝叶斯算法进行分类
注:weka中所有增量式分类器都实现了UpdateableClassifier接口,该接口位于weka.classifiers包中。
1 /** 2 * train a classifier using trainSet,then evaluate the classifier on testSet 3 * 分类分为两种:增量、批量 4 * 此处为增量式分类:适用于训练集太大而内存有限的情况 5 * 加载数据集(训练集or测试集),使用ArffLoader 6 * @param trainSet:训练集路径 7 * @param testSet:测试集路径 8 * @return classifier 9 * 10 */ 11 private Classifier trainClassifierIncremental(String trainSet,String testSet){ 12 ArffLoader loader=new ArffLoader(); 13 Instances instances = null; 14 NaiveBayesUpdateable naiveBayesUpdateable=null; 15 try { 16 //load data 17 loader.setFile(new File(trainSet)); 18 instances=loader.getStructure(); 19 // instances.setClassIndex(classIndex); // 指定分类属性索引 20 instances.setClassIndex(instances.numAttributes()-1); //默认最后一个属性为分类属性 21 22 // train NaiveBayes :incremental classifier 23 naiveBayesUpdateable=new NaiveBayesUpdateable(); 24 naiveBayesUpdateable.buildClassifier(instances); 25 Instance current; 26 while((current=loader.getNextInstance(instances))!=null){ 27 naiveBayesUpdateable.updateClassifier(current); 28 } 29 30 //evaluate classifier 31 Instances testInstances=new Instances(new FileReader(testSet)); 32 testInstances.setClassIndex(testInstances.numAttributes()-1); 33 Evaluation eval=new Evaluation(instances); 34 eval.evaluateModel(naiveBayesUpdateable, testInstances); 35 System.out.println(eval.toMatrixString()); 36 System.out.println(eval.toSummaryString()); 37 System.out.println(eval.toClassDetailsString()); 38 39 } catch (Exception e) { 40 e.printStackTrace(); 41 } 42 return naiveBayesUpdateable; 43 }