2017-04-05 1 views
1

Je suis en train d'utiliser MultiClassFLDA dans le package d'analyse discriminante mais je reçois toujours une erreur sur l'exécution du code et la définition d'une nouvelle instance de la classe MultiClassFLDAWeka DiscriminantAnalysis NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: no/uib/cipr/matrix/Vector 
    at assignment2.face.tryLDA(face.java:141) 
    at assignment2.Assignment2.main(Assignment2.java:106) 
Caused by: java.lang.ClassNotFoundException: no.uib.cipr.matrix.Vector 
    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) 

Répondre

1

Il semble être lié à certains chargement de classe dynamique dans les versions plus récentes de Weka, vraisemblablement dans le gestionnaire de paquets Weka: cette classe est définie dans le mtj.jar, qui est regroupé à l'intérieur deweka.jar. Dans that other question, an answer suggéré d'extraire le mtj.jar et de l'ajouter à votre classpath.

Comme je ne l'ai pas eu ce problème avec d'autres filtres, je suppose que MultiClassFLDA n'est pas mis en œuvre correctement: j'ai découvert est que si vous utilisez un autre filtre avant, cette classe spécifique se charge:

// Run a dummy Filter for correct initialization 
Filter f = new Standardize(); 
f.setInputFormat(data); 
Filter.useFilter(new Instances("", params, 0), f); // Dummy run on empty dataset 
// Now run the MultiClassFLDA 
f = new MultiClassFLDA(); 
f.setInputFormat(data); 
data = Filter.useFilter(data, f); 

NB c'est un hack vraiment moche! Je l'ai utilisé pour pouvoir travailler. Je vais éditer ma réponse quand je trouverai la manière appropriée de le faire (autre que d'extraire le pot de Weka itslef).