Procédure d'apprentissage automatique de base: ③ Comparez et examinez la méthode de sélection de la quantité de caractéristiques

introduction

Procédure d'apprentissage automatique de base: (1) Modèle de classification organise la procédure de création d'un modèle de classification de base. Cette fois, je voudrais me concentrer sur la sélection des quantités de caractéristiques et comparer et examiner diverses méthodes de sélection de quantité de caractéristiques.

Procédure jusqu'à présent

Environnement analytique

Google BigQuery Google Colaboratory

Données cibles

(1) Semblable au modèle de classification, les données d'achat sont stockées dans la structure de tableau suivante.

id result product1 product2 product3 product4 product5
001 1 2500 1200 1890 530 null
002 0 750 3300 null 1250 2000

Puisque le but est de sélectionner la quantité de caractéristiques, l'axe horizontal doit être d'environ 300.

0. Comment sélectionner le montant cible de la fonction

La méthode suivante a été sélectionnée dans À propos de la sélection des fonctionnalités.

De plus, bien que ce ne soit pas scikit-learn, il a été introduit dans Méthode de sélection des caractéristiques Boruta utilisant une forêt aléatoire et un test. Je voudrais également utiliser Boruta, qui est l'une des méthodes Wrapper.

Afin de comparer dans les mêmes conditions, je voudrais utiliser RandomForestClassifier comme classificateur utilisé pour la sélection de la quantité d'entités.

1.Embedded Method(SelectFromModel)

Tout d'abord, utilisez la méthode intégrée utilisée dans Procédure d'apprentissage automatique de base: (1) Modèle de classification. La méthode intégrée intègre des fonctionnalités dans un modèle particulier et sélectionne les fonctionnalités optimales.

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel

#Changer en tableau numpy
label = np.array(df.loc[0:, label_col]) 
features = np.array(df.loc[0:, feature_cols])

#Sélection variable
clf = RandomForestClassifier(max_depth=7)

##Sélectionnez des variables à l'aide de la méthode intégrée
feat_selector = SelectFromModel(clf)
feat_selector.fit(features, label)
df_feat_selected = df.loc[0:, feature_cols].loc[0:, feat_selector.get_support()]

36 variables ont été sélectionnées. La précision obtenue à l'aide de ces variables est la suivante. C'est assez cher, mais j'aimerais améliorer un peu Recall.

2.Wrapper Method(RFE) Ensuite, utilisez la méthode Wrapper. Il s'agit d'une méthode pour trouver le sous-ensemble optimal en transformant le modèle de prédiction avec un sous-ensemble de caractéristiques.

import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import RFE

#Changer en tableau numpy
label = np.array(df.loc[0:, label_col]) 
features = np.array(df.loc[0:, feature_cols])

#Sélection variable
clf = RandomForestClassifier(max_depth=7)

##Sélectionnez des variables à l'aide de la méthode intégrée
feat_selector = RFE(clf)
feat_selector.fit(features, label)
df_feat_selected = df.loc[0:, feature_cols].loc[0:, feat_selector.get_support()]

146 variables ont été sélectionnées. Par rapport à la méthode intégrée, il y en a beaucoup. La précision obtenue à l'aide de ces variables est la suivante. C'est presque la même chose que la méthode intégrée, bien qu'elle soit légèrement différente après la virgule décimale.

3.Wrapper Method(Boruta) Le dernier est Boruta. Boruta n'est pas installé en standard avec Colaboratory, donc installez-le d'abord.

pip install boruta

C'est aussi la méthode Wrapper, nous allons donc trouver le sous-ensemble optimal. Cependant, cela prend beaucoup de temps par rapport au RFE précédent. Il y a des progrès, alors attendons lentement.

from boruta import BorutaPy

#Changer en tableau numpy
label = np.array(df.loc[0:, label_col]) 
features = np.array(df.loc[0:, feature_cols])

#Sélection variable
##Forêt aléatoire en supposant une classification ici(RandomForestClassifier)Utilisation
clf = RandomForestRegressor(max_depth=7)

##Sélectionnez des variables à l'aide de Boruta
feat_selector = BorutaPy(clf, n_estimators='auto', two_step=False, verbose=2, random_state=42)
feat_selector.fit(features, label)
df_feat_selected=df.loc[0:, feature_cols].loc[0:, feat_selector.support_]

97 variables ont été sélectionnées. La précision obtenue à l'aide de ces variables est la suivante. ne change pas. .. ..

en conclusion

En fait, la précision change considérablement selon la manière dont vous sélectionnez les variables! Je voulais obtenir le résultat, mais malheureusement, le résultat était à peu près le même. (Je me demande si l'échantillon de données était faux)

~~ Cette fois, nous n'avons comparé que trois types, mais dans le Résumé de la sélection des fonctionnalités auquel j'ai fait référence plus tôt, Il y a certaines méthodes que je n'ai pas essayées cette fois, telles que Avancer et Reculer de la méthode Wrapper, alors j'aimerais les essayer à l'avenir. ~~

2/26 postscript

J'ai essayé Avancer et Reculer de la méthode Wrapper en me référant à Résumé de la sélection des fonctionnalités, mais c'est lent. Ou plutôt, ça ne s'arrête pas.

Cela peut être dû au fait que le montant de la fonctionnalité est aussi grand que 300, ou à la puissance de Colab, mais est-il difficile d'utiliser réellement la méthode d'ajout et de soustraction du montant de fonctionnalité?

En dehors de cela, il semble y avoir quelque chose comme Optuna, qui est un cadre automatisé pour la sélection de la quantité de fonctionnalités. Mais il y a plusieurs choses que je peux étudier.

Recommended Posts

Procédure d'apprentissage automatique de base: ③ Comparez et examinez la méthode de sélection de la quantité de caractéristiques
Résumé du flux de base de l'apprentissage automatique avec Python
Importance de l'apprentissage automatique et de l'apprentissage par mini-lots
Procédure d'apprentissage automatique de base: ④ Apprentissage du classificateur + apprentissage d'ensemble
J'ai considéré la méthode d'apprentissage automatique et son langage d'implémentation à partir des informations de balise de Qiita
Procédure d'apprentissage automatique de base: ② Préparer les données
Méthode d'évaluation du problème de régression d'apprentissage automatique (erreur quadratique moyenne et coefficient de décision)
Tournoi Numerai - Fusion de quants traditionnels et apprentissage automatique -
Comparez la vitesse d'ajout et de carte Python
À propos du contenu de développement de l'apprentissage automatique (exemple)
[Apprentissage automatique] "Détection d'anomalies et détection de changement" Dessinons la figure du chapitre 1 en Python.
Introduction à l'apprentissage automatique ~ Montrons le tableau de la méthode du K plus proche voisin ~ (+ gestion des erreurs)
Impressions d'avoir obtenu le nano-diplôme Udacity Machine Learning Engineer
Méthode de voisinage #k d'apprentissage automatique et sa mise en œuvre et divers
Prédire le sexe des utilisateurs de Twitter grâce à l'apprentissage automatique
J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème.
[Apprentissage automatique] Ecrivez vous-même la méthode k-plus proche voisin en python et reconnaissez les nombres manuscrits.
[Deep Learning from scratch] Implémentation de la méthode Momentum et de la méthode AdaGrad
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
Enquête sur l'utilisation du machine learning dans les services réels
Examen de la méthode de prévision des échanges utilisant le Deep Learning et la conversion en ondelettes - Partie 2
Prédire la présence ou l'absence d'infidélité par l'apprentissage automatique
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
[Apprentissage automatique] Sélection de fonctionnalités de variables catégorielles à l'aide du test du chi carré
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
Je veux connaître la nature de Python et pip
Bases de l'apprentissage automatique (mémoire)
Comparez les polices de jupyter-themes
Importance des ensembles de données d'apprentissage automatique
Apprentissage automatique et optimisation mathématique
À propos des fonctionnalités de Python
Une histoire coincée avec l'installation de la bibliothèque de machine learning JAX
Comparons la transformée de Fourier de la source sonore synthétisée et le composite de la transformée de Fourier
Résumé des API recommandées pour l'intelligence artificielle, l'apprentissage automatique et l'IA
Comment utiliser l'apprentissage automatique pour le travail? 01_ Comprendre l'objectif de l'apprentissage automatique
[Détection d'anomalies] Essayez d'utiliser la dernière méthode d'apprentissage à distance
Notez que je comprends l'algorithme du classificateur Naive Bayes. Et je l'ai écrit en Python.
Ingénierie des fonctionnalités pour l'apprentissage automatique à partir de la partie 1 Google Colaboratory - Validation et discrimination des données de comptage
(Apprentissage automatique) J'ai appris l'analyse des composants principaux, qui est une méthode utile pour réduire un grand nombre de fonctionnalités + j'ai pensé à l'étendre à l'industrie manufacturière (en particulier la maintenance des équipements de machines)