[PYTHON] Implémentez un estimateur auto-créé minimal avec scikit-learn

Chose que tu veux faire

scikit-learn est la bibliothèque d'apprentissage automatique presque de facto de Python. L'avantage de scikit-learn est que de nombreux algorithmes sont implémentés, mais il est conçu de manière cohérente et peut gérer divers algorithmes de manière commune. Si vous implémentez un nouvel algorithme qui n'est pas dans scikit-learn, ou si vous l'implémentez pour qu'il puisse être traité comme d'autres estimateurs de sciki-learn lors de l'utilisation d'autres bibliothèques, il sera contre-validé comme l'estimateur implémenté à l'origine. Vous pouvez évaluer les performances et optimiser les paramètres par recherche de grille. Voici l'implémentation minimale de l'estimateur. Ici, nous considérons les discriminateurs ou les régressions comme des cibles (pas de clustering ou d'apprentissage non supervisé).

Une mise en œuvre solide

from sklearn.base import BaseEstimator

class MyEstimator(BaseEstimator):
    def __init__(self, param1, param2):
        self.param1 = param1
        self.param2 = param2
    
    def fit(self, x, y):
        return self 
    
    def predict(self, x):
        return [1.0]*len(x) 
    
    def score(self, x, y):
        return 1
    
    def get_params(self, deep=True):
        return {'param1': self.param1, 'param2': self.param2}

    def set_params(self, **parameters):
        for parameter, value in parameters.items():
            setattr(self,parameter, value)
        return self

Définissez la classe d'estimateur en héritant de sklearn.base.BaseEstimator. Veuillez réécrire le contenu de la méthode comme il convient.

Exemple d'exécution

Cross validation:


x = [[2,3],[4,5],[6,1],[2,0]] 
y = [0.0,9.4,2.1,0.9]

estimator = MyEstimator()
cross_validation.cross_val_score(estimator,x,y,cv=3)

Result:

array([ 1.,  1.,  1.])

Grid search:

gs = grid_search.GridSearchCV(estimator, {'param1': [0,10], 'param2': (1, 1e-1, 1e-2)})
gs.fit(x,y)
gs.best_estimator_, gs.best_params_, gs.best_score_

Result:

(MyEstimator(), {'param1': 0, 'param2': 1}, 1.0)

cross_validation Afin d'effectuer une validation croisée, la méthode fit pour apprendre les données d'entraînement et la méthode score pour saisir les données de test, comparer la valeur estimée à partir de celles-ci avec la valeur de réponse correcte et sortir le score sont nécessaires. fit(self, x, y) Cette fonction apprend de sorte que la sortie soit «y» pour l'entrée «x». predict(self, x) Une fonction dont la sortie renvoie y_pred pour l'entrée x. Vous n'avez pas besoin de predire si vous voulez juste faire cross_validation, mais dans la plupart des cas, vous appellerez predire inside score. En implémentant plusieurs héritages de sklearnbase.ClassifierMixin et scikit-learn.base.RegressionMixin et en implémentant uniquement prédire, vous pouvez utiliser la fonction score implémentée. score(self, x, y) C'est une fonction qui estime la sortie y_pred pour l'entrée x, compare le y_pred avec la bonne réponse y, et renvoie le score (si l'erreur ou l'étiquette correspond, etc.). grid_search Pour faire grid_search, vous devez manipuler les paramètres en plus d'apprendre et de calculer le score comme défini ci-dessus. Implémentez la méthode get_params pour obtenir des paramètres indépendants des données et la méthode set_params pour définir les paramètres. get_params(self, deep=True) Dans la méthode get_params, la clé de paramètre est le nom de l'attribut. Essayez de renvoyer un dictionnaire où valeur est une valeur. set_params(self, **parameters) C'est un régleur de paramètres. Passez-le dans un dictionnaire comme get_params.

À propos de Mixin

La méthode implémentée peut être utilisée par héritage multiple de «sklearn.base.ClassifierMixin» pour le modèle d'identification et de «sklearn.base.RegressorMixin» pour le modèle de régression. Si vous héritez de ces

Pour la libération

Vous pouvez vérifier si votre propre estimateur est compatible avec sklearn avec sklearn.utils.estimator_checks.check_estimator. En passant, dans l'exemple présenté dans cet article, j'obtiens une erreur indiquant que l'entrée n'est pas validée. Il ne devrait y avoir aucun problème si vous l'utilisez vous-même.

Résumé

--Créez votre propre classe d'estimateur en héritant de sklearn.base.BaseEstimator

référence

La plupart de ce que j'ai écrit ici Référence API pour le module sklearn.base Informations pour les développeurs sur le site officiel C'est en rapport avec.

Recommended Posts

Implémentez un estimateur auto-créé minimal avec scikit-learn
Implémenter un modèle avec état et comportement
Isomap avec Scikit-learn
DBSCAN avec scikit-learn
Clustering avec scikit-learn (1)
Clustering avec scikit-learn (2)
PCA avec Scikit-learn
Implémenter un modèle de régression logistique en temps discret avec stan
kmeans ++ avec scikit-learn
Validation croisée avec scikit-learn
Implémenter FReLU avec tf.keras
Format A4 avec python-pptx
SVM multi-classes avec scikit-learn
Clustering avec scikit-learn + DBSCAN
Apprentissage Scikit-Learn avec la chimioinfomatique
DBSCAN (clustering) avec scikit-learn
Décorer avec un décorateur
Installez scikit.learn avec pip
Calculer tf-idf avec scikit-learn
Implémentez la normalisation du prétraitement des données d'entraînement Python avec scikit-learn [fit_transform]
[Recherche causale / inférence causale] Implémentez un réseau Basian avec des données Titanic