[PYTHON] [Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.13 Funktionsauswahl

google übersetzte http://scikit-learn.org/0.18/modules/feature_selection.html [scikit-learn 0.18 Benutzerhandbuch 1. Überwachtes Lernen](http://qiita.com/nazoking@github/items/267f2371757516f8c168#1-%E6%95%99%E5%B8%AB%E4%BB%98 Von% E3% 81% 8D% E5% AD% A6% E7% BF% 92)


1.13 Auswahl der Merkmalsmenge

sklearn.feature_selection Die Verwendung von Modulklassen kann die Genauigkeitsbewertung des Schätzers verbessern oder ist sehr hoch. Es kann zur Merkmalsauswahl / Dimensionsreduzierung in Stichproben verwendet werden, um die Leistung von Dimensionsdatensätzen zu verbessern.

1.13.1. Entfernen von Merkmalen mit geringer Streuung

VarianceThreshold ist ein einfacher Basisansatz für die Funktionsauswahl. Löscht alle Features, deren Varianz einen bestimmten Schwellenwert nicht erreicht. Standardmäßig werden alle nullverteilten Features entfernt, dh Features mit demselben Wert in allen Beispielen. Angenommen, Sie haben ein Dataset mit Booleschen Features und möchten alle 1 oder Null-Features (Ein oder Aus) in 80% oder mehr der Stichprobe entfernen. Die Boolesche Funktion ist Bernoullis stochastische Variable und die Varianz einer solchen Variablen

\mathrm {Var} [X] = p(1-p)

Daher können Sie mit dem Schwellenwert ".8 * (1-.8)" auswählen.

>>>
>>> sklearn.feature_Import aus Auswahl VarianceThreshold
>>> X = [[0,0,1]、[0,1,0]、[1,0,0]、[0,1,1]、[0,1,0]、[0,1 、1]]
>>> sel =Varianzschwelle=(.8 *(1~8)))
>>> sel.fit_transform(X)
Array ([[0、1]、
       [1、0]、
       [0、0]、
       [1,1]
       [1、0]、
       [1,1]))

Wie erwartet hat der VarianceThreshold die erste Spalte entfernt. Diese Spalte enthält mit einer Wahrscheinlichkeit Null $ p = 5/6> .8 $.

1.13.2. Auswahl der univariaten Feature-Funktion

Die Auswahl univariater Merkmale erfolgt durch Auswahl des besten Merkmals basierend auf einem univariaten statistischen Test. Dies kann als Vorverarbeitungsschritt für den Schätzer angesehen werden. Scikit-learn macht Feature-Auswahlroutinen als Objekte verfügbar, die Transformationsmethoden implementieren.

Sie können beispielsweise einen $ \ chi ^ 2 $ -Test für ein Beispiel ausführen, um nur die beiden besten Funktionen zu erhalten:

>>>
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectKBest
>>> from sklearn.feature_selection import chi2
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> X_new = SelectKBest(chi2, k=2).fit_transform(X, y)
>>> X_new.shape
(150, 2)

Diese Objekte verwenden als Eingabe eine Bewertungsfunktion, die eine univariate Bewertung und einen p-Wert zurückgibt (oder nur SelectKBest- und SelectPercentile-Bewertungen).

Die F-Test-basierte Methode (f_) schätzt die lineare Abhängigkeit zwischen zwei stochastischen Variablen. Auf der anderen Seite können Methoden zur gegenseitigen Information (Mutual_info_) alle Arten statistischer Abhängigkeiten erfassen, sind jedoch nicht parametrisch und erfordern mehr Stichproben für eine genaue Schätzung.

1.13.3 Entfernen rekursiver Merkmale

Rekursives Entfernen von Features (RFE bei einem externen Schätzer, der Features Gewichte zuweist (z. B. Koeffizienten eines linearen Modells) .RFE.html # sklearn.feature_selection.RFE)) dient dazu, kleinere Feature-Sets rekursiv zu berücksichtigen, um Features auszuwählen. Zunächst wird der Schätzer auf den anfänglichen Merkmalssatz trainiert und jedem Merkmalspunkt werden Gewichte zugewiesen. Das Feature mit dem niedrigsten absoluten Gewicht wird dann vom aktuellen Feature-Set abgeschnitten. Der Vorgang wird für den beschnittenen Satz rekursiv wiederholt, bis die endgültige Anzahl der zur Auswahl erforderlichen Merkmale erreicht ist. RFECV führt RFE in einer Kreuzvalidierungsschleife aus und bietet die optimale Anzahl von Funktionen. finden.

--Beispiel:

1.13.4. Funktionsauswahl mit SelectFromModel

SelectFromModel ist ein Schätzer mit dem Attribut coef_ oder feature_importances_. Ein Meta-Konverter, mit dem verwendet werden kann. Wenn der entsprechende Wert von "coef_" oder "feature_importances_" unter dem angegebenen Schwellenwertparameter liegt, wird das Merkmal als unbedeutend angesehen und entfernt. Zusätzlich zur numerischen Angabe des Schwellenwerts verfügt es über integrierte Heuristiken zum Ermitteln des Schwellenwerts mithilfe von Zeichenfolgenargumenten. Die verfügbaren Heuristiken sind "Mittelwert", "Median" und "0,1 * Durchschnitt" dieser Gleitkommazahlen. Im folgenden Abschnitt finden Sie Verwendungsbeispiele.

--Beispiel:

1.13.4.1. L1-basierte Funktionsauswahl

Das mit der L1-Norm bestrafte Lineare Modell hat eine spärliche Lösung. Viele der Schätzkoeffizienten sind Null. Wenn Sie die Dimensionen der von anderen Klassifizierern verwendeten Daten reduzieren möchten, wählen Sie [feature_selection.SelectFromModel](http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html#sklearn]. Kann in Verbindung mit .feature_selection.SelectFromModel) verwendet werden, um Koeffizienten ungleich Null auszuwählen. Ein für diesen Zweck nützlicher spärlicher Bestimmer ist insbesondere [linear_model.Lasso] für die Regression (http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.Lasso.html#sklearn.linear_model). Lasso) und linear_model.LogisticRegression und [svm.LinearSVC] zur Klassifizierung (http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html#sklearn.svm.LinearSVC).

>>>
>>> from sklearn.svm import LinearSVC
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectFromModel
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
>>> model = SelectFromModel(lsvc, prefit=True)
>>> X_new = model.transform(X)
>>> X_new.shape
(150, 3)

Bei SVM und logistischer Regression steuert Parameter C die Spärlichkeit. In Lasso werden umso weniger Features ausgewählt, je höher der Alpha-Parameter ist.

--Beispiel:

L1-Wiederherstellung und Kompressionserfassung

Für eine gute Auswahl von Alpha ist Lasso mit nur wenigen Beobachtungen nicht genau, sofern bestimmte Bedingungen erfüllt sind. Sie können einen Satz von Nullvariablen vollständig wiederherstellen. Insbesondere sollte die Stichprobengröße "groß genug" sein oder das L1-Modell sollte zufällig ausgeführt werden. "Groß genug" hängt von der Anzahl der Koeffizienten ungleich Null, dem Logarithmus der Anzahl der Merkmale, der Menge des Rauschens, dem minimalen absoluten Wert des Koeffizienten ungleich Null und der Struktur der Matrix X ab. Darüber hinaus muss die Entwurfsmatrix bestimmte spezifische Eigenschaften aufweisen, z. B. zu unkorreliert. Darüber hinaus muss die Entwurfsmatrix bestimmte Merkmale aufweisen, z. B. nicht zu korreliert. Es gibt keine allgemeinen Regeln für die Auswahl von Alpha-Parametern für die Wiederherstellung von Koeffizienten ungleich Null. Dies kann durch Kreuzvalidierung (LassoCV oder LassoLarsCV) festgelegt werden. Dies kann jedoch zu einem unterschätzten Modell führen: Das Enthalten einiger irrelevanter Variablen wirkt sich nicht nachteilig auf die vorhergesagte Punktzahl aus. Da ist gar nichts. Im Gegensatz dazu neigt BIC (LassoLarsIC) dazu, einen hohen Wert von α festzulegen.

--Verweise

1.13.4.2. Randomisiertes Sparse-Modell

Es gibt einige bekannte Einschränkungen des L1-Strafmodells für die Regression und Klassifizierung hinsichtlich der Merkmalsauswahl. Beispielsweise ist bekannt, dass Lasso dazu neigt, einzelne Variablen aus einer Gruppe stark korrelierter Merkmale auszuwählen. Darüber hinaus können die Bedingungen, unter denen die L1-Strafen konsequent "gute" Merkmale auswählen, im Allgemeinen einschränkend sein, selbst wenn die Korrelation zwischen Merkmalen nicht zu hoch ist. Um dieses Problem zu lösen, können Randomisierungstechniken wie die in [B2009] und [M2010] gezeigten verwendet werden. Die letztere Technik wird als Stabilitätsauswahl bezeichnet und im Modul sklearn.linear_model implementiert. Bei dem Stabilitätsauswahlverfahren werden Teilproben von Daten an ein L1-Strafmodell angepasst, bei dem die Strafe einer zufälligen Teilmenge von Koeffizienten skaliert wird. Insbesondere wird bei einer Teilstichprobe der Daten $ (x_i, y_i) i \ in I $ angegeben, wobei $ I \ subset \ {1, 2, \ ldots, n } $ die Größe $ n_I ist Eine zufällige Teilmenge der $ -Daten mit der folgenden modifizierten Lasso-Anpassung:

\hat{w_I} = \mathrm{arg}\min_{w} \frac{1}{2n_I} \sum_{i \in I} (y_i - x_i^T w)^2 + \alpha \sum_{j=1}^p \frac{ \vert w_j \vert}{s_j},

$ s_j \ in \ {s, 1 } $ ist ein unabhängiger Versuch der fairen Bernoulli-Wahrscheinlichkeitsvariablen, und $ 0 <s <1 $ ist der Skalierungsfaktor. Durch Wiederholen dieses Verfahrens über verschiedene zufällige Teilstichproben und Bernoulli-Versuche kann das randomisierte Verfahren zählen, wie oft jedes Merkmal ausgewählt wurde, und diese Prozentsätze als Merkmalauswahlbewertung verwenden. RandomizedLasso implementierte diese Strategie in der Regressionskonfiguration mit Lasso, RandomizedLogisticRegression verwendet die logistische Regression und eignet sich für Klassifizierungsaufgaben. Verwenden Sie lasso_stability_path, um den vollständigen Pfad der Stabilitätsbewertung zu erhalten ..

../_images/sphx_glr_plot_sparse_recovery_0031.png http://scikit-learn.org/stable/auto_examples/linear_model/plot_sparse_recovery.html

Damit ein randomisiertes Sparse-Modell bei der Erkennung von Nicht-Null-Merkmalen leistungsfähiger als Standard-F-Statistiken ist, muss das Grand-Truth-Modell spärlich sein, dh nur ein kleiner Teil der Nicht-Null-Merkmale. Sollte nicht existieren.

--Beispiel:

1.13.4.3. Baumbasierte Feature-Auswahl

Sie können einen baumbasierten Schätzer verwenden (siehe Wald der Bäume in den Modulen sklearn.tree und sklearn.ensemble), um Feature-Lasten zu berechnen und nicht verwandte Features zu verwerfen (sklearn.feature_selection.SelectFromModel). In Kombination mit einem Meta-Konverter)

>>>
>>> from sklearn.ensemble import ExtraTreesClassifier
>>> from sklearn.datasets import load_iris
>>> from sklearn.feature_selection import SelectFromModel
>>> iris = load_iris()
>>> X, y = iris.data, iris.target
>>> X.shape
(150, 4)
>>> clf = ExtraTreesClassifier()
>>> clf = clf.fit(X, y)
>>> clf.feature_importances_ 
array([ 0.04..., 0.05..., 0.4..., 0.4...])
>>> model = SelectFromModel(clf, prefit=True)
>>> X_new = model.transform(X)
>>> X_new.shape 
(150, 2)

--Beispiel:

1.13.5. Auswählen von Features als Teil der Pipeline

Die Merkmalsauswahl wird normalerweise als Vorverarbeitungsschritt vor dem eigentlichen Lernen verwendet. Um dies mit scikit-learn zu tun, empfehlen wir die Verwendung von sklearn.pipeline.Pipeline.

clf = Pipeline([
  ('feature_selection', SelectFromModel(LinearSVC(penalty="l1"))),
  ('classification', RandomForestClassifier())
])
clf.fit(X, y)

Dieses Snippet kombiniert sklearn.svm.LinearSVC mit sklearn.feature_selection.SelectFromModel, um die Bedeutung von Features zu bewerten und die relevantesten Features auszuwählen. Der sklearn.ensemble.RandomForestClassifier wird dann auf die transformierte Ausgabe trainiert, d. H. Nur unter Verwendung der relevanten Merkmale. Ähnliche Operationen können mit anderen Merkmalsauswahlmethoden und natürlich mit Klassifizierern durchgeführt werden, die eine Möglichkeit bieten, die Bedeutung von Merkmalen zu bewerten. Weitere Informationen finden Sie im Beispiel sklearn.pipeline.Pipeline.


[scikit-learn 0.18 Benutzerhandbuch 1. Überwachtes Lernen](http://qiita.com/nazoking@github/items/267f2371757516f8c168#1-%E6%95%99%E5%B8%AB%E4%BB%98 Von% E3% 81% 8D% E5% AD% A6% E7% BF% 92)

© 2010 - 2016, Entwickler von Scikit-Learn (BSD-Lizenz)

Recommended Posts

[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.13 Funktionsauswahl
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.2 Merkmalsextraktion
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.5. Zufällige Projektion
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.11. Ensemble-Methode
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.15. Isotonische Regression
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.16. Wahrscheinlichkeitskalibrierung
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.4. Modellpersistenz
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 2.8. Dichteschätzung
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.3. Datenvorverarbeitung
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.4. Unüberwachte Dimensionsreduzierung
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch Inhaltsverzeichnis
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.4. Support Vector Machine
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.1. Pipeline- und Feature-Union: Kombination von Schätzern
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 1.12. Mehrklassenalgorithmus und Mehrfachetikettenalgorithmus
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.2. Optimieren der Hyperparameter des Schätzers
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 4.8. Konvertieren Sie das Vorhersageziel (y)
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 2.7. Erkennung von Neuheiten und Ausreißern
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.1. Kreuzvalidierung: Bewerten Sie die Leistung des Schätzers
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.3. Modellbewertung: Quantifizieren Sie die Qualität der Vorhersage
Feature-Auswahldatensätze
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 3.5. Verifizierungskurve: Zeichnen Sie die Punktzahl, um das Modell zu bewerten
[Übersetzung] scikit-learn 0.18 Benutzerhandbuch 2.5. Zerlegen von Signalen in Komponenten (Matrixzerlegungsproblem)
Funktionsauswahl durch sklearn.feature_selection
Pandas Benutzerhandbuch "Multi-Index / Advanced Index" (offizielles Dokument Japanische Übersetzung)
Pandas Benutzerhandbuch "Manipulieren fehlender Daten" (offizielles Dokument Japanische Übersetzung)
Merkmalsauswahl durch genetischen Algorithmus
Funktionsauswahl durch Null-Wichtigkeiten
Pandas Benutzerhandbuch "Tabellenformatierung und Pivot-Tabelle" (offizielles Dokument Japanische Übersetzung)