在Python中使用Weka

  Weka是用Java编写的数据挖掘工具,如果要在Python中调用Weka,需要用到Jython。Jython是100%用Java实现的Python,可以无缝的嵌入到Java平台当中。

  前期准备:

  1. 安装JDK,Jython

  2. 将Jython的执行路径加入到$PATH,将Weka.jar的路径加入到$CLASSPATH中

  下面我们用Jython调用Weka的朴素贝叶斯分类器来对数据进行分类:

 1 #!/usr/bin/python
 2  #coding=UTF-8
 3  import sys
 4  import java.io.FileReader as FileReader
 5  import java.io.File as File
 6  import weka.core.Instances as Instances
 7  import weka.core.converters.CSVLoader as CSVLoader
 8  import weka.classifiers.bayes.NaiveBayes as NaiveBayes
 9  #训练数据格式为CSV文件
10  loader=CSVLoader()
11  loader.setSource(File('train.csv'))
12  data=loader.getDataSet()
13  
14  '''
15  训练数据格式为arff文件
16  reader = FileReader("/train.arff")
17  data = Instances(reader)
18  '''
19  
20  #设置分类属性
21  data.setClassIndex(data.numAttributes()-1)
22  
23  #训练朴素贝叶斯模型
24  nb=NaiveBayes()
25  #设置选项,测出我们不使用任何选项
26  options=splitOptions('')
27  nb.setOptions(options)
28  nb.buildClassifier(data)
29  #输出训练好的朴素贝叶斯分类模型
30  print nb
31  
32  #导入测试数据,此处是CSV格式,也可以用arff格式
33  loader=CSVLoader()
34  loader.setSource(File('test.csv'))
35  test_data=loader.getDataSet()
36  test_data.setClassIndex(test_data.numAttributes()-1)
37  
38  num=test_data.numInstances()
39  print num
40  for i in range(num):
41      #输出测试样例在所有类别上的概率分布
42      r1=nb.distributionForInstance(test_data.instance(i))
43      #输出测试样例的分类结果,是所有类别中概率最高的那个类别
44      r2=nb.classifyInstance(test_data.instance(i))
45      print r1
46      print r2
47  
48  #5重交叉验证评估朴素贝叶斯分类器的效果
49  evaluator=Evaluation(data)
50  print evaluator.evaluateModel(NaiveBayes(),['-t','train.csv','-x','5','-i'])

  上述脚本命名为weka_naive_bayes.py

  执行该脚本的命令为jython weka_naive_bayes.py

 

  参考文献:

  [1]  Using Weka from Jython

  [2]  Weka Sourceforge

  [3]  用Python的方式调用Weka

posted on 2012-11-27 12:06  潘的博客  阅读(7505)  评论(1编辑  收藏  举报

导航