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.
Google BigQuery Google Colaboratory
(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.
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 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. ~~
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