在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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM