[PYTHON] Ich habe versucht zu verstehen, wie Pandas und multiple Co-Linearität unter Verwendung des Affairs-Datensatzes als Thema verwendet werden.

Einführung

Letztes Mal habe ich zusammengefasst, was ich aus der Theorie über logistische Regression gelernt habe.

Ich habe versucht, mein Verständnis zu vertiefen, indem ich einen Diskriminator geschaffen habe, der durch meine eigene logistische Regression binär klassifiziert werden kann. https://qiita.com/Fumio-eisan/items/e2c625c4d28d74cf02f3

Dieses Mal haben wir eine Modellschätzung unter Verwendung eines tatsächlichen Datensatzes durchgeführt. Wir haben die grundlegende Verarbeitung der sogenannten Datenvorverarbeitung (Dummy-Variableisierung, Löschen von Spalten, Kombination), Dateninterpretation und multiple Co-Linearität zusammengefasst, die bei der multivariaten Analyse ein Problem darstellt. Es gibt viele Implementierungsinhalte.

Der Umriss ist unten.

Die verwendete Version ist wie folgt.

Dieser Datensatz

Dieses Mal verwendeten wir den Datensatz der Ergebnisse der Umfrage von 1974 über verheiratete Frauen für das Vorhandensein oder Fehlen von Untreue.

affair.ipynb


df = sm.datasets.fair.load_pandas().data
df.head()

image.png

Wenn Sie sich die Daten ansehen, können Sie sehen, dass der Zeitraum seit der Heirat, das Alter, die Anwesenheit von Kindern usw. als erklärende Variablen beschrieben werden. Und schließlich gibt es eine Nummer in der Spalte Angelegenheiten. 0 zeigt an, dass Sie keine Untreue sind, und 1 oder mehr bedeutet, dass Sie Untreue sind (oder waren).

Interpretieren Sie Daten, indem Sie mehrere Diagramme in einem Histogramm anzeigen

Bewerten Sie den Unterschied zwischen Vorhandensein und Nichtvorhandensein von Untreue. Erstens ist in den aktuellen Daten die Anzahl der Angelegenheiten unterschiedlich, also teilen Sie sie durch die Angelegenheit (1 oder mehr) und nicht durch die Angelegenheit (0).

affair.ipynb


def affair_check(x):
    if x!=0:
        return 1
    else:
        return 0

df['Had_Affair']=df['affairs'].apply(affair_check)

Interpretieren Sie die Daten, um nach Parametern zu suchen, die für das Vorhersagemodell wahrscheinlich relevanter sind. Klassifizieren Sie zu diesem Zweck nach Affäre (1) und ohne Affäre (0) und erstellen Sie mit jeder Variablen ein Histogramm. Geben Sie mit Achsen als Rückgabewert jeweils ein Argument in dem Diagramm an, das Sie darstellen möchten.

affair.ipynb


fig, axes = plt.subplots(nrows=3, ncols=3,figsize=(10,8))

sns.countplot(df['age'], hue=df['Had_Affair'],ax=axes[0,0])
sns.countplot(df['yrs_married'], hue=df['Had_Affair'],ax=axes[0,1])
sns.countplot(df['children'], hue=df['Had_Affair'],ax=axes[0,2])
sns.countplot(df['rate_marriage'], hue=df['Had_Affair'],ax=axes[1,0])
sns.countplot(df['religious'], hue=df['Had_Affair'],ax=axes[1,1])
sns.countplot(df['educ'], hue=df['Had_Affair'],ax=axes[1,2])
sns.countplot(df['occupation'], hue=df['Had_Affair'],ax=axes[2,0])
sns.countplot(df['occupation_husb'], hue=df['Had_Affair'],ax=axes[2,1])

101.png

Jetzt, da Sie alles auf einmal anzeigen können, können Sie die Daten interpretieren. Grundsätzlich denke ich, dass Sie sich auf die Parameter konzentrieren sollten, bei denen die Peaks zwischen der ** Untreue-Gruppe und der Nicht-Affären-Gruppe unterschiedlich sind. ** ** **

Datenvorverarbeitung

Einführung von Dummy-Variablen

Jetzt führen wir eine Vorverarbeitung durch, um ein Vorhersagemodell zu erstellen. In diesem Affair-Datensatz sind die kategorialen Variablen Beruf und Beruf des Ehemanns. Für diese führen wir Dummy-Variablen ein und klassifizieren sie mit 0/1 Ausdruck. image.png

Es ist so ein Bild. Die Implementierung ist wie folgt.

affair.ipynb


occ_dummies = pd.get_dummies(df['occupation'])
hus_occ_dummies = pd.get_dummies(df['occupation_husb'])
occ_dummies.columns = ['occ1','occ2','occ3','occ4','occ5','occ6']
hus_occ_dummies.columns = ['hocc1','hocc2','hocc3','hocc4','hocc5','hocc6']
occ_dummies

image.png

Ich konnte es sicher teilen.

Daten löschen und verbinden

Als nächstes möchte ich die nicht benötigten Spalten entfernen und die benötigten Spalten verbinden. Löschen Sie die Spalten Occupment und Had_Affair.

affair.ipynb


X = df.drop(['occupation','occupation_husb','Had_Affair'],axis=1)

Stellen Sie dann die Dummy-Variablen zusammen.

affair.ipynb


dummies = pd.concat([occ_dummies,hus_occ_dummies],axis=1)

Kombinieren Sie abschließend die Dummy-Variable mit den Originaldaten.

affair.ipynb


XX = pd.concat([X,dummies],axis= 1)

Über multiple Co-Linearität

Als nächstes betrachten wir die multiple Co-Linearität. Dies ist ein Problem, das auftritt, wenn die Arten der erklärenden Variablen zunehmen. Unter diesen erklärenden Variablen wird das Phänomen, bei dem die Korrelationskoeffizienten stark miteinander sind, als ** multiple Co-Linearität ** bezeichnet. Wenn es viele multiple Co-Linearitäten gibt, kann die Genauigkeit der Regressionsgleichung extrem schlecht werden und die Analyseergebnisse können instabil werden.

Beispielsweise wird in einem Modell, das die Immobilienpreise vorhersagt, erwartet, dass "Anzahl der Zimmer" und "Zimmerfläche" eine starke Korrelation aufweisen. In solchen Fällen können Sie mehrfache Co-Linearität vermeiden, indem Sie eine der Variablen ausschließen.

Dieses Mal möchte ich ein Modell erstellen, indem ich occ1, hocc1 = Studenten von der Dummy-Variablenbesetzung ausschließe.

affair.ipynb


XX = XX.drop('occ1',axis=1)
XX = XX.drop('hocc1',axis=1)

image.png

Die Beziehung ist wie oben gezeigt.

Vorhersage durch logistische Regression

Dann sagen Sie das Modell voraus. Dieses Mal möchte ich eine einfache Vorhersage unter Verwendung der logistischen Regression des wissenschaftlichen Lernens machen. Trainieren Sie das Modell zuerst nur mit den Trainingsdaten. Dann mit den Testdaten vorhersagen.

affair.ipynb


X_train, X_test, Y_train, Y_test = train_test_split(XX, Y)
model2 = LogisticRegression()
model2.fit(X_train, Y_train)
class_predict = model2.predict(X_test)
print(metrics.accuracy_score(Y_test,class_predict))

0.707286432160804

Es stellte sich heraus, dass die korrekte Antwortrate etwa 70% betrug. Was passiert dann, wenn die Daten, die unter Vermeidung der zuvor erwähnten Mehrfach-Co-Linearität gelöscht wurden, nicht so gelöscht werden, wie sie sind (= der Punkt ist, dass die Daten so sind, wie sie sind)?

affair.ipynb


X2_train, X2_test, Y2_train, Y2_test = train_test_split(X2, Y)
model3 = LogisticRegression()
model3.fit(X2_train, Y2_train)
class_predict2 = model3.predict(X2_test)
print(metrics.accuracy_score(Y2_test,class_predict2))

0.9748743718592965

Die richtige Antwortrate war mit 97% hoch. ** In diesem Fall tritt keine multiple Co-Linearität auf, sodass ersichtlich ist, dass die Daten unverändert bleiben sollten. ** ** **

Mit anderen Worten, es scheint, dass die Frage, ob die mehrfache Co-Linearität berücksichtigt werden sollte oder nicht, einmal berücksichtigt werden muss, wenn alle Daten in die Berechnung einbezogen und gelöscht werden. Es stellte sich heraus, dass der empirische Teil das Verfahren ist, Dinge zu sagen.

Am Ende

Die Daten wurden unter Verwendung von Pandas und Matplotlib interpretiert, und die Vorverarbeitung wurde unter Berücksichtigung der multiplen Co-Linearität durchgeführt. Da es sich um einen Tutorial-ähnlichen Datensatz handelt, scheint er reibungslos verlaufen zu sein, aber ich dachte, dass der Umgang mit Pandas wie Zeichnen und Kombinieren von Grafiken noch mehr ist.   Da die Implementierung der logistischen Regression selbst sehr einfach ist, war es sehr praktisch, rechnen zu können, ohne zu wissen, was im Inneren vor sich ging.

Das vollständige Programm finden Sie hier. https://github.com/Fumio-eisan/affairs_20200412

Recommended Posts

Ich habe versucht zu verstehen, wie Pandas und multiple Co-Linearität unter Verwendung des Affairs-Datensatzes als Thema verwendet werden.
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
Ich habe versucht zusammenzufassen, wie das EPEL-Repository erneut verwendet wird
Verwendung von pandas Timestamp und date_range
Verwendung von Pandas 2
Ich habe versucht, Resultoon auf Mac + AVT-C875 zu verwenden, war aber unterwegs frustriert.
Ich habe versucht, Twitter Scraper mit AWS Lambda zu verwenden, aber es hat nicht funktioniert.
Der tree.plot_tree von scikit-learn war sehr einfach und bequem, daher habe ich versucht, zusammenzufassen, wie man es einfach benutzt.
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Verwendung des Befehls grep und häufiger Samples
Wie man Argparse benutzt und den Unterschied zwischen Optparse
Ich möchte R-Datensatz mit Python verwenden
Ich habe versucht, Scrapy auf Anaconda zu installieren und konnte es nicht
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Verstehen Sie, wie man Django-Filter verwendet
Wie man Pandas Rolling benutzt
Wie benutzt man den Dekorateur?
Ich habe versucht zu simulieren, wie sich die Infektion mit Python ausbreitet
[Hyperledger Iroha] Hinweise zur Verwendung des Python SDK
Ich habe versucht, den in Pandas häufig verwendeten Code zusammenzufassen
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Ich habe versucht, die Uhrzeit und das heutige Wetter anzuzeigen
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Ich habe versucht, die Unterschiede zwischen Java und Python aufzuzählen
Hinweise zur Verwendung von Marshmallow in der Schemabibliothek
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe versucht, den Ipython-Cluster unter AWS auf das Minimum zu starten
[Git] Ich habe versucht, anhand eines konkreten Beispiels zu verstehen, wie man Git Stash verwendet.
Verwendung der Zip-Funktion
Verwendung des optparse-Moduls
Ich habe mein eigenes neuronales 3-Layer-Forward-Propagation-Netzwerk erstellt und versucht, die Berechnung genau zu verstehen.
[Python] Verwendung der Pandas-Serie
Verwendung von Dataiku unter Windows
Ich habe eine Kreuzvalidierung basierend auf dem Rastersuchergebnis mit scikit-learn versucht
Hinweise zur Verwendung von Pywinauto
Ich habe versucht, den Getränkepräferenzdatensatz durch Tensorzerlegung zu visualisieren.
Lesen des SNLI-Datensatzes
Hinweise zur Verwendung von featuretools
So installieren Sie Pandas auf EC2 (Umgang mit MemoryError und PermissionError)
Ich habe versucht, Pytorchs Datensatz zu erklären
Wie benutzt man Homebrew in Debian?
Ich habe versucht, den auf Papier gestempelten Stempel mit OpenCV zu digitalisieren
Verwendung von .bash_profile und .bashrc
Ich habe versucht, einen Sender auf der IoT-Plattform "Rimotte" zu registrieren.
Ich habe am Wochenende versucht, mit Bitcoin Systre zu beginnen
So installieren und verwenden Sie Graphviz
Verwendung von Jupyter am Frontend von Spacon ITO
Wie nutzt man maschinelles Lernen für die Arbeit? 01_ Den Zweck des maschinellen Lernens verstehen
Ich habe zusammengefasst, wie die Boot-Parameter von GRUB und GRUB2 geändert werden
Ich werde erklären, wie man Pandas auf leicht verständliche Weise benutzt.
Ich bin mir über den Unterschied zwischen Modulen, Paketen und Bibliotheken nicht sicher und habe versucht, sie zu organisieren.
Verwendung des ConfigParser-Moduls
[Einführung in Python] Verwendung des Booleschen Operators (und ・ oder ・ nicht)
Ich habe versucht, den Ball zu bewegen
Ich habe versucht, den Abschnitt zu schätzen.
Ich habe versucht, Sphinx-Dokumente an BitBucket zu senden und sie automatisch auf dem Webserver wiederzugeben
Zur Zeit möchte ich mit FastAPI zeigen, wie man eine solche API in swagger verwendet
[Python] Ich habe versucht, die Nacht der Galaxienbahn mit WordCloud zu visualisieren!