How to add LibSVM class to WEKA classpath on a Mac

15,349

Solution 1

Here is another extremely easy way to add LibSVM support to WEKA on OS X (no command line needed):

  1. Download LibSVM from here
  2. Go to /Applications folder on your Mac (the folder where the Weka app is installed)
  3. Right click on Weka > Chose "Show Package Contents"
  4. Copy libsvm.jar to /Applications/Weka.app/Contents/Resources/Java
  5. open /Applications/Weka.app/Contents/Info.plist in your favorite text editor
  6. change <string>$JAVAROOT/weka.jar</string> to <string>$JAVAROOT/weka.jar:$JAVAROOT/libsvm.jar</string> (you can also adjust the heap size here)
  7. Save and start weka

Solution 2

You can put libsvm.jar in a folder of your choice, e.g. ~/Library/Java, and then run weka from the command-line as follows:

$ java -Xmx512m -classpath /Users/chl/weka/weka.jar:/Library/Java/libsvm.jar weka.gui.GUIChooser

You can also update your CLASSPATH to reflect locations where *.jar files can be found. I have the following in my .profile:

export CLASSPATH="/Users/chl/weka/weka.jar:~/Library/Java/*"

(You will need to replace /Users/chl/weka to reflect the correct location of your weka.jar; usually, it is located at the top of the directory if you downloaded the source files, or under weka-3-7-3.app/Contents/Resources/Java/ if you use the bundled app.)

This way, the first command to start weka GUI simplifies to

$ java -classpath $CLASSPATH:weka.jar:libsvm.jar weka.gui.GUIChooser

Don't use java -jar since it will override the CLASSPATH, as discussed here.

I also have an alias in my .bash_aliases for wrapping all that stuff:

alias weka='java -Xmx512m -classpath $CLASSPATH:weka.jar'

in order to use weka from the command-line as, e.g.

$ weka weka.classifiers.trees.RandomTree -t iris.arff -i

Solution 3

1) Copy libsvm.jar found here into the Java folder in the package content of the Weka.app:

<path-to-Weka.app>/Weka.app/Contents/Java/

2) Add this line to your .bash_profile or similar configuration file:

export CLASSPATH="<path-to-Weka.app>/Weka.app/Contents/Java/weka.jar:<path-to-Weka.app>/Weka.app/Contents/Java/libsvm.jar"

Note: you should replace <path-to-Weka.app> by your own path. It could look like /Applications/JavaApp/weka-3-6-11-oracle-jvm.app.

Solution 4

Download the libsvm files and past them in the working directory of weka. Now goes to Control Panel->System->Advance System Setting-> and Edit the Environment Variable, Select the Class_Path variable and copy all that path along with the file name. i.e. C:\Program Files\Weka\Libsvm.jar; and click ok-ok-ok and Restart the weka

Share:
15,349
Dan
Author by

Dan

Husband, father, thinker, anachronism detector, coder, and geek. That sentence was intentionally written with an Oxford Comma.

Updated on June 19, 2022

Comments

  • Dan
    Dan almost 2 years

    I am running Max OS X 10.7 Lion and I want to use WEKA with LibSVM from command line. I get this error:

    Problem evaluating classifier: libsvm classes not in CLASSPATH!
    

    Error I am receiving in WEKA

    I found the LibSVM library here. I need to add it to my Java classpath so that WEKA can find it. The download contains several files, shown below. I don't know how to add them to my classpath for Java.

    Files in LibSVM download that need to be added to classpath

    I am attempting to use the LibSVM classifier in WEKA because it is preferable for me over SMO. I am also unsure if this means the Java classpath or if it is specific to WEKA. I also don't know where to get these classes from. Any help is appreciated.

  • Dan
    Dan over 12 years
    Thanks! I will try this out this evening (and mark this as the accepted answer if it works). Thanks again,
  • chl
    chl about 12 years
    @DanO'Day Did you have a chance to try the above. Did that work?
  • Dan
    Dan about 12 years
    I apologize for not getting back to this. Yes, this worked great! Thanks,
  • eayurt
    eayurt over 10 years
    Thank you for solving but I have a problem is including this one "evaluating classifier rand". How can I handle it?