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)
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.
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.