[PYTHON] Modèle d'apprentissage automatique prenant en compte la maintenabilité

Ancien emploi

Mon travail précédent était le développement de logiciels (Java, C #). Là, nous avons également effectué des revues de code détaillées basées sur la directive d'écrire un code propre et efficace.

Titulaire

Je suis en charge de l'analyse de données-apprentissage automatique. Je vais l'écrire en Python, mais si ce n'est pas une version commerciale, il n'y a pas de révision de code et c'est une atmosphère que cela devrait fonctionner. .. Certes, la cible de l'analyse, le modèle et les paramètres changent fréquemment, donc je pense que c'est le résultat plutôt que de travailler dur sur la conception.

Introduction d'objets

Cependant, je déteste le code qui définit plusieurs modèles (par exemple, régression multiple, SVR, Lasso, RandomForestRegressor) dans un bloc-notes Jupyter et envoie chaque modèle, et séparer les blocs-notes pour chaque modèle gère également plus de fichiers. Je déteste ça parce que c'est un problème. Par conséquent, le notebook à déplacer n'est pas falsifié (pour vérifier le résultat), et le modèle est spécifié à partir de la configuration et exécuté, ce qui le rend un peu orienté objet. Je suis sûr qu'il y a des gens qui disent: "L'apprentissage automatique et les modèles d'ordinateurs portables ne le sont pas". ..

Vue d'ensemble

    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('===contenu de l'erreur===')
            print('type:' + str(type(e)))
            print('args:' + str(e.args))
            print('soi-même:' + 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("Convient aux données de test")
        print("Exactitude des données d'entraînement(Facteur de décision r^2 score,corrélation) =", self.regr.score(x_train_scaled, y_train))
        print("Exactitude des données de test(Facteur de décision r^2 score,corrélation) =", 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_

Bien sûr, je pense qu'il y a une meilleure forme. Quoi qu'il en soit, contrairement au développement de système, c'est un code qui se répète avec essais et erreurs, donc Je pense qu'il est important de ne pas l'oublier plus tard.

En utilisant ce formulaire, j'essaierai de créer un modèle avec des exemples de données à l'avenir.

Recommended Posts

Modèle d'apprentissage automatique prenant en compte la maintenabilité
Apprentissage automatique
Analyse inverse du modèle d'apprentissage automatique
<Subject> Machine learning Chapitre 3: Modèle de régression logistique
<Cours> Machine learning Chapitre 1: Modèle de régression linéaire
[Memo] Apprentissage automatique
<Cours> Machine learning Chapitre 2: Modèle de régression non linéaire
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
Algorithme EM modèle mixte gaussien [apprentissage automatique statistique]
Classer les informations liées à l'apprentissage automatique par modèle de sujet
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Apprentissage automatique ⑤ Résumé AdaBoost
Apprentissage automatique: supervisé - AdaBoost
Régression logistique d'apprentissage automatique
Machine de vecteur de support d'apprentissage automatique
Étudier l'apprentissage automatique ~ matplotlib ~
Régression linéaire d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Apprenez en quelque sorte le machine learning
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Apprentissage automatique: k-voisins les plus proches
Qu'est-ce que l'apprentissage automatique?
Apprentissage automatique avec des images de catégorie Caffe -1 à l'aide du modèle de référence
Tentative d'inclusion du modèle d'apprentissage automatique dans le package python
[Apprentissage automatique] Classification de texte à l'aide du modèle Transformer (classificateur basé sur l'attention)
xgboost: modèle d'apprentissage automatique efficace pour les données de table
L'apprentissage automatique appris avec Pokemon
Ensemble de données pour l'apprentissage automatique
Prétraitement japonais pour l'apprentissage automatique
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Apprentissage automatique dans Delemas (s'entraîner)
Une introduction à l'apprentissage automatique
Techniques liées à l'apprentissage automatique / à la classification
Machine Learning: Supervision - Régression linéaire
Bases de l'apprentissage automatique (mémoire)
Un débutant en apprentissage automatique a essayé la RBM
[Apprentissage automatique] Comprendre la forêt aléatoire
Apprentissage automatique avec Python! Préparation
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
Bloc-notes de ressources d'étude d'apprentissage automatique
Apprentissage automatique ② Résumé Naive Bayes
Comprendre l'apprentissage automatique ~ régression de crête ~.
Résumé de l'article sur l'apprentissage automatique (auto-écrit)
À propos de la matrice mixte d'apprentissage automatique
Super introduction à l'apprentissage automatique Modèle probabiliste et estimation la plus probable
Apprentissage automatique: forêt supervisée - aléatoire
Mémo pratique du système d'apprentissage automatique
Démineur d'apprentissage automatique avec PyTorch
Créer un environnement d'apprentissage automatique
Programmation Python Machine Learning> Mots-clés
Algorithme d'apprentissage automatique (perceptron simple)
Utilisé en EDA pour l'apprentissage automatique