Grundlegendes maschinelles Lernverfahren: (1) Klassifizierungsmodell organisiert das Verfahren zum Erstellen eines grundlegenden Klassifizierungsmodells. Dieses Mal möchte ich mich auf die Auswahl von Merkmalsmengen konzentrieren und verschiedene Methoden zur Auswahl von Merkmalsmengen vergleichen und untersuchen.
Google BigQuery Google Colaboratory
(1) Ähnlich wie beim Klassifizierungsmodell werden Kaufdaten in der folgenden Tabellenstruktur gespeichert.
id | result | product1 | product2 | product3 | product4 | product5 |
---|---|---|---|---|---|---|
001 | 1 | 2500 | 1200 | 1890 | 530 | null |
002 | 0 | 750 | 3300 | null | 1250 | 2000 |
Da der Zweck darin besteht, den Merkmalsbetrag auszuwählen, sollte die horizontale Achse etwa 300 betragen.
Ich habe die folgende Methode unter [Informationen zur Funktionsauswahl] ausgewählt (https://qiita.com/fhiyo/items/33b295de64f5a6a047c6).
Auch wenn es kein Scikit-Lernen ist, wurde es in Charakteristische Auswahlmethode Boruta unter Verwendung einer zufälligen Gesamtstruktur und eines zufälligen Tests eingeführt. Ich möchte auch Boruta verwenden, eine der Wrapper-Methoden.
Um unter den gleichen Bedingungen zu vergleichen, möchte ich RandomForestClassifier als Klassifikator für die Auswahl der Merkmalsmenge verwenden.
1.Embedded Method(SelectFromModel)
Verwenden Sie zunächst die eingebettete Methode, die in Grundlegendes maschinelles Lernverfahren: (1) Klassifizierungsmodell verwendet wird. Die eingebettete Methode bettet Features in ein bestimmtes Modell ein und wählt die optimalen Features aus.
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import SelectFromModel
#Wechseln Sie zu numpy array
label = np.array(df.loc[0:, label_col])
features = np.array(df.loc[0:, feature_cols])
#Variablenauswahl
clf = RandomForestClassifier(max_depth=7)
##Wählen Sie Variablen mit der eingebetteten Methode aus
feat_selector = SelectFromModel(clf)
feat_selector.fit(features, label)
df_feat_selected = df.loc[0:, feature_cols].loc[0:, feat_selector.get_support()]
36 Variablen wurden ausgewählt. Die unter Verwendung dieser Variablen erhaltene Genauigkeit ist wie folgt. Es ist ziemlich teuer, aber ich möchte Recall ein wenig verbessern.
2.Wrapper Method(RFE) Verwenden Sie dann die Wrapper-Methode. Dies ist eine Methode zum Finden der optimalen Teilmenge durch Drehen des Vorhersagemodells mit einer Teilmenge von Merkmalen.
import numpy as np
from sklearn.ensemble import RandomForestClassifier
from sklearn.feature_selection import RFE
#Wechseln Sie zu numpy array
label = np.array(df.loc[0:, label_col])
features = np.array(df.loc[0:, feature_cols])
#Variablenauswahl
clf = RandomForestClassifier(max_depth=7)
##Wählen Sie Variablen mit der eingebetteten Methode aus
feat_selector = RFE(clf)
feat_selector.fit(features, label)
df_feat_selected = df.loc[0:, feature_cols].loc[0:, feat_selector.get_support()]
146 Variablen wurden ausgewählt. Im Vergleich zur Embedded-Methode gibt es ziemlich viele. Die unter Verwendung dieser Variablen erhaltene Genauigkeit ist wie folgt. Die Zahlen nach dem Dezimalpunkt sind nicht so unterschiedlich, aber sie sind fast identisch mit der eingebetteten Methode.
3.Wrapper Method(Boruta) Der letzte ist Boruta. Boruta wird bei Colaboratory nicht standardmäßig installiert. Installieren Sie es daher zuerst.
pip install boruta
Dies ist auch die Wrapper-Methode, sodass wir die optimale Teilmenge finden. Im Vergleich zur vorherigen RFE nimmt dies jedoch viel Zeit in Anspruch. Es gibt Fortschritte, also warten wir langsam.
from boruta import BorutaPy
#Wechseln Sie zu numpy array
label = np.array(df.loc[0:, label_col])
features = np.array(df.loc[0:, feature_cols])
#Variablenauswahl
##Zufälliger Wald, der hier klassifiziert wird(RandomForestClassifier)Verwenden
clf = RandomForestRegressor(max_depth=7)
##Wählen Sie Variablen mit Boruta aus
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 Variablen wurden ausgewählt. Die unter Verwendung dieser Variablen erhaltene Genauigkeit ist wie folgt. ändert sich nicht. .. ..
Tatsächlich ändert sich die Genauigkeit erheblich, je nachdem, wie Sie die Variablen auswählen! Ich wollte das Ergebnis erhalten, aber leider war das Ergebnis ungefähr gleich. (Ich frage mich, ob die Beispieldaten falsch waren)
~~ Dieses Mal haben wir nur drei Typen verglichen, aber in der Zusammenfassung der Funktionsauswahl, auf die ich zuvor Bezug genommen habe, Es gibt einige Methoden, die ich dieses Mal nicht ausprobiert habe, z. B. Schritt vorwärts und Rückwärts der Wrapper-Methode. Daher möchte ich sie in Zukunft ausprobieren. ~~
Ich habe Step Forward und Step Backward der Wrapper-Methode unter Bezugnahme auf Zusammenfassung der Funktionsauswahl versucht, aber es ist langsam. Oder besser gesagt, es endet nicht.
Dies kann daran liegen, dass die Feature-Menge bis zu 300 beträgt, oder an der Leistung von Colab. Ist es jedoch schwierig, die Methode zum Addieren und Subtrahieren der Feature-Menge tatsächlich anzuwenden?
Davon abgesehen scheint es so etwas wie Optuna zu geben, ein automatisiertes Framework für die Auswahl der Merkmalsmenge. Aber es gibt verschiedene Dinge, die ich studieren kann.
Recommended Posts