J'ai essayé Tribuo édité par Oracle. Tribuo --Une bibliothèque de prédiction Java (v4.0)

Je l'ai essayé. De la conclusion, j'étais très anxieux. De plus, si vous vous appelez un framework, vous pouvez écrire correctement javadoc en anglais. Ensuite, vous devez corriger correctement le code d'implémentation au lieu de corriger le manuel.

installer

J'ai utilisé maven pour résoudre la dépendance. Après avoir créé le projet, définissez tribuo dans le fichier pom comme indiqué ci-dessous.

<dependency>
    <groupId>org.tribuo</groupId>
    <artifactId>tribuo-all</artifactId>
    <version>4.0.0</version>
    <type>pom</type>
</dependency>

Pour apprendre et évaluer le modèle de régression logistique, il est dit faites ce qui suit, alors écrivez le code suivant dans la classe java. Faire.

var trainSet = new MutableDataset<>(new LibSVMDataSource("train-data",new LabelFactory()));
var model    = new LogisticRegressionTrainer().train(trainSet);
var eval     = new LabelEvaluator().evaluate(new LibSVMDataSource("test-data",trainSet.getOutputFactory()));

Le nom de la classe est TribuoSample. Quoi? Nanikore?

コンストラクタがないエラー01.png

Il s'agit de la partie constructeur de LibSVMDataSource. Il n'y a aucun constructeur qui prend un String comme argument.

LibSVMDataSourceコンストラクタ.png

Et quelle est cette interface java.nio.file.Path? Le fait que java.nio.file.Paths n'est pas une implémentation ... Est-il moderne parce qu'il a un accès statique à Path.of?

python


        //Êtes-vous en train de dire que vous pouvez écrire comme ça?
        var trainSet = new MutableDataset<>(new LibSVMDataSource<>(Path.of(new URL("file:train-data").getPath()),new LabelFactory()));

        //Ou est-ce comme ça?
        var trainSet = new MutableDataset<>(new LibSVMDataSource<>(Paths.get("train-data"),new LabelFactory()));

        //Si c'est le cas, n'est-ce pas correct avec l'URL? C'est redondant.
        var trainSet = new MutableDataset<>(new LibSVMDataSource<>(new URL("file:train-data"),new LabelFactory()));

Vous pouvez le corriger manuellement ou accepter String dans le corps de cette classe, mais vous devez corriger MutableDataset.class. Vous pouvez le faire comme ça pour le moment.

MutableDataset



    public LibSVMDataSource(String url, OutputFactory<T> outputFactory) throws IOException {
        this(null,new URL(url),outputFactory,false,false,0);
    }

    public LibSVMDataSource(String url, OutputFactory<T> outputFactory, boolean zeroIndexed, int maxFeatureID) throws IOException {
        this(null,new URL(url),outputFactory,true,zeroIndexed,maxFeatureID);
    }

Cependant, dans le traitement du constructeur, ni l'url ni le chemin ne sont vérifiés. Voici le code correspondant de MutableDataset.class.

LibSVMDataSource


    private LibSVMDataSource(Path path, URL url, OutputFactory<T> outputFactory, boolean rangeSet, boolean zeroIndexed, int maxFeatureID) throws IOException {
        this.outputFactory = outputFactory;
        this.path = path;
        this.url = url;
        this.rangeSet = rangeSet;
        if (rangeSet) {
            this.zeroIndexed = zeroIndexed;
            this.minFeatureID = zeroIndexed ? 0 : 1;
            if (maxFeatureID < minFeatureID + 1) {
                throw new IllegalArgumentException("maxFeatureID must be positive, found " + maxFeatureID);
            }
            this.maxFeatureID = maxFeatureID;
        }
        read();
    }

Quand il s'agit de jusqu'où nous allons Dans LibSVMDataSource # read est appelé depuis le constructeur. Ci-dessous le code correspondant.

LibSVMDataSource#read



    private void read() throws IOException {
        int pos = 0;
        ArrayList<HashMap<Integer,Double>> processedData = new ArrayList<>();
        ArrayList<String> labels = new ArrayList<>();

        // Idiom copied from Files.readAllLines,
        // but this doesn't require keeping the whole file in RAM.
        String line;
        // Parse the libsvm file, ignoring malformed lines.
        try (BufferedReader r = new BufferedReader(new InputStreamReader(url.openStream(),StandardCharsets.UTF_8))) {
            for (;;) {
                line = r.readLine();
                if (line == null) {
                    break;
                }
                pos++;
                String[] fields = splitPattern.split(line);
                try {
                    boolean valid = true;
                    HashMap<Integer, Double> features = new HashMap<>();
                    for (int i = 1; i < fields.length && valid; i++) {
                        int ind = fields[i].indexOf(':');
                        if (ind < 0) {
                            logger.warning(String.format("Weird line at %d", pos));
                            valid = false;
                        }
                        String ids = fields[i].substring(0, ind);
                        int id = Integer.parseInt(ids);
                        if ((!rangeSet) && (maxFeatureID < id)) {
                            maxFeatureID = id;
                        }
                        if ((!rangeSet) && (minFeatureID > id)) {
                            minFeatureID = id;
                        }
                        double val = Double.parseDouble(fields[i].substring(ind + 1));
                        Double value = features.put(id, val);
                        if (value != null) {
                            logger.warning(String.format("Repeated features at line %d", pos));
                            valid = false;
                        }
                    }
                    if (valid) {
                        // Store the label
                        labels.add(fields[0]);
                        // Store the features
                        processedData.add(features);
                    } else {
                        throw new IOException("Invalid LibSVM format file");
                    }
                } catch (NumberFormatException ex) {
                    logger.warning(String.format("Weird line at %d", pos));
                    throw new IOException("Invalid LibSVM format file", ex);
                }
            }
        }

Je fais url.openStream () dans l'essai. C'est juste une NumberFormatException à attraper. En regardant la description de la variable membre, une URL ou un chemin est requis.

LibSVMDataSource


    // url is the store of record.
    @Config(description="URL to load the data from. Either this or path must be set.")
    private URL url;

    @Config(description="Path to load the data from. Either this or url must be set.")
    private Path path;

Je vérifie si les deux sont nuls dans LibSVMDataSource # postConfig, mais ce n'est pas bon.

LibSVMDataSource#postConfig


    @Override
    public void postConfig() throws IOException {
        if (maxFeatureID != Integer.MIN_VALUE) {
            rangeSet = true;
            minFeatureID = zeroIndexed ? 0 : 1;
            if (maxFeatureID < minFeatureID + 1) {
                throw new IllegalArgumentException("maxFeatureID must be positive, found " + maxFeatureID);
            }
        }
        if ((url == null) && (path == null)) {
            throw new PropertyException("","path","At most one of url and path must be set.");
        } else if ((url != null) && (path != null) && !path.toUri().toURL().equals(url)) {
            throw new PropertyException("","path","At most one of url and path must be set");
        } else if (path != null) {
            // url is the store of record.
            try {
                url = path.toUri().toURL();
            } catch (MalformedURLException e) {
                throw new PropertyException(e,"","path","Path was not a valid URL");
            }
        }
        read();
    }

Si vous écrivez ce type de code, personne ne le traitera.

TribuoSample


public class TribuoSample {

    /**
     * @param args Arguments de la méthode principale.
     */
    public static void main(String[] args) {

        URL url = null;

        try {
            var trainSet = new MutableDataset<>(
                    new LibSVMDataSource<>(url, new LabelFactory()));
        } catch (IOException e) {
            //Bloc de capture généré automatiquement TODO
            e.printStackTrace();
        }
    }
}

Quand vous faites cela ...

StackTrace


Exception in thread "main" java.lang.NullPointerException
	at org.tribuo.datasource.LibSVMDataSource.read(LibSVMDataSource.java:204)
	at org.tribuo.datasource.LibSVMDataSource.<init>(LibSVMDataSource.java:125)
	at org.tribuo.datasource.LibSVMDataSource.<init>(LibSVMDataSource.java:105)
	at org.project.eden.adam.TribuoSample.main(TribuoSample.java:28)

Dans ce cas, le message que vous souhaitez transmettre à l'utilisateur est "Il est essentiel que l'url ou le chemin soit défini, mais La valeur que vous avez définie pour l'URL a été définie sur null. J'aurais dû vous le dire, mais c'est une erreur inattendue ou une trace de pile est crachée et le processus s'arrête. Si c'est une application métier, c'est toujours un framework sous le nom d'oracle, donc je me demande comment est ce genre de chute. Dans le cas de path, l'objet path est accédé par le constructeur, donc c'est nullpo sur place.

C'est sa mise en œuvre

LibSVMDataSource


    public LibSVMDataSource(Path path, OutputFactory<T> outputFactory) throws IOException {
        this(path,path.toUri().toURL(),outputFactory,false,false,0);
    }

Exécutez l'exemple comme suit.

TribuoSample


public class TribuoSample {

    /**
     * @param args Arguments de la méthode principale.
     */
    public static void main(String[] args) {

        Path path = null;

        try {
            var trainSet = new MutableDataset<>(
                    new LibSVMDataSource<>(path, new LabelFactory()));

        } catch (IOException e) {
            //Bloc de capture généré automatiquement TODO
            //e.printStackTrace();
        }
    }
}

Inutile de voir le résultat, NullPointerException.

Exception in thread "main" java.lang.NullPointerException
	at org.tribuo.datasource.LibSVMDataSource.<init>(LibSVMDataSource.java:97)
	at org.project.eden.adam.TribuoSample.main(TribuoSample.java:28)

Je ne m'attendais pas à ce que cela se produise à partir de la première ligne de la première page du document. Exemple d'exécution sur une autre page.

Recommended Posts

J'ai essayé Tribuo édité par Oracle. Tribuo --Une bibliothèque de prédiction Java (v4.0)
J'ai touché Tribuo publié par Oracle. Document Tribuo --Une bibliothèque de prédiction Java (v4.0)
Je me suis rappelé Tribuo publié par Oracle. Tribuo --Une bibliothèque de prédiction Java (v4.0)
J'ai touché Tribuo publié par Oracle. Document Tribuo - Introduction à la classification avec les iris
[Java] J'ai essayé de faire un labyrinthe par la méthode de creusage ♪
java j'ai essayé de casser un simple bloc
J'ai essayé de frapper une méthode Java d'ABCL
J'ai essayé de casser le bloc avec java (1)
J'ai essayé d'exécuter Java dans un terminal Mac
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé d'utiliser Log4j2 sur un serveur Java EE
J'ai essayé OCR de traiter un fichier PDF avec Java
J'ai essayé de gratter un graphique boursier en utilisant Java (Jsoup)
J'ai essayé de créer un environnement de développement java8 avec Chocolatey
J'ai essayé d'utiliser le référentiel GitHub comme serveur de bibliothèque
J'ai essayé de moderniser une application Java EE avec OpenShift.
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai créé un client RESAS-API en Java
J'ai essayé OCR de traiter un fichier PDF avec Java part2
J'ai essayé d'utiliser la bibliothèque CameraX avec Android Java Fragment
J'ai créé un Dockerfile pour démarrer Glassfish 5 en utilisant Oracle Java
J'ai essayé Drools (Java, InputStream)
J'ai essayé d'utiliser Java REPL
J'ai essayé la métaprogrammation avec Java
Quand j'ai retrouvé mon esprit sur Tribuo publié par Oracle, la personne à l'intérieur était une personne sexy.
Java avait une bibliothèque de création de code QR appelée QRGen qui enveloppe bien ZXing, alors je l'ai essayé
J'ai créé un PDF avec Java.
J'ai créé une application shopify @java
J'ai essayé un petit docker de digdag.
Une personne écrivant C ++ a essayé d'écrire Java
J'ai essayé d'interagir avec Java
J'ai essayé la communication UDP avec Java
J'ai essayé le framework Java "Quarkus"
J'ai essayé d'utiliser l'API Java8 Stream
J'ai essayé d'utiliser JWT en Java
J'ai essayé de résumer l'apprentissage Java (1)
J'ai essayé de résumer Java 8 maintenant
J'ai essayé d'utiliser le mémo Java LocalDate
J'ai essayé d'utiliser Google HttpClient de Java
J'ai essayé d'apprendre Java avec une série que les débutants peuvent comprendre clairement
J'étais accro à un simple test de Jedis (bibliothèque Java-> Redis)
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»