zoukankan      html  css  js  c++  java
  • 在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

  • 相关阅读:
    【Qt】无边框窗体中带有ActiveX组件时的一个BUG
    Qt:正确判断文件、文件夹是否存在的方法
    自定义Data Service Providers
    Facebook的ATOM Editor的底层Electron
    ASP.NET Web API中使用OData
    Oracle 使用
    ODP.NET 之访问 Oracle 数据库
    Oracle安装及使用入门
    架构设计
    CQRS模式实现
  • 原文地址:https://www.cnblogs.com/kemaswill/p/2790509.html
Copyright © 2011-2022 走看看