[PYTHON] Logistische Rückgabe

Was ist logistische Regression?

Ähnlich wie bei der linearen Regression, wird jedoch verwendet, wenn die Zielvariable binär ist. Zum Beispiel, ob diese Person ein Produkt kauft oder nicht, ob sie einen Stock trifft oder nicht, ob sie sich bewegt oder nicht, ob sie den Job wechselt oder nicht und so weiter.

Erstellen Sie ein Vorhersagemodell mit der folgenden logistischen Funktion (Sigmoid-Funktion). スクリーンショット 2016-05-03 16.47.40.png

Die Form der Logistikfunktion ist wie folgt. Es nimmt einen Wert von 0 bis 1 an und steigt monoton an. スクリーンショット 2016-05-03 16.48.21.png

Die Beziehung zwischen der Zielvariablenmatrix x und der erklärenden Variablen y ist wie folgt. (Die rechte Seite von y = ax + b entspricht der Potenz -1.) スクリーンショット 2016-05-03 16.49.51.png

Vorbereitung der Nutzungsdaten

Verwenden Sie Affair-Daten mit sklearn.

{get_affair_dataset.py}


from sklearn.linear_model import LogisticRegression #Zur logistischen Regression
from sklearn.cross_validation import train_test_split #Zur Aufteilung der Kreuzvalidierung
import statsmodels.api as sm

df = sm.datasets.fair.load_pandas().data #Laden von Affair-Daten

Zusammenfassung der Daten zur Untreue

{describe_affair.py}


df.head()
スクリーンショット 2016-05-03 16.53.17.png

rate_marriage: Glück, Alter: Alter, Jahre_verheiratet: Ehejahre, Kinder: Anzahl der Kinder, religiös: Glaube, Bildung: akademischer Abschluss, Beruf: Beruf der Frau, Beruf_husb: Beruf des Ehemanns, Angelegenheiten: Affärenerfahrung (größer als 0) Had_Affair: Affair-Flag (1 wird gesetzt, wenn die Affäre 0 ist>)

Erkennen Sie leicht die Beziehung zwischen dem Vorhandensein oder Fehlen von Untreue und einer geeigneten Stichprobe

{easy_display1.py}


#Alter und Anwesenheit der Affäre
sns.countplot('age', data = df.sort('age'), hue = 'Had_Affair', palette='coolwarm')
スクリーンショット 2016-05-03 16.57.17.png

{easy_display2.py}


#Jahre der Ehe und Anwesenheit oder Abwesenheit von Affäre
sns.countplot('yrs_married', data = df.sort('yrs_married'), hue = 'Had_Affair', palette='coolwarm')
スクリーンショット 2016-05-03 16.57.21.png

{easy_display3.py}


#Anzahl der Kinder und Vorhandensein oder Nichtvorhandensein einer Affäre
sns.countplot('children', data = df.sort('children'), hue = 'Had_Affair', palette='coolwarm')
スクリーンショット 2016-05-03 16.57.35.png

Die Affärenrate ist höher, wenn Sie älter werden / mehr Jahre verheiratet sind / Kinder haben

Versuchen Sie es mit einer logistischen Rückgabe

Vorverarbeitung

Zuvor ist die Belegungsvariable eine kategoriale Variable. Ersetzen Sie sie daher durch eine Dummy-Variable. Eine kategoriale Variable ist eine Variable, bei der die Größe des Werts bedeutungslos ist.

{change_dummy_value.py}


#numpy bekommen_Mit Dummies in Dummy-Variable konvertieren.
occ_dummies = pd.get_dummies(df.occupation)
hus_occ_dummies = pd.get_dummies(df.occupation_husb)

#Spaltenname festgelegt
occ_dummies.columns = ['occ1','occ2','occ3','occ4','occ5','occ6']
hus_occ_dummies.columns = ['hocc1','hocc2','hocc3','hocc4','hocc5','hocc6']

occ_dummies.head()
スクリーンショット 2016-05-03 17.13.59.png

Mit dem obigen Gefühl wird der Treffer von Occ1 bis 6 durch das 0,1-Flag ersetzt.

Als nächstes erhalten Sie die erklärenden Variablen.

{get_x.py}


#Setzen Sie X, wobei Beruf, Beruf des Ehemanns und Familienstand aus dem ursprünglichen Datenrahmen entfernt wurden.
X = df.drop(['occupation', 'occupation_husb', 'Had_Affair'], axis =1) 
#Bereiten Sie einen Datenrahmen vor, in dem Berufe in Dummy-Variablen konvertiert werden
dummys = pd.concat([occ_dummies, hus_occ_dummies], axis =1)
#Kombinieren Sie den variablen Datenrahmen des Besatzungsdummy mit dem Datenrahmen, wobei der Beruf usw. gelöscht wurde
X = pd.concat([X, dummys], axis=1)

X.head()

Bisheriger Datensatz für erklärende Variablen スクリーンショット 2016-05-03 17.18.57.png

Multiple Co-Linearität

Wenn eine erklärende Variable eine oder mehrere andere erklärende Variablen darstellen kann, spricht man von mehrfacher Co-Linearität. Zum Beispiel wird dieses Mal occ1 eindeutig durch die Werte von occ2 bis occ6 bestimmt. (Wenn es in occ2-6 eine oder mehrere Einsen gibt, ist occ1 = 0, andernfalls ist occ1 = 1) In diesem Fall kann die inverse Matrix nicht berechnet werden, oder selbst wenn sie berechnet werden kann, wird die Zuverlässigkeit des erhaltenen Ergebnisses gering. Um dies zu beseitigen, löschen Sie occ1 und hocc1.

{drop_nonavailable_value.py}


X = X.drop('hocc1', axis = 1)
X = X.drop('hocc1', axis = 1)
#Da Angelegenheiten zum Erstellen der Zielvariablen verwendet werden, wird dies auch von den erklärenden Variablen ausgeschlossen.
X = X.drop('affairs', axis =1 )

X.head()

Endgültige Form

スクリーンショット 2016-05-03 17.28.45.png

Laufen Sie mit sklearn

{do_logistic_regression.py}


#Objektiver Variablensatz
Y = df.Had_Affair
Y = np.ravel(Y)    # np.Machen Sie Y zu einem eindimensionalen Array mit Ravel

#Ausführung der logistischen Regression
log_model = LogisticRegression() #Instanzgenerierung
log_model.fit(X, Y)              #Ausführung der Modellerstellung
log_model.score(X, Y)            #Bestätigung der Genauigkeit der Modellvorhersage(72.6%)
> 0.7260446120012567

Überprüfen Sie den Koeffizienten jeder Variablen

{confirm_coefficient.py}


#Von der Instanz.coef_[0]Enthält den Koeffizienten
coeff_df = DataFrame([X.columns, log_model.coef_[0]]).T
coeff_df
スクリーンショット 2016-05-03 17.36.33.png

Der Ort, an dem dieser Koeffizient groß ist, hat großen Einfluss. Da die Dateneinheiten der erklärenden Variablen jedoch nicht einheitlich sind, ist es nicht möglich, sie einfach nebeneinander zu vergleichen. Zum Beispiel ist occ5 ungefähr neunmal so groß wie yrs_married, daher ist es nicht einfach, OK zu sagen !!, ohne die Anzahl der Ehejahre zu berücksichtigen.

Apropos

Wie üblich werde ich schreiben, wie man es in Zug und Test unterteilt.

{do_logistic_regression_train_test.py}


#Datenvorbereitung für Zug und Test
X_train, X_test, Y_train, Y_test = train_test_split(X, Y)

log_model2 = LogisticRegression() 
log_model2.fit(X_train, Y_train)           #Modellerstellung mit Zugdaten
class_predict = log_model2.predict(X_test) #Testdaten vorhersagen

from sklearn import metrics #Zur Überprüfung der Vorhersagegenauigkeit

metrics.accuracy_score(Y_test, class_predict) #Genauigkeitsprüfung
>0.73115577889447236

Sie können sehen, dass die Genauigkeit etwa 73% beträgt.

Recommended Posts

Logistische Rückgabe
Logistische Rückgabe
Logistische Regression beim maschinellen Lernen
Algorithmus für maschinelles Lernen (logistische Regression)
Implementierung der logistischen Regression mit NumPy
Logistic Return (für Anfänger) -Code Edition-
Wenden Sie die Einflussfunktion auf die logistische Regression an
Lineare Regression
Was ist eine mehrjährige logistische Regressionsanalyse?
Logistische Regressionsanalyse Selbst erstellt mit Python
Erster TensorFlow (überarbeitete Ausgabe) - Lineare und logistische Regression
PRML Kapitel 4 Bayesianische logistische Regression Python-Implementierung
<Subjekt> Maschinelles Lernen Kapitel 3: Logistisches Regressionsmodell
[Kaggle für Super-Anfänger] Titanic (Logistic Return)
Ich habe versucht, Couseras logistische Regression in Python zu implementieren
Poisson-Regressionsanalyse
Grundlegendes zur logistischen Regression (1) _ Informationen zu Gewinnchancen und logistischer Transformation
Probieren Sie Theano mit Kaggles MNIST-Daten ~ Logistic Return ~ aus
Methode der Regressionsanalyse
Implementieren Sie mit stan ein zeitdiskretes logistisches Regressionsmodell
Implementierung der logistischen Regression mit Partikelgruppenoptimierungsmethode
Vorsichtsmaßnahmen bei der Durchführung einer logistischen Regression mit Statsmodels
Coursera-Herausforderungen beim maschinellen Lernen in Python: ex2 (Logistic Return)
Lineare multiple Regression, logistische Regression, mehrschichtiges Perzeptron, Auto-Encoder, Chainer Yo!
Lösen des Irisproblems mit scikit-learn ver1.0 (logistische Regression)