[PYTHON] Learning Deep Forest, ein neues Lerngerät, das mit DNN vergleichbar ist

Ich möchte in die Büsche von Deep Forest gehen, nicht in die Dunkelheit von Deep Learning.

Ein Algorithmus, der eine Alternative zu DNN sein kann, ist Deep Forest. Lesen Sie den Artikel Deep Forest: Auf dem Weg zur Alternative des Deep Neural Network oder Article. Wenn ich pdf) lese, scheint es eine tiefe Struktur zu haben, indem mehrere Sammlungen von Entscheidungsbäumen, die als zufällige Wälder bezeichnet werden, verwendet und viel in Richtung Breite und Tiefe angeordnet werden.

Dieser Artikel ist hilfreich für zufällige Wälder. Es ist eine Erklärung der zufälligen Gesamtstruktur in einem maschinellen Lernwerkzeug namens scikit-learn, einem Python-Modul. Da der diesmal auszuführende Code jedoch auch Python ist und scikit-learn verwendet wird, ist es wahnsinnig hilfreich.

Es scheint eine andere Implementierung in R-Sprache als Python zu geben. (Beispiel für einen Deep Forest-Implementierungscode)

Holen Sie sich den Code

Es ist schwierig, einen tiefen Wald von Grund auf neu zu erstellen. Ich verliere mich. Holen Sie sich also den Deep Forest in Python von Github.

https://github.com/leopiney/deep-forest

Vom Lernen bis zum Testen funktioniert README gut. Die richtige Antwortrate scheint angemessen und nicht schlecht zu sein. Da es nur mit der CPU kompatibel ist, ist die CPU-Auslastung übrigens recht hoch.

Modell speichern

Ich bin hungrig, alles zu erleben, aber es ist ein wenig unpraktisch, dass ich das trainierte Modell nicht speichern kann. Deshalb werde ich der MGCForest-Klasse in deep_forest.py die folgenden zwei Mitgliedsfunktionen hinzufügen.

deep_forest.py


class MGCForest():

    :
    :
    :

    def save_model(self):
        # save multi-grained scanner
        for mgs_instance in self.mgs_instances:
            stride_ratio = mgs_instance.stride_ratio
            folds = mgs_instance.folds
            for i, estimator in enumerate(mgs_instance.estimators):
                joblib.dump(estimator, 'model/mgs_submodel_%.4f_%d_%d.pkl' % (stride_ratio, folds, i + 1)) 
        
        # save cascade forest
        for n_level, one_level_estimators in enumerate(self.c_forest.levels):
            for i, estimator in enumerate(one_level_estimators):
                joblib.dump(estimator, 'model/cforest_submodel_%d_%d.pkl' % (n_level + 1, i + 1))

    def load_model(self):
        # load multi-grained scanner
        for mgs_instance in self.mgs_instances:
            stride_ratio = '%.4f' % mgs_instance.stride_ratio
            folds = mgs_instance.folds
            for i in range(len(mgs_instance.estimators)):
                model_name = 'model/mgs_submodel_%s_%d_%d.pkl' % (stride_ratio, folds, i + 1)
                print('load model: {}'.format(model_name))
                mgs_instance.estimators[i] = joblib.load(model_name)

        # load cascade forest
        model_files = glob.glob('model/cforest_submodel_*.pkl')
        model_files.sort()
        max_level = 0
        model_dict = dict()
        for model_name in model_files:
            model_subname = re.sub('model/cforest_submodel_', '', model_name)
            model_level = int(model_subname.split('_')[0])
            if max_level < model_level:
                max_level = model_level

            if model_level not in model_dict.keys():
                model_dict[model_level] = list()
            print('load model: {}'.format(model_name))
            model_dict[model_level].append(joblib.load(model_name))

        self.c_forest.levels = list()
        for n_level in range(1, max_level + 1):
            self.c_forest.levels.append(model_dict[n_level])

        n_classes_ = self.c_forest.levels[0][0].n_classes_
        self.c_forest.classes = np.unique(np.arange(n_classes_))

Wenn Sie die Funktion save_model nach dem Training mit der Funktion fit aufrufen, werden die Modellparameter im Modellverzeichnis gespeichert (bitte erstellen Sie das Modellverzeichnis und leeren Sie den Inhalt, bevor Sie die Funktion save_model aufrufen). Wenn Sie die trainierten Modellparameter laden möchten, können Sie die Funktion load_model aufrufen.

Deep Forest wird von mehreren zufälligen Gesamtstrukturen erstellt. Beim Speichern eines Modells muss jedoch für jede zufällige Gesamtstruktur eine Parameterdatei erstellt und gespeichert werden. Daher befinden sich im Modellverzeichnis mehrere pkl-Dateien.

Ursprünglich hat die zufällige Gesamtstruktur den Vorteil, dass es sich um ein Modell handelt, das nicht von der Differenz im Wertebereich der einzelnen Feature-Beträge betroffen ist. Neuronale Netze nicht, daher müssen Sie den Wertebereich für jedes Merkmal von 0 bis 1 normalisieren. Daher hoffe ich, dass dieser tiefe Wald seine Kraft stark inspirieren wird, wenn Sie nicht nur Bilder, sondern auch verschiedene andere Funktionen kombinieren möchten.

Recommended Posts

Learning Deep Forest, ein neues Lerngerät, das mit DNN vergleichbar ist
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Einführung in Deep Learning ~ Backpropagation ~
Versuchen Sie, ein Deep Learning / Neuronales Netzwerk mit Scratch aufzubauen
Ich habe versucht, in einem tief erlernten Sprachmodell zu schreiben
Einführung in das tiefe Lernen ~ Funktionsnäherung ~
Über das Projektmanagement von Deep Learning (DNN)
Tiefes Lernen, um ohne GPU zu beginnen
Einführung in Deep Learning ~ Codierungsvorbereitung ~
Einführung in Deep Learning ~ Dropout Edition ~
Einführung in Deep Learning ~ Forward Propagation ~
Einführung in Deep Learning ~ CNN Experiment ~
Eine Geschichte über einen Anfänger im Deep Learning, der versucht, Gitarren mit CNN zu klassifizieren
PPLM: Eine einfache Deep-Learning-Technik zum Generieren von Sätzen mit bestimmten Attributen
Verbessertes Lernen, um von null bis tief zu lernen
Einführung in Deep Learning ~ Falten und Pooling ~
So studieren Sie den Deep Learning G-Test
Bildausrichtung: von SIFT bis Deep Learning
Von nichts unter Ubuntu 18.04 bis zum Einrichten einer Deep Learning-Umgebung auf Tensor
Erstellen Sie eine Python-Umgebung, um die Theorie und Implementierung von Deep Learning zu erlernen
Ich habe versucht, die Strichzeichnung mit Deep Learning aus dem Bild zu extrahieren
Tiefes Lernen
Deep Learning von Grund auf neu ① Kapitel 6 "Lerntechniken"
Ein Memorandum zum Studieren und Implementieren von Deep Learning
Versuchen Sie, einen neuen Befehl unter Linux zu erstellen
Einführung in Deep Learning ~ Lokalisierungs- und Verlustfunktion ~
So implementieren Sie einen neuen CPUFreq-Prozessortreiber
Ich habe ein Tool erstellt, um neue Artikel zu erhalten
Ich habe den Deep Learning Framework Chainer installiert