<jupyter_start><jupyter_text>------ Predição de diabetesEste notebook implementa uma rede neural para predizer se um paciente tem diabetes ou não com base em certas medidas diagnósticas incluídas no conjunto de dados.O conjunto de dados utilizado descreve os dados do prontuário médico do paciente dos [índios Pima](https://pt.wikipedia.org/wiki/Pima) e se eles começaram a desenvolver diabetes em cinco anos.Trata-se de um problema de classificação binária (início do diabetes como 1 ou não como 0). Todas as variáveis ​​de entrada que descrevem cada paciente são numéricas.------  Conjunto de dados1. Número de instâncias: 7682. Número de atributos: 8 (mais classe target)3. Atributos: (todos com valor numérico)   1. Número de vezes que engravidou (*Pregnancies*)   2. Concentração de glicose plasmática a 2 horas em um teste de tolerância à glicose oral (*Glucose*)   3. Pressão arterial diastólica (mm Hg) (*BloodPressure*)   4. Espessura da dobra da pele do tríceps (mm) (*SkinThickness*)   5. Insulina sérica de 2 horas (mu U / ml) (*Insulin*)   6. Índice de massa corporal (peso em kg / (altura em m) ^ 2) (*BMI*)   7. Função de pedigree de diabetes (*DiabetesPedigreeFunction*)   8. Idade (anos) (*Age*)   4. Variável target (classe): 0 ou 1 (valor de classe 1 é interpretado como "teste positivo para diabetes")   Classe Valor Número de instâncias   - 500 => 0   - 268 => 1   Leitura dos dadosVamos começar importando o arquivo CSV bruto usando o Pandas.<jupyter_code>import pandas as pd

# lê arquivo de dados, atribue NaN para dados faltantes e rótulos em cada coluna
diabetes = pd.read_csv('diabetes.csv', na_values=['?'])
# imprime as 5 primeiras linha dos dados montados
diabetes.head()<jupyter_output><empty_output><jupyter_text>Separa os atributos das classesExtrai os atributos e as classes (rótulos) colocando-os em duas variáveis separadas (na forma que o Keras espera).<jupyter_code>X = diabetes.drop('Outcome', axis=1).values
y = diabetes['Outcome'].values
print(X.shape)
print(y.shape)<jupyter_output>(768, 8)
(768,)<jupyter_text>Criação do modelo de rede neural<jupyter_code>from keras.models import Sequential
from keras.layers import Dense

model = Sequential()
# 1a. camada oculta com 20 neurônios (definição das entradas)
model.add(Dense(20, input_dim=X.shape[1], kernel_initializer = 'he_uniform', activation='relu'))
# 2a. camada oculta com 10 neurônios
model.add(Dense(10, kernel_initializer = 'he_uniform', activation='relu'))
# camada de saída com um neurônio
model.add(Dense(1, activation='sigmoid'))
# sumário (resumo) do modelo
model.summary()<jupyter_output>Model: "sequential"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
dense (Dense)                (None, 20)                180       
_________________________________________________________________
dense_1 (Dense)              (None, 10)                210       
_________________________________________________________________
dense_2 (Dense)              (None, 1)                 11        
=================================================================
Total params: 401
Trainable params: 401
Non-trainable params: 0
_________________________________________________________________<jupyter_text>Compilação do modelo<jupyter_code>model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])<jupyter_output><empty_output><jupyter_text>Treinamento do modelo<jupyter_code>history = model.fit(X, y, batch_size = 8, epochs = 200)<jupyter_output>racy: 0.6091
Epoch 6/200
96/96 [==============================] - 0s 484us/step - loss: 0.6458 - accuracy: 0.6774
Epoch 7/200
96/96 [==============================] - 0s 495us/step - loss: 0.7030 - accuracy: 0.6163
Epoch 8/200
96/96 [==============================] - 0s 485us/step - loss: 0.6342 - accuracy: 0.6640
Epoch 9/200
96/96 [==============================] - 0s 463us/step - loss: 0.6463 - accuracy: 0.6620
Epoch 10/200
96/96 [==============================] - 0s 526us/step - loss: 0.6287 - accuracy: 0.6810
Epoch 11/200
96/96 [==============================] - 0s 484us/step - loss: 0.6523 - accuracy: 0.6703
Epoch 12/200
96/96 [==============================] - 0s 516us/step - loss: 0.5910 - accuracy: 0.6813
Epoch 13/200
96/96 [==============================] - 0s 474us/step - loss: 0.6150 - accuracy: 0.6595
Epoch 14/200
96/96 [==============================] - 0s 547us/step - loss: 0.6078 - accuracy: 0.6795
Epoch 15/200
96/96 [==============================] - 0s 484us/step - los[...]<jupyter_text>Avaliação do modelo<jupyter_code>precisao = model.evaluate(X, y, verbose=0)
print("Precisão = %.2f%%" % (precisao[1]*100))<jupyter_output>Precisão = 80.21%<jupyter_text>Salva o modelo<jupyter_code>model.save("model.h5")<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.18546571136131013, 'fraction_numerical': 0.06366427840327533, 'mean_word_length': 4.728018757327081, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 27, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '7', 'dir': 'jupyter-structured-clean-dedup', 'id': '378207', 'license': 'MIT', 'n_tokens_mistral': 1837, 'n_tokens_neox': 1570, 'n_words': 464, 'path': 'aprendizado-de-maquina-ii/NN_Indians_Diabetes_save.ipynb', 'repo_name': 'andredarcie/my-data-science-notebooks', 'size': '4885'}