Search code examples
pythonclassificationwrapperwekalibsvm

Weka: LibSVM works in GUI, but not in Python code with WEKA Wrapper


I'm trying to use multiple classifiers in my Python program using [python-weka-wrapper-3][1]. This is my code:

def main():
     classifierNB = Classifier(classname="weka.classifiers.bayes.NaiveBayes") #works
     classifierNBMult = Classifier(classname="weka.classifiers.bayes.NaiveBayesMultinomial") #works
     classifierLibSVM = Classifier(classname="weka.classifiers.functions.LibSVM") #won't work

try:
    jvm.start()
    main()
except Exception as e:
    print("Error:", e)
finally:
    jvm.stop()

However, when I run it (on Windows) I get the following error:

java.lang.NoClassDefFoundError: weka/classifiers/functions/LibSVM
Caused by: java.lang.ClassNotFoundException:
weka.classifiers.functions.LibSVM
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
Exception in thread "Thread-0" 

Failed to get class weka/classifiers/functions/LibSVM
Failed to instantiate
weka.classifiers.functions.LibSVM/weka/classifiers/functions/LibSVM:
weka/classifiers/functions/LibSVM
Error: Object does not implement or subclass weka.classifiers.Classifier:
builtins.NoneType

I've installed LibSVM with the Weka Package Manager GUI. It works fine in Weka GUI. I have also included the following classpaths, but this doesn't seem to work either:

C:\Path\To\wekafiles\packages\LibSVM\lib\libsvm.jar
C:\Path\To\wekafiles\packages\LibSVM\LibSVM.jar
C:\Path\To\wekafiles\packages\LibSVM\lib\*
C:\Path\To\wekafiles\packages\LibSVM\*

What am I doing wrong? Thanks in advance!


Solution

  • I was able to fix it with jvm.start(packages=True), woops! :)