[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wekalist
Subject:    [Wekalist] API Compatibility issue between Weka 3.6 and 3.7
From:       Kaveh Kohan <kaveh.kohan () gmail ! com>
Date:       2012-06-29 14:50:55
Message-ID: CAAqDSoQSmQp-nWDJ246Uiy_Sv8kw4R3TFmYRHRN_O8sdBDsFNQ () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Hi Weka users,

I am using Weka API with Jython. I used to use Weka 3.6 API and since I
needed to use a few packages for feature selection, I upgraded to Weka
3.7.5 but  I ran into the following compatibility problem. The following
code used to work in Weka 3.6 but not in 3.7.5:

~~~~~~
evaluation.crossValidateModel(bestsmo, data, numFolds, random, [buffer,
attRange, outputDistribution])

~~~~~~  [TO  SEE   TYPES   AND   DEFINITIONS   OF   EACH    VARIABLE
PLEASE   SCROLL   TO   THE   END  OF  EMAIL]

It produces the following error:

~~~~~~~
Traceback (most recent call last):
 [......]
  File
"/sbia/home/batmangn/code/Projects/GONDOLA2-build/bin/smo_param_search.py",
line 152, in SMO_ParamFinder
    evaluation.crossValidateModel(bestsmo,data,numFolds,random,[buffer,
attRange, outputDistribution])
    at weka.classifiers.Evaluation.crossValidateModel(Evaluation.java:538)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)

java.lang.ClassCastException: java.lang.ClassCastException:
java.lang.StringBuffer cannot be cast to
weka.classifiers.evaluation.output.prediction.AbstractOutput

~~~~~~~

It seems that the function interface has changed significantly,
specifically for this function from 3.6 to 3.7.5. I can only find the
documentation 3.7.5 but not 3.6 to tell for sure. Now here my question:

1. How can I change the line (evaluation.crossValidate.....) to get it
working with Weka 3.7.*  ?

2. Is there any way to change the line mentioned above to work with both
3.6 and 3.7.* ?


Thanks in advance,
Kaveh


~~~~~~~~~~~~~~~~~~~~~` SOURCE

import weka.core.Instances as Instances
import weka.classifiers.functions.SMO as SMO
import weka.classifiers.functions.supportVector.PolyKernel as PolyKernel
import weka.classifiers.functions.supportVector.RBFKernel as RBFKernel
import weka.classifiers.Evaluation as Evaluation
import weka.core.Range as Range
import weka.classifiers.meta.GridSearch as GridSearch


import java.lang.StringBuffer as StringBuffer
import java.lang.String as String
import java.lang.Boolean as Boolean
import java.util.Random as Random

       [......]
        bestsmo = SMO()
        kernel = PolyKernel()
        kernel.setExponent(bestValues.y)
        bestsmo.setC(bestValues.x)
        bestsmo.setKernel(kernel)
        evaluation = Evaluation(data)
        buffer = StringBuffer()  # buffer for the predictions
        attRange = Range()  # no additional attributes output
        outputDistribution = Boolean(False)  # we don't want distribution
        random = Random(1)
                numFolds = min(10,data.numInstances())
                print "numFolds : ", numFolds
        evaluation.crossValidateModel(bestsmo,data,numFolds,random,[buffer,
attRange, outputDistribution])

[Attachment #5 (text/html)]

Hi Weka users,<br><br>I am using Weka API with Jython. I used to use Weka 3.6 API and \
since I needed to use a few packages for feature selection, I upgraded to Weka 3.7.5 \
but  I ran into the following compatibility problem. The following code used to work \
in Weka 3.6 but not in 3.7.5:<br>

<br>~~~~~~<br> evaluation.crossValidateModel(bestsmo, data, numFolds, random, \
[buffer, attRange, outputDistribution])<br><br>~~~~~~  [TO  SEE   TYPES   AND   \
DEFINITIONS   OF   EACH    VARIABLE    PLEASE   SCROLL   TO   THE   END  OF  \
EMAIL]<br> <br>It produces the following error:<br><br>~~~~~~~<br>Traceback (most \
recent call last):<br> [......]<br>  File \
&quot;/sbia/home/batmangn/code/Projects/GONDOLA2-build/bin/smo_param_search.py&quot;, \
line 152, in SMO_ParamFinder<br>  \
evaluation.crossValidateModel(bestsmo,data,numFolds,random,[buffer, attRange, \
outputDistribution])<br>  at \
weka.classifiers.Evaluation.crossValidateModel(Evaluation.java:538)<br>    at \
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br>    at \
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)<br>    at \
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)<br>

    at java.lang.reflect.Method.invoke(Unknown \
Source)<br><br>java.lang.ClassCastException:  java.lang.ClassCastException: \
java.lang.StringBuffer cannot be cast to  \
weka.classifiers.evaluation.output.prediction.AbstractOutput<br> \
<br>~~~~~~~<br><br>It seems that the function interface has changed significantly, \
specifically for this function from 3.6 to 3.7.5. I can only find the documentation \
3.7.5 but not 3.6 to tell for sure. Now here my question:<br> <br>1. How can I change \
the line (evaluation.crossValidate.....) to get it working with Weka 3.7.*  \
?<br><br>2. Is there any way to change the line mentioned above to work with both 3.6 \
and 3.7.* ?<br><br><br>Thanks in advance,<br> Kaveh<br><br><br>~~~~~~~~~~~~~~~~~~~~~` \
SOURCE<br><br>import weka.core.Instances as Instances<br>import \
weka.classifiers.functions.SMO as SMO<br>import \
weka.classifiers.functions.supportVector.PolyKernel as PolyKernel<br> import \
weka.classifiers.functions.supportVector.RBFKernel as RBFKernel<br> import \
weka.classifiers.Evaluation as Evaluation<br>import weka.core.Range as \
Range<br>import weka.classifiers.meta.GridSearch as GridSearch<br><br><br>import \
java.lang.StringBuffer as StringBuffer<br>import java.lang.String as String<br>

import java.lang.Boolean as Boolean<br>import java.util.Random as Random<br><br>      \
[......]<br>        bestsmo = SMO()<br>        kernel = PolyKernel()<br>        \
kernel.setExponent(bestValues.y)<br>        bestsmo.setC(bestValues.x)<br>

        bestsmo.setKernel(kernel)<br>        evaluation = Evaluation(data)<br>        \
buffer = StringBuffer()  # buffer for the predictions<br>        attRange = Range()  \
# no additional attributes output<br>        outputDistribution = Boolean(False)  # \
we don&#39;t want distribution<br>

        random = Random(1)<br>                numFolds = \
min(10,data.numInstances())<br>                print &quot;numFolds : &quot;, \
numFolds<br>        evaluation.crossValidateModel(bestsmo,data,numFolds,random,[buffer, \
attRange, outputDistribution])<br>

<br><br><br><br><br><br><br>



_______________________________________________
Wekalist mailing list
Send posts to: Wekalist@list.scms.waikato.ac.nz
List info and subscription status: https://list.scms.waikato.ac.nz/mailman/=
listinfo/wekalist
List etiquette: http://www.cs.waikato.ac.nz/~ml/weka/mailinglist_etiquette.=
html


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic