Carregar um pandas.DataFrame

Ver em TensorFlow.org Executar no Google Colab Ver código fonte no GitHub Baixar notebook

Este tutorial fornece um exemplo de como carregar dataframe do pandas em um tf.data.Dataset.

Este tutorial usa um pequeno conjunto de dados fornecido pela Cleveland Clinic Foundation for Heart Disease. Existem várias centenas de linhas no CSV. Cada linha descreve um paciente e cada coluna descreve um atributo. Usaremos essas informações para prever se um paciente tem uma doença cardíaca, que neste conjunto de dados é uma tarefa de classificação binária.

Ler os dados usando pandas

from __future__ import absolute_import, division, print_function, unicode_literals

try:
  # %tensorflow_version only exists in Colab.
  %tensorflow_version 2.x
except Exception:
  pass
import pandas as pd
import tensorflow as tf

Fazer download do arquivo csv que contém o conjunto de dados do coração.

csv_file = tf.keras.utils.get_file('heart.csv', 'https://storage.googleapis.com/applied-dl/heart.csv')
Downloading data from https://storage.googleapis.com/applied-dl/heart.csv

 8192/13273 [=================>............] - ETA: 0s
16384/13273 [=====================================] - 0s 0us/step

Ler o arquivo csv usando pandas.

df = pd.read_csv(csv_file)
df.head()
df.dtypes
age           int64
sex           int64
cp            int64
trestbps      int64
chol          int64
fbs           int64
restecg       int64
thalach       int64
exang         int64
oldpeak     float64
slope         int64
ca            int64
thal         object
target        int64
dtype: object

Converta a coluna thal, que é um objeto no dataframe para um valor numérico discreto

df['thal'] = pd.Categorical(df['thal'])
df['thal'] = df.thal.cat.codes
df.head()

Carregar dados usando o tf.data.Dataset

Use tf.data.Dataset.from_tensor_slices para ler os valores de um dataframe do pandas.

Uma das vantagens do uso do tf.data.Dataset é que ele permite escrever pipelines de dados simples e altamente eficientes. Leia o loading data guide para obter mais informações.

target = df.pop('target')
dataset = tf.data.Dataset.from_tensor_slices((df.values, target.values))
for feat, targ in dataset.take(5):
  print ('Features: {}, Target: {}'.format(feat, targ))
Features: [ 63.    1.    1.  145.  233.    1.    2.  150.    0.    2.3   3.    0.

   2. ], Target: 0
Features: [ 67.    1.    4.  160.  286.    0.    2.  108.    1.    1.5   2.    3.
   3. ], Target: 1
Features: [ 67.    1.    4.  120.  229.    0.    2.  129.    1.    2.6   2.    2.
   4. ], Target: 0
Features: [ 37.    1.    3.  130.  250.    0.    0.  187.    0.    3.5   3.    0.
   3. ], Target: 0
Features: [ 41.    0.    2.  130.  204.    0.    2.  172.    0.    1.4   1.    0.
   3. ], Target: 0

Como um pd.Series implementa o protocolo __array__, ele pode ser usado de forma transparente em praticamente qualquer lugar que você usaria um np.array ou um tf.Tensor.

tf.constant(df['thal'])
<tf.Tensor: shape=(303,), dtype=int8, numpy=
array([2, 3, 4, 3, 3, 3, 3, 3, 4, 4, 2, 3, 2, 4, 4, 3, 4, 3, 3, 3, 3, 3,
       3, 4, 4, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 3, 4, 2, 4, 3, 4, 3, 4, 4,
       2, 3, 3, 4, 3, 3, 4, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 4,
       4, 2, 3, 3, 4, 3, 4, 3, 3, 4, 4, 3, 3, 4, 4, 3, 3, 3, 3, 4, 4, 4,
       3, 3, 4, 3, 4, 4, 3, 4, 3, 3, 3, 4, 3, 4, 4, 3, 3, 4, 4, 4, 4, 4,
       3, 3, 3, 3, 4, 3, 4, 3, 4, 4, 3, 3, 2, 4, 4, 2, 3, 3, 4, 4, 3, 4,
       3, 3, 4, 2, 4, 4, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4,
       4, 3, 3, 3, 4, 3, 4, 3, 4, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3,
       3, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 2,
       4, 4, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 2, 2, 4, 3, 4, 2, 4, 3,
       3, 4, 3, 3, 3, 3, 4, 3, 4, 3, 4, 2, 2, 4, 3, 4, 3, 2, 4, 3, 3, 2,
       4, 4, 4, 4, 3, 0, 3, 3, 3, 3, 1, 4, 3, 3, 3, 4, 3, 4, 3, 3, 3, 4,
       3, 3, 4, 4, 4, 4, 3, 3, 4, 3, 4, 3, 4, 4, 3, 4, 4, 3, 4, 4, 3, 3,
       3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 3, 2, 4, 4, 4, 4], dtype=int8)>

Aleatório e lote do conjunto de dados.

train_dataset = dataset.shuffle(len(df)).batch(1)

Crirar e treinar um modelo

def get_compiled_model():
  model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(10, activation='relu'),
    tf.keras.layers.Dense(1)
  ])

  model.compile(optimizer='adam',
                loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
                metrics=['accuracy'])
  return model
model = get_compiled_model()
model.fit(train_dataset, epochs=15)
Epoch 1/15
WARNING:tensorflow:Layer dense is casting an input tensor from dtype float64 to the layer's dtype of float32, which is new behavior in TensorFlow 2.  The layer has dtype float32 because its dtype defaults to floatx.

If you intended to run this layer in float32, you can safely ignore this warning. If in doubt, this warning is likely only an issue if you are porting a TensorFlow 1.X model to TensorFlow 2.

To change all layers to have dtype float64 by default, call `tf.keras.backend.set_floatx('float64')`. To change just this layer, pass dtype='float64' to the layer constructor. If you are the author of this layer, you can disable autocasting by passing autocast=False to the base Layer constructor.
1/303 [..............................] - ETA: 0s - loss: 1.5467e-06 - accuracy: 1.0000
28/303 [=>............................] - ETA: 0s - loss: 4.3005 - accuracy: 0.6786
56/303 [====>.........................] - ETA: 0s - loss: 3.9851 - accuracy: 0.6964
83/303 [=======>......................] - ETA: 0s - loss: 2.9319 - accuracy: 0.7349
111/303 [=========>....................] - ETA: 0s - loss: 3.0377 - accuracy: 0.7477
139/303 [============>.................] - ETA: 0s - loss: 3.6195 - accuracy: 0.7122
168/303 [===============>..............] - ETA: 0s - loss: 3.7857 - accuracy: 0.7024
197/303 [==================>...........] - ETA: 0s - loss: 3.8022 - accuracy: 0.6954
225/303 [=====================>........] - ETA: 0s - loss: 3.8382 - accuracy: 0.6933
254/303 [========================>.....] - ETA: 0s - loss: 3.5854 - accuracy: 0.7008
284/303 [===========================>..] - ETA: 0s - loss: 3.3544 - accuracy: 0.7007
303/303 [==============================] - 1s 2ms/step - loss: 3.3850 - accuracy: 0.6964
Epoch 2/15

  1/303 [..............................] - ETA: 0s - loss: 1.9297e-07 - accuracy: 1.0000
31/303 [==>...........................] - ETA: 0s - loss: 1.1653 - accuracy: 0.8387
59/303 [====>.........................] - ETA: 0s - loss: 1.1033 - accuracy: 0.8475
87/303 [=======>......................] - ETA: 0s - loss: 2.0410 - accuracy: 0.7241
115/303 [==========>...................] - ETA: 0s - loss: 1.9506 - accuracy: 0.7130
143/303 [=============>................] - ETA: 0s - loss: 1.9830 - accuracy: 0.6993
170/303 [===============>..............] - ETA: 0s - loss: 1.8923 - accuracy: 0.6824
199/303 [==================>...........] - ETA: 0s - loss: 1.8589 - accuracy: 0.6784
227/303 [=====================>........] - ETA: 0s - loss: 1.8845 - accuracy: 0.6828
256/303 [========================>.....] - ETA: 0s - loss: 1.8698 - accuracy: 0.6836
285/303 [===========================>..] - ETA: 0s - loss: 1.8506 - accuracy: 0.6912
303/303 [==============================] - 1s 2ms/step - loss: 1.8797 - accuracy: 0.6931
Epoch 3/15

  1/303 [..............................] - ETA: 0s - loss: 2.9271e-05 - accuracy: 1.0000
29/303 [=>............................] - ETA: 0s - loss: 1.5278 - accuracy: 0.7931
57/303 [====>.........................] - ETA: 0s - loss: 1.3368 - accuracy: 0.7544
85/303 [=======>......................] - ETA: 0s - loss: 1.0804 - accuracy: 0.7882
113/303 [==========>...................] - ETA: 0s - loss: 1.2407 - accuracy: 0.7257
141/303 [============>.................] - ETA: 0s - loss: 1.1706 - accuracy: 0.7234
169/303 [===============>..............] - ETA: 0s - loss: 1.1700 - accuracy: 0.7337
198/303 [==================>...........] - ETA: 0s - loss: 1.4425 - accuracy: 0.6970
227/303 [=====================>........] - ETA: 0s - loss: 1.3728 - accuracy: 0.7048
256/303 [========================>.....] - ETA: 0s - loss: 1.3354 - accuracy: 0.7148
284/303 [===========================>..] - ETA: 0s - loss: 1.3429 - accuracy: 0.7077
303/303 [==============================] - 1s 2ms/step - loss: 1.3348 - accuracy: 0.7063
Epoch 4/15

  1/303 [..............................] - ETA: 0s - loss: 2.9582e-04 - accuracy: 1.0000
29/303 [=>............................] - ETA: 0s - loss: 1.4422 - accuracy: 0.7586
58/303 [====>.........................] - ETA: 0s - loss: 1.2606 - accuracy: 0.7241
87/303 [=======>......................] - ETA: 0s - loss: 0.9904 - accuracy: 0.8046
115/303 [==========>...................] - ETA: 0s - loss: 0.9850 - accuracy: 0.7652
142/303 [=============>................] - ETA: 0s - loss: 1.0972 - accuracy: 0.7394
170/303 [===============>..............] - ETA: 0s - loss: 1.1322 - accuracy: 0.7294
199/303 [==================>...........] - ETA: 0s - loss: 1.0999 - accuracy: 0.7286
228/303 [=====================>........] - ETA: 0s - loss: 1.1507 - accuracy: 0.7193
258/303 [========================>.....] - ETA: 0s - loss: 1.4657 - accuracy: 0.7093
288/303 [===========================>..] - ETA: 0s - loss: 1.5150 - accuracy: 0.6979
303/303 [==============================] - 1s 2ms/step - loss: 1.5040 - accuracy: 0.6997
Epoch 5/15

  1/303 [..............................] - ETA: 0s - loss: 0.0429 - accuracy: 1.0000
30/303 [=>............................] - ETA: 0s - loss: 0.7618 - accuracy: 0.7667
59/303 [====>.........................] - ETA: 0s - loss: 1.1391 - accuracy: 0.7288
89/303 [=======>......................] - ETA: 0s - loss: 0.9083 - accuracy: 0.7865
118/303 [==========>...................] - ETA: 0s - loss: 1.0129 - accuracy: 0.7458
147/303 [=============>................] - ETA: 0s - loss: 0.8929 - accuracy: 0.7755
177/303 [================>.............] - ETA: 0s - loss: 0.9130 - accuracy: 0.7740
207/303 [===================>..........] - ETA: 0s - loss: 0.8741 - accuracy: 0.7681
237/303 [======================>.......] - ETA: 0s - loss: 0.9470 - accuracy: 0.7595
266/303 [=========================>....] - ETA: 0s - loss: 0.9455 - accuracy: 0.7594
295/303 [============================>.] - ETA: 0s - loss: 0.9951 - accuracy: 0.7492
303/303 [==============================] - 1s 2ms/step - loss: 1.0072 - accuracy: 0.7393
Epoch 6/15

  1/303 [..............................] - ETA: 0s - loss: 1.7463 - accuracy: 0.0000e+00
29/303 [=>............................] - ETA: 0s - loss: 0.3252 - accuracy: 0.8966
58/303 [====>.........................] - ETA: 0s - loss: 0.4544 - accuracy: 0.8621
86/303 [=======>......................] - ETA: 0s - loss: 0.6967 - accuracy: 0.8372
113/303 [==========>...................] - ETA: 0s - loss: 0.8177 - accuracy: 0.7965
141/303 [============>.................] - ETA: 0s - loss: 0.8173 - accuracy: 0.8156
170/303 [===============>..............] - ETA: 0s - loss: 0.8435 - accuracy: 0.7941
199/303 [==================>...........] - ETA: 0s - loss: 0.7820 - accuracy: 0.8040
228/303 [=====================>........] - ETA: 0s - loss: 0.7886 - accuracy: 0.7851
256/303 [========================>.....] - ETA: 0s - loss: 0.8023 - accuracy: 0.7812
285/303 [===========================>..] - ETA: 0s - loss: 0.8057 - accuracy: 0.7930
303/303 [==============================] - 1s 2ms/step - loss: 0.8372 - accuracy: 0.7822
Epoch 7/15

  1/303 [..............................] - ETA: 0s - loss: 0.0242 - accuracy: 1.0000
30/303 [=>............................] - ETA: 0s - loss: 0.3259 - accuracy: 0.8000
59/303 [====>.........................] - ETA: 0s - loss: 0.5161 - accuracy: 0.7966
88/303 [=======>......................] - ETA: 0s - loss: 0.6284 - accuracy: 0.7955
116/303 [==========>...................] - ETA: 0s - loss: 0.7680 - accuracy: 0.7759
145/303 [=============>................] - ETA: 0s - loss: 0.8251 - accuracy: 0.7724
173/303 [================>.............] - ETA: 0s - loss: 0.7712 - accuracy: 0.7919
202/303 [===================>..........] - ETA: 0s - loss: 0.8133 - accuracy: 0.7723
231/303 [=====================>........] - ETA: 0s - loss: 0.7852 - accuracy: 0.7749
259/303 [========================>.....] - ETA: 0s - loss: 0.7722 - accuracy: 0.7876
288/303 [===========================>..] - ETA: 0s - loss: 0.7861 - accuracy: 0.7917
303/303 [==============================] - 1s 2ms/step - loss: 0.7832 - accuracy: 0.7888
Epoch 8/15

  1/303 [..............................] - ETA: 0s - loss: 0.0503 - accuracy: 1.0000
30/303 [=>............................] - ETA: 0s - loss: 0.6562 - accuracy: 0.8000
59/303 [====>.........................] - ETA: 0s - loss: 0.7946 - accuracy: 0.7627
87/303 [=======>......................] - ETA: 0s - loss: 0.8174 - accuracy: 0.7356
115/303 [==========>...................] - ETA: 0s - loss: 0.6488 - accuracy: 0.7826
144/303 [=============>................] - ETA: 0s - loss: 0.7156 - accuracy: 0.7708
173/303 [================>.............] - ETA: 0s - loss: 0.7453 - accuracy: 0.7803
202/303 [===================>..........] - ETA: 0s - loss: 0.7499 - accuracy: 0.7871
231/303 [=====================>........] - ETA: 0s - loss: 0.8227 - accuracy: 0.7706
260/303 [========================>.....] - ETA: 0s - loss: 0.7811 - accuracy: 0.7769
289/303 [===========================>..] - ETA: 0s - loss: 0.7514 - accuracy: 0.7855
303/303 [==============================] - 1s 2ms/step - loss: 0.7457 - accuracy: 0.7921
Epoch 9/15

  1/303 [..............................] - ETA: 0s - loss: 0.0027 - accuracy: 1.0000
31/303 [==>...........................] - ETA: 0s - loss: 0.4270 - accuracy: 0.8065
60/303 [====>.........................] - ETA: 0s - loss: 0.5072 - accuracy: 0.8000
89/303 [=======>......................] - ETA: 0s - loss: 0.4775 - accuracy: 0.8202
117/303 [==========>...................] - ETA: 0s - loss: 0.5128 - accuracy: 0.8205
145/303 [=============>................] - ETA: 0s - loss: 0.4948 - accuracy: 0.8069
173/303 [================>.............] - ETA: 0s - loss: 0.5143 - accuracy: 0.8150
201/303 [==================>...........] - ETA: 0s - loss: 0.5651 - accuracy: 0.8060
229/303 [=====================>........] - ETA: 0s - loss: 0.6011 - accuracy: 0.7948
257/303 [========================>.....] - ETA: 0s - loss: 0.6295 - accuracy: 0.7821
286/303 [===========================>..] - ETA: 0s - loss: 0.6303 - accuracy: 0.7867
303/303 [==============================] - 1s 2ms/step - loss: 0.6368 - accuracy: 0.7789
Epoch 10/15

  1/303 [..............................] - ETA: 0s - loss: 1.3689 - accuracy: 0.0000e+00
30/303 [=>............................] - ETA: 0s - loss: 0.3818 - accuracy: 0.8333
58/303 [====>.........................] - ETA: 0s - loss: 0.3681 - accuracy: 0.8621
86/303 [=======>......................] - ETA: 0s - loss: 0.5001 - accuracy: 0.8605
114/303 [==========>...................] - ETA: 0s - loss: 0.5399 - accuracy: 0.8509
142/303 [=============>................] - ETA: 0s - loss: 0.6280 - accuracy: 0.8169
170/303 [===============>..............] - ETA: 0s - loss: 0.5642 - accuracy: 0.8235
199/303 [==================>...........] - ETA: 0s - loss: 0.7110 - accuracy: 0.7990
228/303 [=====================>........] - ETA: 0s - loss: 0.6574 - accuracy: 0.8070
256/303 [========================>.....] - ETA: 0s - loss: 0.6571 - accuracy: 0.8008
284/303 [===========================>..] - ETA: 0s - loss: 0.6982 - accuracy: 0.7852
303/303 [==============================] - 1s 2ms/step - loss: 0.7353 - accuracy: 0.7756
Epoch 11/15

  1/303 [..............................] - ETA: 0s - loss: 4.1361e-04 - accuracy: 1.0000
29/303 [=>............................] - ETA: 0s - loss: 0.5946 - accuracy: 0.7586
57/303 [====>.........................] - ETA: 0s - loss: 0.7557 - accuracy: 0.7368
85/303 [=======>......................] - ETA: 0s - loss: 0.7498 - accuracy: 0.7882
114/303 [==========>...................] - ETA: 0s - loss: 0.6632 - accuracy: 0.7982
142/303 [=============>................] - ETA: 0s - loss: 0.6186 - accuracy: 0.8099
170/303 [===============>..............] - ETA: 0s - loss: 0.7424 - accuracy: 0.7941
198/303 [==================>...........] - ETA: 0s - loss: 0.7236 - accuracy: 0.8081
227/303 [=====================>........] - ETA: 0s - loss: 0.6910 - accuracy: 0.8194
255/303 [========================>.....] - ETA: 0s - loss: 0.6468 - accuracy: 0.8275
284/303 [===========================>..] - ETA: 0s - loss: 0.6279 - accuracy: 0.8275
303/303 [==============================] - 1s 2ms/step - loss: 0.6158 - accuracy: 0.8218
Epoch 12/15

  1/303 [..............................] - ETA: 0s - loss: 0.4278 - accuracy: 1.0000
29/303 [=>............................] - ETA: 0s - loss: 0.3258 - accuracy: 0.8621
57/303 [====>.........................] - ETA: 0s - loss: 0.3266 - accuracy: 0.8772
85/303 [=======>......................] - ETA: 0s - loss: 0.4070 - accuracy: 0.8118
114/303 [==========>...................] - ETA: 0s - loss: 0.4456 - accuracy: 0.8158
142/303 [=============>................] - ETA: 0s - loss: 0.4048 - accuracy: 0.8239
171/303 [===============>..............] - ETA: 0s - loss: 0.4036 - accuracy: 0.8304
199/303 [==================>...........] - ETA: 0s - loss: 0.4434 - accuracy: 0.8040
228/303 [=====================>........] - ETA: 0s - loss: 0.4917 - accuracy: 0.7982
255/303 [========================>.....] - ETA: 0s - loss: 0.5185 - accuracy: 0.7843
282/303 [==========================>...] - ETA: 0s - loss: 0.5422 - accuracy: 0.7837
303/303 [==============================] - 1s 2ms/step - loss: 0.5253 - accuracy: 0.7954
Epoch 13/15

  1/303 [..............................] - ETA: 0s - loss: 9.9377e-05 - accuracy: 1.0000
30/303 [=>............................] - ETA: 0s - loss: 0.4766 - accuracy: 0.9000
58/303 [====>.........................] - ETA: 0s - loss: 0.9561 - accuracy: 0.7931
86/303 [=======>......................] - ETA: 0s - loss: 0.8731 - accuracy: 0.7907
114/303 [==========>...................] - ETA: 0s - loss: 0.7311 - accuracy: 0.7807
142/303 [=============>................] - ETA: 0s - loss: 0.7363 - accuracy: 0.7676
171/303 [===============>..............] - ETA: 0s - loss: 0.8182 - accuracy: 0.7719
199/303 [==================>...........] - ETA: 0s - loss: 0.8295 - accuracy: 0.7638
227/303 [=====================>........] - ETA: 0s - loss: 0.8156 - accuracy: 0.7709
255/303 [========================>.....] - ETA: 0s - loss: 0.7813 - accuracy: 0.7804
284/303 [===========================>..] - ETA: 0s - loss: 0.7307 - accuracy: 0.7852
303/303 [==============================] - 1s 2ms/step - loss: 0.7066 - accuracy: 0.7921
Epoch 14/15

  1/303 [..............................] - ETA: 0s - loss: 0.3864 - accuracy: 1.0000
29/303 [=>............................] - ETA: 0s - loss: 0.4538 - accuracy: 0.8621
57/303 [====>.........................] - ETA: 0s - loss: 0.4616 - accuracy: 0.8421
85/303 [=======>......................] - ETA: 0s - loss: 0.5882 - accuracy: 0.8000
113/303 [==========>...................] - ETA: 0s - loss: 0.6923 - accuracy: 0.7965
141/303 [============>.................] - ETA: 0s - loss: 0.6154 - accuracy: 0.8227
169/303 [===============>..............] - ETA: 0s - loss: 0.5985 - accuracy: 0.8225
197/303 [==================>...........] - ETA: 0s - loss: 0.6117 - accuracy: 0.8122
225/303 [=====================>........] - ETA: 0s - loss: 0.5908 - accuracy: 0.8133
254/303 [========================>.....] - ETA: 0s - loss: 0.6254 - accuracy: 0.7992
283/303 [===========================>..] - ETA: 0s - loss: 0.6618 - accuracy: 0.7915
303/303 [==============================] - 1s 2ms/step - loss: 0.6731 - accuracy: 0.7921
Epoch 15/15

  1/303 [..............................] - ETA: 0s - loss: 2.9692 - accuracy: 0.0000e+00
30/303 [=>............................] - ETA: 0s - loss: 0.6236 - accuracy: 0.7667
58/303 [====>.........................] - ETA: 0s - loss: 0.6608 - accuracy: 0.7586
87/303 [=======>......................] - ETA: 0s - loss: 0.6714 - accuracy: 0.7816
116/303 [==========>...................] - ETA: 0s - loss: 0.5656 - accuracy: 0.8190
144/303 [=============>................] - ETA: 0s - loss: 0.8468 - accuracy: 0.7708
172/303 [================>.............] - ETA: 0s - loss: 0.9488 - accuracy: 0.7558
201/303 [==================>...........] - ETA: 0s - loss: 0.9018 - accuracy: 0.7562
230/303 [=====================>........] - ETA: 0s - loss: 0.8368 - accuracy: 0.7739
259/303 [========================>.....] - ETA: 0s - loss: 0.8284 - accuracy: 0.7568
288/303 [===========================>..] - ETA: 0s - loss: 0.7815 - accuracy: 0.7674
303/303 [==============================] - 1s 2ms/step - loss: 0.7600 - accuracy: 0.7756
<tensorflow.python.keras.callbacks.History at 0x7f3f5f32c710>

Alternativa para colunas de características

Passar um dicionário como entrada para um modelo é tão fácil quanto criar um dicionário correspondente de camadas tf.keras.layers.Input, aplicar qualquer pré-processamento e empilhá-los usando a API funcional. Você pode usar isso como uma alternativa para colunas de características.

inputs = {key: tf.keras.layers.Input(shape=(), name=key) for key in df.keys()}
x = tf.stack(list(inputs.values()), axis=-1)

x = tf.keras.layers.Dense(10, activation='relu')(x)
output = tf.keras.layers.Dense(1)(x)

model_func = tf.keras.Model(inputs=inputs, outputs=output)

model_func.compile(optimizer='adam',
                   loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
                   metrics=['accuracy'])

A maneira mais fácil de preservar a estrutura da coluna de um pd.DataFrame quando usado com tf.data é converter o pd.DataFrame em um dict e dividir esse dicionário.

dict_slices = tf.data.Dataset.from_tensor_slices((df.to_dict('list'), target.values)).batch(16)
for dict_slice in dict_slices.take(1):
  print (dict_slice)
({'age': <tf.Tensor: shape=(16,), dtype=int32, numpy=
array([63, 67, 67, 37, 41, 56, 62, 57, 63, 53, 57, 56, 56, 44, 52, 57],
      dtype=int32)>, 'sex': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1], dtype=int32)>, 'cp': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([1, 4, 4, 3, 2, 2, 4, 4, 4, 4, 4, 2, 3, 2, 3, 3], dtype=int32)>, 'trestbps': <tf.Tensor: shape=(16,), dtype=int32, numpy=
array([145, 160, 120, 130, 130, 120, 140, 120, 130, 140, 140, 140, 130,
       120, 172, 150], dtype=int32)>, 'chol': <tf.Tensor: shape=(16,), dtype=int32, numpy=
array([233, 286, 229, 250, 204, 236, 268, 354, 254, 203, 192, 294, 256,
       263, 199, 168], dtype=int32)>, 'fbs': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0], dtype=int32)>, 'restecg': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([2, 2, 2, 0, 2, 0, 2, 0, 2, 2, 0, 2, 2, 0, 0, 0], dtype=int32)>, 'thalach': <tf.Tensor: shape=(16,), dtype=int32, numpy=
array([150, 108, 129, 187, 172, 178, 160, 163, 147, 155, 148, 153, 142,
       173, 162, 174], dtype=int32)>, 'exang': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0], dtype=int32)>, 'oldpeak': <tf.Tensor: shape=(16,), dtype=float32, numpy=
array([2.3, 1.5, 2.6, 3.5, 1.4, 0.8, 3.6, 0.6, 1.4, 3.1, 0.4, 1.3, 0.6,

       0. , 0.5, 1.6], dtype=float32)>, 'slope': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([3, 2, 2, 3, 1, 1, 3, 1, 2, 3, 2, 2, 2, 1, 1, 1], dtype=int32)>, 'ca': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([0, 3, 2, 0, 0, 0, 2, 0, 1, 0, 0, 0, 1, 0, 0, 0], dtype=int32)>, 'thal': <tf.Tensor: shape=(16,), dtype=int32, numpy=array([2, 3, 4, 3, 3, 3, 3, 3, 4, 4, 2, 3, 2, 4, 4, 3], dtype=int32)>}, <tf.Tensor: shape=(16,), dtype=int64, numpy=array([0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0])>)
model_func.fit(dict_slices, epochs=15)
Epoch 1/15
1/19 [>.............................] - ETA: 0s - loss: 4.6000 - accuracy: 0.7500
19/19 [==============================] - 0s 2ms/step - loss: 2.8664 - accuracy: 0.6799
Epoch 2/15

 1/19 [>.............................] - ETA: 0s - loss: 1.7118 - accuracy: 0.5625
19/19 [==============================] - 0s 2ms/step - loss: 1.2796 - accuracy: 0.5842
Epoch 3/15

 1/19 [>.............................] - ETA: 0s - loss: 0.7722 - accuracy: 0.6250
19/19 [==============================] - 0s 2ms/step - loss: 0.8998 - accuracy: 0.6766
Epoch 4/15

 1/19 [>.............................] - ETA: 0s - loss: 0.6410 - accuracy: 0.6875
19/19 [==============================] - 0s 3ms/step - loss: 0.8758 - accuracy: 0.6931
Epoch 5/15

 1/19 [>.............................] - ETA: 0s - loss: 0.6018 - accuracy: 0.6875
19/19 [==============================] - 0s 2ms/step - loss: 0.8052 - accuracy: 0.6964
Epoch 6/15

 1/19 [>.............................] - ETA: 0s - loss: 0.6144 - accuracy: 0.6250
19/19 [==============================] - 0s 2ms/step - loss: 0.7569 - accuracy: 0.6898
Epoch 7/15

 1/19 [>.............................] - ETA: 0s - loss: 0.6143 - accuracy: 0.6250
19/19 [==============================] - 0s 2ms/step - loss: 0.7212 - accuracy: 0.6931
Epoch 8/15

 1/19 [>.............................] - ETA: 0s - loss: 0.6072 - accuracy: 0.6250
19/19 [==============================] - 0s 2ms/step - loss: 0.6975 - accuracy: 0.7063
Epoch 9/15

 1/19 [>.............................] - ETA: 0s - loss: 0.6011 - accuracy: 0.6250
19/19 [==============================] - 0s 2ms/step - loss: 0.6805 - accuracy: 0.6997
Epoch 10/15

 1/19 [>.............................] - ETA: 0s - loss: 0.5951 - accuracy: 0.6250
19/19 [==============================] - 0s 2ms/step - loss: 0.6660 - accuracy: 0.7030
Epoch 11/15

 1/19 [>.............................] - ETA: 0s - loss: 0.5914 - accuracy: 0.6250
19/19 [==============================] - 0s 2ms/step - loss: 0.6535 - accuracy: 0.7096
Epoch 12/15

 1/19 [>.............................] - ETA: 0s - loss: 0.5882 - accuracy: 0.6875
19/19 [==============================] - 0s 2ms/step - loss: 0.6415 - accuracy: 0.7096
Epoch 13/15

 1/19 [>.............................] - ETA: 0s - loss: 0.5809 - accuracy: 0.6875
19/19 [==============================] - 0s 2ms/step - loss: 0.6296 - accuracy: 0.7096
Epoch 14/15

 1/19 [>.............................] - ETA: 0s - loss: 0.5760 - accuracy: 0.6875
19/19 [==============================] - 0s 2ms/step - loss: 0.6207 - accuracy: 0.7129
Epoch 15/15

 1/19 [>.............................] - ETA: 0s - loss: 0.5698 - accuracy: 0.6875
19/19 [==============================] - 0s 2ms/step - loss: 0.6114 - accuracy: 0.7162
<tensorflow.python.keras.callbacks.History at 0x7f3f8d4789b0>