DNN Modell mit Schätzer erstellen (Titanic-Dataset)
Storyboard
Eine Anwendung ist die Untersuchung der Daten der Passagiere der Titanic und der Überlebenswahrscheinlichkeit nach ihren Eigenschaften. In diesem Fall wird ein Modell vom Typ DNN-Klassenschätzer verwendet.
Code und Daten
ID:(1791, 0)
Datensatz laden
Beschreibung
Passagierdaten für die Jungfernfahrt der Titanic laden:
import pandas as pd import numpy as np train = pd.read_csv('train_short.csv') eval = pd.read_csv('eval_short.csv') test = pd.read_csv('test-ready.csv')
ID:(13843, 0)
Strukturen und Daten zum Schulen
Beschreibung
Strukturen und Daten aus dem Titanic-Passagierdatensatz anzeigen:
# show structure and data train.head(5)
ID:(13844, 0)
Strukturen und Daten zum Bewerten
Beschreibung
Strukturen und Daten aus dem Titanic-Passagierdatensatz anzeigen:
# show structure and data eval.head(5)
ID:(13845, 0)
Strukturen und Daten zum Prüfen
Beschreibung
Strukturen und Daten aus dem Titanic-Passagierdatensatz anzeigen:
# show structure and data test.head(5)
ID:(13846, 0)
Anzahl Datensätze
Beschreibung
Die Anzahl der Datensätze für jede Gruppe kann mit der Funktion shape[0] bestimmt werden:
# count number of records train.shape[0], eval.shape[0], test.shape[0]
(627, 264, 418)
ID:(13847, 0)
Daten zum Trainieren und Auswerten hochladen
Beschreibung
Um das Training auszuführen, müssen Sie die Daten sowohl aus dem Training train_input_fn als auch aus der Auswertung eval_input_fn in Tensoren laden und mischen:
# input function for training def train_input_fn(features, labels, batch_size): dataset = tf.data.Dataset.from_tensor_slices((dict(features), labels)) dataset = dataset.shuffle(10).repeat().batch(batch_size) return dataset # input function for evaluation or prediction def eval_input_fn(features, labels, batch_size): features=dict(features) if labels is None: inputs = features else: inputs = (features, labels) dataset = tf.data.Dataset.from_tensor_slices(inputs) assert batch_size is not None, 'batch_size must not be None' dataset = dataset.batch(batch_size) return dataset
ID:(13848, 0)
Formvereinbarungen trainieren und auswerten
Beschreibung
Erstellen Sie Arrays von Basis- und Variablendaten, um Vorhersagen zum Trainieren und Auswerten zu treffen In diesem Fall ist die vorherzusagende Spalte das Überleben, das durch pop('Survived') erhalten wird:
# define training arrays y_train = train.pop('Survived') X_train = train # define evaluation arrays y_eval = eval.pop('Survived') X_eval = eval
ID:(13849, 0)
Erstellen Sie ein Spaltenarray, um das Modell zu definieren
Beschreibung
Um das Modell zu definieren, wird die Anordnung der Spalten feature_columns erstellt, die verwendet werden von:
# import tensorflow import tensorflow as tf # define columns feature_columns = [] for key in X_train.keys(): feature_columns.append(tf.feature_column.numeric_column(key=key))
ID:(13850, 0)
Definieren des DNN-Modells
Beschreibung
Mit den Spalten feature_columns kann man das Modell DNN_model mit estimator.DNNClassifier definieren:
# define the DNN model DNN_model = tf.estimator.DNNClassifier( feature_columns=feature_columns, hidden_units=[10, 10], n_classes=2)
ID:(13851, 0)
Trenieren des DNN-Modells
Beschreibung
Trenieren des Modells mit den von train_input_fn erstellten Daten:
# train the DNN model batch_size = 100 train_steps = 400 for i in range(0,100): DNN_model.train(input_fn=lambda:train_input_fn(X_train, y_train,batch_size),steps=train_steps)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Create CheckpointSaverHook.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 0...
INFO:tensorflow:Saving checkpoints for 0 into C:\Users\KLAUSS~1\AppData\Local\Temp\tmp9f9txo1c\model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 0...
INFO:tensorflow:loss = 0.6394816, step = 0
INFO:tensorflow:global_step/sec: 807.462
INFO:tensorflow:loss = 0.60958487, step = 100 (0.125 sec)
INFO:tensorflow:global_step/sec: 1143.95
INFO:tensorflow:loss = 0.6261593, step = 200 (0.086 sec)
INFO:tensorflow:global_step/sec: 1233.15
INFO:tensorflow:loss = 0.58592194, step = 300 (0.081 sec)
...
INFO:tensorflow:Calling checkpoint listeners before saving checkpoint 40000...
INFO:tensorflow:Saving checkpoints for 40000 into C:\Users\KLAUSS~1\AppData\Local\Temp\tmp9f9txo1c\model.ckpt.
INFO:tensorflow:Calling checkpoint listeners after saving checkpoint 40000...
INFO:tensorflow:Loss for final step: 0.49167815.
ID:(13852, 0)
Bewerten des DNN-Modells
Beschreibung
Bewerten des Modell mit den von train_input_fn erstellten Daten:
# evaluate the DNN model eval_result = DNN_model.evaluate(input_fn=lambda:eval_input_fn(X_eval, y_eval,batch_size))
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Starting evaluation at 2021-07-26T22:14:15
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from C:\Users\KLAUSS~1\AppData\Local\Temp\tmp9f9txo1c\model.ckpt-40000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
INFO:tensorflow:Inference Time : 0.36007s
INFO:tensorflow:Finished evaluation at 2021-07-26-22:14:15
INFO:tensorflow:Saving dict for global step 40000: accuracy = 0.7765151, accuracy_baseline = 0.6363636, auc = 0.8616692, auc_precision_recall = 0.80749995, average_loss = 0.44881073, global_step = 40000, label/mean = 0.36363637, loss = 0.44580325, precision = 0.7078652, prediction/mean = 0.36897483, recall = 0.65625
INFO:tensorflow:Saving 'checkpoint_path' summary for global step 40000: C:\Users\KLAUSS~1\AppData\Local\Temp\tmp9f9txo1c\model.ckpt-40000
ID:(13853, 0)
Vorhersage mit dem DNN-Modell durchführen
Beschreibung
Prognostizieren Sie die Modellausgabe mit den von eval_input_fn erstellten Auswertungsdaten:
# forcast with the DNN model predictions = DNN_model.predict( input_fn=lambda:eval_input_fn(eval,labels=None, batch_size=batch_size)) results = list(predictions)
INFO:tensorflow:Calling model_fn.
INFO:tensorflow:Done calling model_fn.
INFO:tensorflow:Graph was finalized.
INFO:tensorflow:Restoring parameters from C:\Users\KLAUSS~1\AppData\Local\Temp\tmp9f9txo1c\model.ckpt-40000
INFO:tensorflow:Running local_init_op.
INFO:tensorflow:Done running local_init_op.
ID:(13854, 0)
Histogramm der Überlebenswahrscheinlichkeiten
Beschreibung
Wenn die vorhergesagte Überlebenswahrscheinlichkeit anhand ihrer Häufigkeit bewertet wird:
# histogram of the probability probs = pd.Series([pred['probabilities'][1] for pred in results]) probs.plot(kind='hist', bins=20, title='predicted probabilities')
Sie erhalten eine Verteilung des Formulars:
ID:(13855, 0)
ROC Kurve
Beschreibung
Um diese Prognose zu verwenden, muss ein Grenzwert der Immobilie definiert werden, um zu definieren, bei welchem ??Wert das Überleben vorhergesagt wird und unter welchem ??das Nicht-Überleben vorhergesagt wird. Dazu muss die Wahrscheinlichkeit, dass das Überleben vorhergesagt und beobachtet wird (richtig positiv) bewertet und mit der Wahrscheinlichkeit verglichen wird, dass das Überleben vorhergesagt wird, wenn es nicht überlebt wird (falsch positiv).\\nDer wahr-positive
$TPR=\displaystyle\frac{TP}{TP+FN}$
\\n\\nwobei wahr-positiv
$FPR=\displaystyle\frac{FP}{FP+TN}$
wobei falsch-positiv
from sklearn.metrics import roc_curve from matplotlib import pyplot as plt fpr, tpr, _ = roc_curve(y_eval, probs) plt.plot(fpr, tpr) plt.title('ROC curve') plt.xlabel('false positive rate') plt.ylabel('true positive rate') plt.xlim(0,) plt.ylim(0,)
Die Darstellung beider Wahrscheinlichkeiten wird als ROC-Diagramm (Receiver Operating Characteristic) bezeichnet:
ID:(13842, 0)