Scikit-learn χ2 (chi-Quadrat) - Statistik und entsprechende Kontingenz-Tabelle

In der Dokumentation für den chi-Quadrat-univariate Funktion Auswahl der Funktion scikit-learn http://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.chi2.html, heißt es

Diese Kerbe kann benutzt werden, um wählen Sie die n_features features mit die höchsten Werte für das χ2 (chi-Quadrat) Statistik von X, die muss enthalten Boolesche Werte oder Frequenzen (z.B., Begriff zählt in der Dokument-Klassifizierung), im Verhältnis zu den Klassen.

Ich bin kämpfen, um zu verstehen, was die entsprechende Kontingenz-Tabelle Aussehen würde, vor allem im Fall von frequency features.

Betrachten wir zum Beispiel die unten dataset mit booleschen Funktionen und Ziele:

import numpy as np

>>> X = np.random.randint(2, size=50).reshape(10, 5)
array([[1, 0, 0, 0, 1],
       [1, 1, 0, 1, 1],
       [1, 0, 0, 0, 0],
       [0, 0, 0, 0, 0],
       [0, 0, 0, 0, 1],
       [1, 0, 0, 0, 1],
       [1, 0, 1, 1, 1],
       [0, 1, 1, 0, 0],
       [1, 0, 1, 1, 1],
       [1, 1, 1, 1, 0]])

>>> y = np.random.randint(2, size=10)
array([1, 0, 0, 0, 1, 1, 1, 1, 0, 1])

Zu konstruieren, die Kontingenz-Tabelle mit Bezug auf die erste Funktion, die wir tun können, diese (entschuldigen Sie meine PEP8 Verletzung)

import scipy as sp

>>> contingency_table = sp.sparse.coo_matrix(
...    (np.ones_like(y), (X[:, 0], y)), 
...    shape=(np.unique(X[:, 0]).shape[0], np.unique(y).shape[0])).A
array([[1, 2],
       [3, 4]])

So, jetzt kann ich berechnen des chi-Quadrat-Statistik und Ihre p-Werte

>>> sp.stats.chi2_contingency(contingency_table)
(0.17857142857142855,
 0.67260381744151676,
 1,
 array([[ 1.2,  1.8],
       [ 2.8,  4.2]]))

- Und dies sollte im Einklang mit scikit-learn ist chi2

from sklearn.feature_selection import chi2

>>> chi2_, pval = chi2(X, y)
>>> chi2_[0], pval[0]
(0.023809523809523787, 0.87737055606414338)

...NÖ. Habe ich etwas falsch interpretiert?

Auch, was macht der Kontingenz-Tabelle Aussehen bei Frequenzen? Ich nahm an, es wäre so etwas wie

contingency_table = sp.sparse.coo_matrix(
    (np.ones_like(y), (X[:, 0], y)), 
    shape=(X[:, 0].max()+1, np.unique(y).shape[0])).A

Aber die entsprechende Tabelle der erwarteten Häufigkeiten, der höchstwahrscheinlich mehrere null-Elemente.

Edit:

Näher zu erläutern, betrachten wir das erste feature X[:, 0], die, sagen wir, Geschlecht und die Ziele y sagen, Händigkeit.

Aus dieser erhalten wir der kreuztabellierung

                Right-handed    Left-handed (!right-handed)
Male            1               2
Female (!male)  3               4

Und wir können beurteilen, die Bedeutung der Differenz zwischen zwei Proportionen mit dem Chi-Quadrat-test durch festlegen der erwarteten Häufigkeit

Scikit-learn χ2 (chi-Quadrat) - Statistik und entsprechende Kontingenz-Tabelle

sklearn.feature_selection.chi2 tut dies direkt, ohne Rückgriff auf explizit der Berechnung der Tabelle und erhält die Noten mit einer Straffung der Verfahren, die äquivalent zu scipy.stats.chisquare.

Nach explizit aufzählen der Tabelle oben gezeigt wird, wollte ich überprüfen, ob es im Einklang mit chi2 bei der Anwendung scipy.stats.chi2_contingency und zu meinem Entsetzen, das ist es nicht. Ich würde gerne Fragen, warum er es nicht ist.

Interessant: ich hab schon versucht das zu lösen ein ähnliches problem in der letzten Stunde, aber aus der entgegengesetzten Richtung: aus dem ersten Beispiel Kontingenz-Tabelle finden Sie in diesem tutorial, youtube.com/watch?v=VskmMgXmkMQ, stellen Sie sicher, dass die entsprechenden 2d-boolean-dataset (X=is_male, y=is_deposit) zugeführt sklearn.feature_selection.chi2 sollte, erzielen Sie dasselbe Ergebnis, und versuchen zu verstehen, warum es nicht der Fall ist, durch die Untersuchung der Quelle..
Ich finde es verwirrend, dass Sie beginnen mit der Angabe des Datensatz mit 5-Funktionen, und bauen Sie die übrigen von Ihrem Fall nur die Verwendung der ersten Funktion. Ich denke, das ist, was macht @larsmans Antwort verwirrend in diesem Zusammenhang, denn er ist die Beantwortung einer anderen Frage.

InformationsquelleAutor tiao | 2014-01-22

Schreibe einen Kommentar