Benützer:


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

DNNTitanic.ipynb

titanic_dnn_train.csv

titanic_dnn_test.csv

titanic_dnn_eval.csv

>Modell

ID:(1791, 0)



Datensatz laden

Beschreibung

>Top


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

>Top


Strukturen und Daten aus dem Titanic-Passagierdatensatz anzeigen:

# show structure and data
train.head(5)


ID:(13844, 0)



Strukturen und Daten zum Bewerten

Beschreibung

>Top


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

>Top


Strukturen und Daten aus dem Titanic-Passagierdatensatz anzeigen:

# show structure and data
test.head(5)


ID:(13846, 0)



Anzahl Datensätze

Beschreibung

>Top


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

>Top


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

>Top


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

>Top


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

>Top


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

>Top


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

>Top


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

>Top


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

>Top


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

>Top


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 oder Sensitivitätsfaktor ist definiert als\\n\\n

$TPR=\displaystyle\frac{TP}{TP+FN}$

\\n\\nwobei wahr-positiv TP die korrekt als positiv vorhergesagten Fälle und die falsch-negative FN den als negativ vorhergesagten Fällen entsprechen, die negativ sind.\\nDer falsch-positive FPR oder Sensitivitätsfaktor ist definiert als\\n\\n

$FPR=\displaystyle\frac{FP}{FP+TN}$



wobei falsch-positiv FP die als positiv vorhergesagten Fälle sind, obwohl es tatsächlich falsch ist, und das falsch-negative FN entspricht den als negativ vorhergesagten Fällen, die negativ sind.

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)