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
參考文獻:
[2] Weka Sourceforge
[3] 用Python的方式調用Weka
