[PYTHON] Grundlegendes maschinelles Lernverfahren: ③ Vergleichen und untersuchen Sie die Auswahlmethode für die Merkmalsmenge

Einführung

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.

Verfahren bisher

Analytische Umgebung

Google BigQuery Google Colaboratory

Zieldaten

(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.

0. So wählen Sie die Zielfeature-Menge aus

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. .. ..

abschließend

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. ~~

2/26 Nachschrift

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

Grundlegendes maschinelles Lernverfahren: ③ Vergleichen und untersuchen Sie die Auswahlmethode für die Merkmalsmenge
Zusammenfassung des grundlegenden Ablaufs des maschinellen Lernens mit Python
Bedeutung des maschinellen Lernens und des Mini-Batch-Lernens
Grundlegendes maschinelles Lernverfahren: ④ Klassifikatorlernen + Ensemble-Lernen
Ich habe die Methode des maschinellen Lernens und ihre Implementierungssprache anhand der Tag-Informationen von Qiita betrachtet
Grundlegendes maschinelles Lernverfahren: ② Daten vorbereiten
Bewertungsmethode des Regressionsproblems des maschinellen Lernens (mittlerer quadratischer Fehler und Entscheidungskoeffizient)
Numerai Turnier-Fusion von traditionellen Quants und maschinellem Lernen-
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Über die Entwicklungsinhalte des maschinellen Lernens (Beispiel)
[Maschinelles Lernen] "Erkennung von Abnormalitäten und Erkennung von Änderungen" Zeichnen wir die Abbildung von Kapitel 1 in Python.
Einführung in das maschinelle Lernen ~ Zeigen wir die Tabelle der K-Methode für den nächsten Nachbarn ~ (+ Fehlerbehandlung)
Eindrücke vom Udacity Machine Learning Engineer Nano-Abschluss
Maschinelles Lernen #k Nachbarschaftsmethode und deren Implementierung und verschiedene
Prognostizieren Sie das Geschlecht von Twitter-Nutzern durch maschinelles Lernen
Ich habe versucht, die Genauigkeit von Modellen für maschinelles Lernen mit Kaggle als Thema zu vergleichen.
[Maschinelles Lernen] Schreiben Sie die Methode des nächsten Nachbarn in Python selbst und erkennen Sie handgeschriebene Zahlen.
[Deep Learning von Grund auf neu] Implementierung der Momentum-Methode und der AdaGrad-Methode
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Regression zu bewerten
Umfrage zum Einsatz von maschinellem Lernen in realen Diensten
Untersuchung der Austauschprognosemethode mit Deep Learning und Wavelet-Konvertierung - Teil 2-
Vorhersage des Vorhandenseins oder Nichtvorhandenseins von Untreue durch maschinelles Lernen
Versuchen Sie, die Leistung des Modells für maschinelles Lernen / Klassifizierung zu bewerten
[Maschinelles Lernen] Funktionsauswahl kategorialer Variablen mithilfe des Chi-Quadrat-Tests
[Maschinelles Lernen] Ich habe versucht, die Theorie von Adaboost zusammenzufassen
Ich möchte die Natur von Python und Pip kennenlernen
Grundlagen des maschinellen Lernens (Denkmal)
Vergleichen Sie die Schriftarten von Jupyter-Themen
Bedeutung von Datensätzen für maschinelles Lernen
Maschinelles Lernen und mathematische Optimierung
Über die Funktionen von Python
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
Vergleichen wir die Fourier-Transformation der synthetisierten Schallquelle und die Zusammensetzung der Fourier-Transformation
Zusammenfassung der empfohlenen APIs für künstliche Intelligenz, maschinelles Lernen und KI
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
[Erkennung von Anomalien] Versuchen Sie es mit der neuesten Methode des Fernunterrichts
Beachten Sie, dass ich den Algorithmus des maschinell lernenden Naive Bayes-Klassifikators verstehe. Und ich habe es in Python geschrieben.
Feature Engineering für maschinelles Lernen ab Teil 1 Google Colaboratory - Validierung und Diskriminierung von Zähldaten
(Maschinelles Lernen) Ich habe die Hauptkomponentenanalyse gelernt, die eine nützliche Methode zur Reduzierung einer großen Anzahl von Funktionen darstellt. + Ich habe darüber nachgedacht, sie auf die Fertigungsindustrie auszudehnen (insbesondere die Wartung von Maschinengeräten).