[PYTHON] Modell des maschinellen Lernens unter Berücksichtigung der Wartbarkeit

ehemaliger Job

Mein vorheriger Job war Softwareentwicklung (Java, C #). Dort führten wir auch detaillierte Codeüberprüfungen durch, die auf der Richtlinie zum Schreiben von sauberem und effizientem Code basierten.

Amtsinhaber

Ich bin verantwortlich für Datenanalyse-maschinelles Lernen. Ich werde es in Python schreiben, aber wenn es keine kommerzielle Version ist, gibt es keine Codeüberprüfung und es ist eine Atmosphäre, in der es funktionieren sollte. .. Sicherlich ändern sich das Analyseziel, das Modell und die Parameter häufig, daher denke ich, dass dies das Ergebnis ist, anstatt hart am Design zu arbeiten.

Einführung von Objekten

Ich hasse jedoch den Code, der mehrere Modelle (z. B. multiple Regression, SVR, Lasso, RandomForestRegressor) in einem Jupyter-Notizbuch definiert und jedes Modell sendet, und das Trennen von Notizbüchern für jedes Modell verwaltet auch mehr Dateien. Ich hasse es, weil es ein Ärger ist. Daher wird das zu verschiebende Notizbuch nicht manipuliert (um das Ergebnis zu überprüfen), und das Modell wird in der Konfiguration angegeben und ausgeführt, wodurch es ein wenig objektorientiert wird. Ich bin sicher, es gibt Leute, die sagen: "Maschinelles Lernen und Notebook-Modelle sind es nicht." ..

Gesamtbild

    clazz_path = parser.get(path="regression", key="class_path")
    model = ClassCreator.create(clazz_path)
[regression]
class_path = utility.SVRModel.SVRModel
import sys

class ClassCreator():
    @staticmethod
    def create(class_path):
        try:
            print("class:", class_path)
            component_path = str(class_path).split('.')
            package_path   = component_path[:-1]
            package_name   = ".".join(package_path)
            class_name     = component_path[-1]
            __import__(str(package_name))
            cls = getattr(sys.modules[package_name], class_name)
            return cls()
        except Exception as e:
            print('===Fehlerinhalt===')
            print('type:' + str(type(e)))
            print('args:' + str(e.args))
            print('selbst:' + str(e))
from abc import ABCMeta, abstractmethod


class AbstractModel(metaclass=ABCMeta):

    @abstractmethod
    def run_grid_search(self, x_train_scaled, y_train):
        pass

    @abstractmethod
    def create_and_pred(self, x_train_scaled, y_train, x_test_scaled):
        pass

    @abstractmethod
    def print_eval(self, x_train_scaled, x_test_scaled, y_train, y_test, df):
        pass

    @abstractmethod
    def get_score(self, x_test_scaled, y_test):
        pass

    @abstractmethod
    def get_rmse(self, y_test, pred):
        pass

    @abstractmethod
    def get_modeltype(self):
        pass

    @abstractmethod
    def get_best_params(self):
        pass


from sklearn.svm import SVR
from sklearn.model_selection import GridSearchCV
import numpy as np
from sklearn.metrics import mean_squared_error
from utility.AbstractModel import AbstractModel

class SVRModel(AbstractModel):

    def __init__(self):
        self.clr = SVR()
        self.regr = None
        self.grid_search = None

    def run_grid_search(self, x_train_scaled, y_train):
        param_grid = {'C': [0.005, 0.0075, 0.1, 0.25, 0.4, 0.5, 0.6, 0.75, 1],
                      'epsilon': [0.000001, 0.00005, 0.00001, 0.0001, 0.0005, 0.001]}
        self.grid_search = GridSearchCV(self.clr, param_grid, cv=5)
        self.grid_search.fit(x_train_scaled, y_train)
        print("best param: {}".format(self.grid_search.best_params_))
        print("best score: {}".format(self.grid_search.best_score_))
        return self.grid_search

    def create_and_pred(self, x_train_scaled, y_train, x_test_scaled):
        self.regr = SVR(C=self.grid_search.best_params_["C"], epsilon=self.grid_search.best_params_["epsilon"])
        self.regr.fit(x_train_scaled, y_train)
        return self.regr.predict(x_test_scaled)

    def print_eval(self, x_train_scaled, x_test_scaled, y_train, y_test, df):
        if self.regr is None:
            raise Exception("needs to run 'create_and_pred' method before call this method.")

        print("Passend für Testdaten")
        print("Genauigkeit der Trainingsdaten(Entscheidungsfaktor r^2 score,Korrelation) =", self.regr.score(x_train_scaled, y_train))
        print("Testen Sie die Genauigkeit der Daten(Entscheidungsfaktor r^2 score,Korrelation) =", self.regr.score(x_test_scaled, y_test))
        pred = self.regr.predict(X=x_test_scaled)
        print("RMSE:", np.sqrt(mean_squared_error(y_test, pred)))

    def get_score(self, x_test_scaled, y_test):
        return self.regr.score(x_test_scaled, y_test)

    def get_rmse(self, y_test, pred):
        return np.sqrt(mean_squared_error(y_test, pred))

    def get_modeltype(self):
        return type(self.clr)

    def get_best_params(self):
        return self.grid_search.best_params_

Natürlich denke ich, dass es eine bessere Form gibt. Im Gegensatz zur Systementwicklung handelt es sich um einen Code, der sich mit Versuch und Irrtum wiederholt Ich denke, es ist wichtig, es später nicht zu vergessen.

Mit diesem Formular werde ich versuchen, in Zukunft ein Modell mit Beispieldaten zu erstellen.

Recommended Posts

Modell des maschinellen Lernens unter Berücksichtigung der Wartbarkeit
Maschinelles Lernen
Inverse Analyse des maschinellen Lernmodells
<Subjekt> Maschinelles Lernen Kapitel 3: Logistisches Regressionsmodell
<Kurs> Maschinelles Lernen Kapitel 1: Lineares Regressionsmodell
[Memo] Maschinelles Lernen
<Kurs> Maschinelles Lernen Kapitel 2: Nichtlineares Regressionsmodell
Klassifikation des maschinellen Lernens
Beispiel für maschinelles Lernen
Gaußscher EM-Algorithmus mit gemischtem Modell [statistisches maschinelles Lernen]
Klassifizieren Sie Informationen zum maschinellen Lernen nach Themenmodellen
Zusammenfassung des Lernprogramms für maschinelles Lernen
Maschinelles Lernen Über Overlearning
Maschinelles Lernen ⑤ AdaBoost-Zusammenfassung
Maschinelles Lernen: Betreut --AdaBoost
Logistische Regression beim maschinellen Lernen
Maschinelles Lernen unterstützt Vektormaschine
Maschinelles Lernen studieren ~ matplotlib ~
Lineare Regression des maschinellen Lernens
Memo zum Kurs für maschinelles Lernen
Bibliothek für maschinelles Lernen dlib
Maschinelles Lernen (TensorFlow) + Lotto 6
Lerne irgendwie maschinelles Lernen
Bibliothek für maschinelles Lernen Shogun
Maschinelles Lernen Kaninchen Herausforderung
Einführung in das maschinelle Lernen
Maschinelles Lernen: k-Nächste Nachbarn
Was ist maschinelles Lernen?
Maschinelles Lernen mit Bildern der Kategorie Caffe -1 unter Verwendung eines Referenzmodells
Versuchen Sie, das Modell des maschinellen Lernens in das Python-Paket aufzunehmen
[Maschinelles Lernen] Textklassifizierung mit dem Transformer-Modell (Aufmerksamkeitsbasierter Klassifikator)
xgboost: Effektives Modell für maschinelles Lernen für Tabellendaten
Maschinelles Lernen mit Pokemon gelernt
Datensatz für maschinelles Lernen
Japanische Vorverarbeitung für maschinelles Lernen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Maschinelles Lernen in Delemas (Praxis)
Eine Einführung in das maschinelle Lernen
Techniken im Zusammenhang mit maschinellem Lernen / Klassifizierung
Maschinelles Lernen: Überwacht - Lineare Regression
Grundlagen des maschinellen Lernens (Denkmal)
Anfänger des maschinellen Lernens versuchten RBM
[Maschinelles Lernen] Zufällige Gesamtstruktur verstehen
Maschinelles Lernen mit Python! Vorbereitung
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
Lernressourcen-Lernblock für maschinelles Lernen
Maschinelles Lernen ② Naive Bayes Zusammenfassung
Verstehe maschinelles Lernen ~ Ridge Regression ~.
Zusammenfassung der Artikel zum maschinellen Lernen (selbst verfasst)
Über maschinelles Lernen gemischte Matrix
Supereinführung des maschinellen Lernens Probabilistisches Modell und wahrscheinlichste Schätzung
Maschinelles Lernen: Überwacht - Zufälliger Wald
Praktisches Memo zum maschinellen Lernsystem
Maschinelles Lernen Minesweeper mit PyTorch
Erstellen Sie eine maschinelle Lernumgebung
Python Machine Learning Programming> Schlüsselwörter
Algorithmus für maschinelles Lernen (einfaches Perzeptron)
Wird in EDA für maschinelles Lernen verwendet