#java #machine-learning #type-conversion #artificial-intelligence #weka
Вопрос:
Я изучаю weka с Java и пытаюсь преобразовать .csv
файл в .arff
, но при попытке установить экземпляр для CSVSaver
я получаю InaccessibleObjectException
.
ArffLoader loader = new ArffLoader();
loader.setSource(new File("Friedman-datasets/friedman_datasets/fri_c0_100_5.arff"));
Instances data = loader.getDataSet();
CSVSaver saver = new CSVSaver();
saver.setInstances(data); //error happens here
saver.setFile(new File("/Users/jacec/OneDrive/Desktop/DMA/Learning weka/convertingfiletypes/converted.csv"));
saver.writeBatch();
Текст Ошибки
java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @4d76f3f8
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
at weka.core.WekaPackageClassLoaderManager.injectClasses(WekaPackageClassLoaderManager.java:792)
at weka.core.WekaPackageClassLoaderManager.injectAllClassesInFromStream(WekaPackageClassLoaderManager.java:690)
at weka.core.WekaPackageClassLoaderManager.injectMTJCoreClasses(WekaPackageClassLoaderManager.java:118)
at weka.core.WekaPackageManager.<clinit>(WekaPackageManager.java:255)
at weka.core.ResourceUtils.readProperties(ResourceUtils.java:241)
at weka.core.ResourceUtils.readProperties(ResourceUtils.java:184)
at weka.core.Utils.readProperties(Utils.java:183)
at weka.core.Capabilities.<clinit>(Capabilities.java:104)
at weka.core.converters.AbstractSaver.getCapabilities(AbstractSaver.java:219)
at weka.core.converters.CSVSaver.getCapabilities(CSVSaver.java:403)
at weka.core.converters.AbstractSaver.setInstances(AbstractSaver.java:162)
at weka.api.csv2arff.main(csv2arff.java:19)
Если кто-нибудь знает, почему это происходит, поскольку я следую учебнику с их точным кодом, поэтому я не знаю, что я делаю по-другому
Комментарии:
1. Убедитесь, что вы используете Java 11. Вы можете получить OpenJDK для различных операционных систем здесь: adoptopenjdk.net
2. ах, спасибо, что это работает. Работает ли weka только с ~java11?
3. Менеджер пакетов Weka (по крайней мере, до 3.8.5 и 3.9.5) выполняет некоторые низкоуровневые операции для загрузки в пакеты, которые больше не разрешены в более поздних версиях Java (из того, что я видел). Не могу быть абсолютно уверен, но по памяти Java 16, казалось, больше не работает.