Python Weka API-Data classification error

698 views
Skip to first unread message

bhanu prakash

unread,
Apr 19, 2018, 12:41:35 AM4/19/18
to python-weka-wrapper
When I am trying trying to apply classification on the data set with we are encountering error at cls.build_classifier(data).

please help us our.


from weka.classifiers import Classifier
import weka.core.jvm as jvm
jvm.start(system_cp=True, packages=True)
import weka.core.converters as converters
data = converters.load_any_file("KDDTrain.csv")
data.class_is_last()
#print(data)
cls = Classifier(classname="weka.classifiers.trees.J48", options=["-C", "0.3"])
cls.build_classifier(data)

for index, inst in enumerate(data):
pred = cls.classify_instance(inst)
dist = cls.distribution_for_instance(inst)
print(str(index+1) + ": label index=" + str(pred) + ", class distribution=" + str(dist))



error :

C:\Users\bhanu\PycharmProjects\main_project\venv\Scripts\python.exe C:/Users/bhanu/PycharmProjects/main_project/test_class.py
DEBUG:weka.core.jvm:Adding bundled jars
DEBUG:weka.core.jvm:Adding system classpath
DEBUG:weka.core.jvm:Classpath=['C:\\Users\\bhanu\\PycharmProjects\\main_project\\venv\\lib\\site-packages\\javabridge\\jars\\rhino-1.7R4.jar', 'C:\\Users\\bhanu\\PycharmProjects\\main_project\\venv\\lib\\site-packages\\javabridge\\jars\\runnablequeue.jar', 'C:\\Users\\bhanu\\PycharmProjects\\main_project\\venv\\lib\\site-packages\\javabridge\\jars\\cpython.jar', 'C:\\Users\\bhanu\\PycharmProjects\\main_project\\venv\\lib\\site-packages\\weka\\lib\\python-weka-wrapper.jar', 'C:\\Users\\bhanu\\PycharmProjects\\main_project\\venv\\lib\\site-packages\\weka\\lib\\weka.jar']
DEBUG:weka.core.jvm:MaxHeapSize=default
DEBUG:weka.core.jvm:Package support enabled
DEBUG:javabridge.jutil:Creating JVM object
DEBUG:javabridge.jutil:Signalling caller
weka.core.UnsupportedAttributeTypeException: weka.classifiers.trees.J48: Cannot handle numeric class!
weka.core.Capabilities.test(Capabilities.java:1067)
weka.core.Capabilities.test(Capabilities.java:1256)
weka.core.Capabilities.test(Capabilities.java:1138)
weka.core.Capabilities.testWithFail(Capabilities.java:1468)
weka.classifiers.trees.J48.buildClassifier(J48.java:277)

at weka.core.Capabilities.test(Capabilities.java:1067)
at weka.core.Capabilities.test(Capabilities.java:1256)
at weka.core.Capabilities.test(Capabilities.java:1138)
at weka.core.Capabilities.testWithFail(Capabilities.java:1468)
at weka.classifiers.trees.J48.buildClassifier(J48.java:277)
Traceback (most recent call last):
  File "C:/Users/bhanu/PycharmProjects/main_project/test_class.py", line 10, in <module>
    cls.build_classifier(data)
  File "C:\Users\bhanu\PycharmProjects\main_project\venv\lib\site-packages\weka\classifiers.py", line 83, in build_classifier
    javabridge.call(self.jobject, "buildClassifier", "(Lweka/core/Instances;)V", data.jobject)
  File "C:\Users\bhanu\PycharmProjects\main_project\venv\lib\site-packages\javabridge\jutil.py", line 887, in call
    result = fn(*nice_args)
  File "C:\Users\bhanu\PycharmProjects\main_project\venv\lib\site-packages\javabridge\jutil.py", line 854, in fn
    raise JavaException(x)
javabridge.jutil.JavaException: weka.classifiers.trees.J48: Cannot handle numeric class!



Regards
Bhanuprakash Vattikuti

Peter Reutemann

unread,
Apr 19, 2018, 12:59:13 AM4/19/18
to python-weka-wrapper
J48 is a classification algorithm (categorical or nominal class
attribute), not to be used for regression (numeric class attribute).

I'm not familiar with your dataset, but if the last attribute is
actually a categorical one (ie with categories like 1, 2, 3, etc),
then you need to convert that attribute for Weka.
You can use the "NumericToNominal" for this, with the range being the
last attribute:
http://weka.sourceforge.net/doc.dev/weka/filters/unsupervised/attribute/NumericToNominal.html

You might have to apply the filter before you're setting the class
attribute with "data.class_is_last()".

Cheers, Peter
--
Peter Reutemann
Dept. of Computer Science
University of Waikato, NZ
+64 (7) 858-5174
http://www.cms.waikato.ac.nz/~fracpete/
http://www.data-mining.co.nz/

Marcelinus David

unread,
Nov 6, 2018, 7:23:45 PM11/6/18
to python-weka-wrapper
Peter, i want to ask something, when i try import :
import weka.core.jvm as jvm
from weka.core.converters import Loader

I always get this error:
Traceback (most recent call last)
:

  File "C:\Users\M\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2961, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-3-77c39c862f2f>", line 2, in <module>
    from weka.classifiers import Classifier

  File "C:\Users\M\Anaconda3\lib\site-packages\weka\classifiers.py", line 2169
    except Exception, e:
                    ^
SyntaxError: invalid syntax

and if i import:
from weka.core.converters import Loader

I always get this error:
Traceback (most recent call last)
:

  File "C:\Users\M\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2961, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)

  File "<ipython-input-4-cec7ec6ac826>", line 1, in <module>
    from weka.core.converters import Loader

  File "C:\Users\M\Anaconda3\lib\site-packages\weka\core\converters.py", line 18, in <module>
    from weka.core.classes import OptionHandler

  File "C:\Users\M\Anaconda3\lib\site-packages\weka\core\classes.py", line 2085
    except Exception, e:
                    ^
SyntaxError: invalid syntax


These errors always occur while i am using pyhton 3.7. You know why ?
 

Peter Reutemann

unread,
Nov 6, 2018, 7:26:26 PM11/6/18
to python-weka-wrapper
> Peter, i want to ask something, when i try import :
> import weka.core.jvm as jvm
> from weka.core.converters import Loader
>
> I always get this error:
>
> Traceback (most recent call last):
>
> File "C:\Users\M\Anaconda3\lib\site-packages\IPython\core\interactiveshell.py", line 2961, in run_code
> exec(code_obj, self.user_global_ns, self.user_ns)
>
> File "<ipython-input-3-77c39c862f2f>", line 2, in <module>
> from weka.classifiers import Classifier
>
> File "C:\Users\M\Anaconda3\lib\site-packages\weka\classifiers.py", line 2169
> except Exception, e:
> ^
> SyntaxError: invalid syntax

Looks like you're using the Python 2.7 version of the library
("python-weka-wrapper") instead of the Python 3 version
("python-weka-wrapper3").

Marcelinus David

unread,
Nov 6, 2018, 10:11:53 PM11/6/18
to python-weka-wrapper
OMG, i am using python-weka-wrapper. Thank you the problem solved.
Reply all
Reply to author
Forward
0 new messages