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 nb31 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 num40 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 r146 print r247 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