import pandas as pd
from keras.models import Sequential
from keras.layers import Dense, Dropout
from keras.utils import np_utils
import numpy as np
import keras
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV#Montar o drive:
from google.colab import drive
drive.mount('/content/drive')Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount("/content/drive", force_remount=True).
#arquivo = "/content/drive/MyDrive/Mestrado/Mestrado_Otacílio_Raphael/DataSetDGA/DataSet_DGA_(Rev1)T1.xlsx"
arquivo = "/content/drive/MyDrive/Mestrado/Mestrado_Otacílio_Raphael/DataSetDGA/DataSetDGA(Rev1)T1_S.Outiliers.xlsx"DataSet = pd.read_excel(arquivo) # Sintaxe para nomear DataSet.
DataSet.head()| Unnamed: 0 | H2 | CH4 | C2H4 | C2H6 | C2H2 | NTE | NF | Rótulo | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 21.00 | 63.0 | 4.0 | 87.0 | 1.0 | 0 | 0 | NO |
| 1 | 1 | 0.01 | 61.0 | 6.0 | 81.0 | 1.0 | 0 | 0 | NO |
| 2 | 2 | 0.01 | 58.0 | 5.0 | 77.0 | 1.0 | 0 | 0 | NO |
| 3 | 3 | 0.01 | 56.0 | 6.0 | 73.0 | 1.0 | 0 | 0 | NO |
| 4 | 4 | 0.01 | 58.0 | 5.0 | 75.0 | 1.0 | 0 | 0 | NO |
gases = ['H2', 'CH4', 'C2H4', 'C2H6', 'C2H2']
X = DataSet[gases].valuesclasse = DataSet['NTE'].valuesclasse_dummy = np_utils.to_categorical(classe)Xl = np.log(X)
#Xln = np.log(X)# Normalizar DataSet:
from sklearn.preprocessing import StandardScaler
previsores = StandardScaler().fit_transform(Xl)
print('Média antes:',np.mean(X))
print('Média depois:',np.mean(previsores))
print('Variância antes:',np.std(X))
print('Variância depois:',np.std(previsores))
np.isnan(previsores)Média antes: 138.30720459081837
Média depois: -6.52394527843605e-17
Variância antes: 1617.3875441693656
Variância depois: 0.9999999999999999
array([[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False],
...,
[False, False, False, False, False],
[False, False, False, False, False],
[False, False, False, False, False]])
from sklearn.model_selection import train_test_split
previsores_treinamento, previsores_teste, classe_treinamento, classe_teste = train_test_split(previsores, classe_dummy, test_size=0.25, random_state=25)Atribuição numérica aos dados:
Classe Normal = 0;
Falha Térmica = 1;
Falha elétrica = 2.
from keras import initializers
classificador = Sequential()
classificador.add(Dense(units = 12, activation = 'selu', kernel_initializer = 'normal', input_dim = 5))
classificador.add(Dense(units = 12, activation = 'selu', kernel_initializer = 'normal'))
classificador.add(Dense(units = 8, activation = 'selu', kernel_initializer = 'normal'))
classificador.add(Dense(units = 6, activation = 'selu', kernel_initializer = 'normal'))
classificador.add(Dense(units = 3, activation = 'softmax'))
otimizador = keras.optimizers.Adam(lr=0.01, decay=0.0001, clipvalue=0.5)
classificador.compile(optimizer = otimizador, loss = 'categorical_crossentropy',
metrics = ['categorical_accuracy'])
classificador.fit(previsores_treinamento, classe_treinamento, batch_size = 10,
epochs = 100)/usr/local/lib/python3.10/dist-packages/keras/optimizers/legacy/adam.py:117: UserWarning: The `lr` argument is deprecated, use `learning_rate` instead.
super().__init__(name, **kwargs)
Epoch 1/100
151/151 [==============================] - 1s 2ms/step - loss: 0.5196 - categorical_accuracy: 0.7951
Epoch 2/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2943 - categorical_accuracy: 0.8869
Epoch 3/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2745 - categorical_accuracy: 0.8989
Epoch 4/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2667 - categorical_accuracy: 0.9029
Epoch 5/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2631 - categorical_accuracy: 0.9035
Epoch 6/100
151/151 [==============================] - 0s 3ms/step - loss: 0.2437 - categorical_accuracy: 0.9175
Epoch 7/100
151/151 [==============================] - 0s 3ms/step - loss: 0.2425 - categorical_accuracy: 0.9022
Epoch 8/100
151/151 [==============================] - 0s 3ms/step - loss: 0.2333 - categorical_accuracy: 0.9155
Epoch 9/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2427 - categorical_accuracy: 0.9095
Epoch 10/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2336 - categorical_accuracy: 0.9088
Epoch 11/100
151/151 [==============================] - 0s 3ms/step - loss: 0.2186 - categorical_accuracy: 0.9222
Epoch 12/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2387 - categorical_accuracy: 0.9108
Epoch 13/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2293 - categorical_accuracy: 0.9122
Epoch 14/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2227 - categorical_accuracy: 0.9188
Epoch 15/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2269 - categorical_accuracy: 0.9122
Epoch 16/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2271 - categorical_accuracy: 0.9235
Epoch 17/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2152 - categorical_accuracy: 0.9122
Epoch 18/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2270 - categorical_accuracy: 0.9122
Epoch 19/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2170 - categorical_accuracy: 0.9088
Epoch 20/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2033 - categorical_accuracy: 0.9208
Epoch 21/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2080 - categorical_accuracy: 0.9202
Epoch 22/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1889 - categorical_accuracy: 0.9255
Epoch 23/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2071 - categorical_accuracy: 0.9242
Epoch 24/100
151/151 [==============================] - 0s 2ms/step - loss: 0.2002 - categorical_accuracy: 0.9228
Epoch 25/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1815 - categorical_accuracy: 0.9348
Epoch 26/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1838 - categorical_accuracy: 0.9341
Epoch 27/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1850 - categorical_accuracy: 0.9275
Epoch 28/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1788 - categorical_accuracy: 0.9341
Epoch 29/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1835 - categorical_accuracy: 0.9295
Epoch 30/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1763 - categorical_accuracy: 0.9355
Epoch 31/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1673 - categorical_accuracy: 0.9335
Epoch 32/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1649 - categorical_accuracy: 0.9428
Epoch 33/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1690 - categorical_accuracy: 0.9301
Epoch 34/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1702 - categorical_accuracy: 0.9361
Epoch 35/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1544 - categorical_accuracy: 0.9474
Epoch 36/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1595 - categorical_accuracy: 0.9421
Epoch 37/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1605 - categorical_accuracy: 0.9454
Epoch 38/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1578 - categorical_accuracy: 0.9381
Epoch 39/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1549 - categorical_accuracy: 0.9448
Epoch 40/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1466 - categorical_accuracy: 0.9468
Epoch 41/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1654 - categorical_accuracy: 0.9368
Epoch 42/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1573 - categorical_accuracy: 0.9434
Epoch 43/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1502 - categorical_accuracy: 0.9448
Epoch 44/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1575 - categorical_accuracy: 0.9434
Epoch 45/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1434 - categorical_accuracy: 0.9481
Epoch 46/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1517 - categorical_accuracy: 0.9395
Epoch 47/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1584 - categorical_accuracy: 0.9415
Epoch 48/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1397 - categorical_accuracy: 0.9514
Epoch 49/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1525 - categorical_accuracy: 0.9468
Epoch 50/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1619 - categorical_accuracy: 0.9428
Epoch 51/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1412 - categorical_accuracy: 0.9468
Epoch 52/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1418 - categorical_accuracy: 0.9454
Epoch 53/100
151/151 [==============================] - 0s 3ms/step - loss: 0.1398 - categorical_accuracy: 0.9494
Epoch 54/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1387 - categorical_accuracy: 0.9501
Epoch 55/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1420 - categorical_accuracy: 0.9468
Epoch 56/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1447 - categorical_accuracy: 0.9461
Epoch 57/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1382 - categorical_accuracy: 0.9521
Epoch 58/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1477 - categorical_accuracy: 0.9434
Epoch 59/100
151/151 [==============================] - 0s 3ms/step - loss: 0.1405 - categorical_accuracy: 0.9481
Epoch 60/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1402 - categorical_accuracy: 0.9454
Epoch 61/100
151/151 [==============================] - 0s 3ms/step - loss: 0.1324 - categorical_accuracy: 0.9521
Epoch 62/100
151/151 [==============================] - 0s 3ms/step - loss: 0.1347 - categorical_accuracy: 0.9521
Epoch 63/100
151/151 [==============================] - 0s 3ms/step - loss: 0.1296 - categorical_accuracy: 0.9534
Epoch 64/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1427 - categorical_accuracy: 0.9448
Epoch 65/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1337 - categorical_accuracy: 0.9474
Epoch 66/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1377 - categorical_accuracy: 0.9514
Epoch 67/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1303 - categorical_accuracy: 0.9541
Epoch 68/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1316 - categorical_accuracy: 0.9488
Epoch 69/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1257 - categorical_accuracy: 0.9521
Epoch 70/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1157 - categorical_accuracy: 0.9607
Epoch 71/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1280 - categorical_accuracy: 0.9528
Epoch 72/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1270 - categorical_accuracy: 0.9468
Epoch 73/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1247 - categorical_accuracy: 0.9554
Epoch 74/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1192 - categorical_accuracy: 0.9568
Epoch 75/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1242 - categorical_accuracy: 0.9541
Epoch 76/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1180 - categorical_accuracy: 0.9561
Epoch 77/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1357 - categorical_accuracy: 0.9494
Epoch 78/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1155 - categorical_accuracy: 0.9541
Epoch 79/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1261 - categorical_accuracy: 0.9514
Epoch 80/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1287 - categorical_accuracy: 0.9474
Epoch 81/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1142 - categorical_accuracy: 0.9607
Epoch 82/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1165 - categorical_accuracy: 0.9581
Epoch 83/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1171 - categorical_accuracy: 0.9574
Epoch 84/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1097 - categorical_accuracy: 0.9581
Epoch 85/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1117 - categorical_accuracy: 0.9607
Epoch 86/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1109 - categorical_accuracy: 0.9601
Epoch 87/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1196 - categorical_accuracy: 0.9574
Epoch 88/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1108 - categorical_accuracy: 0.9614
Epoch 89/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1143 - categorical_accuracy: 0.9627
Epoch 90/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1129 - categorical_accuracy: 0.9601
Epoch 91/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1069 - categorical_accuracy: 0.9607
Epoch 92/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1089 - categorical_accuracy: 0.9621
Epoch 93/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1058 - categorical_accuracy: 0.9587
Epoch 94/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1189 - categorical_accuracy: 0.9581
Epoch 95/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1089 - categorical_accuracy: 0.9594
Epoch 96/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1087 - categorical_accuracy: 0.9601
Epoch 97/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1170 - categorical_accuracy: 0.9568
Epoch 98/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1162 - categorical_accuracy: 0.9601
Epoch 99/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1027 - categorical_accuracy: 0.9647
Epoch 100/100
151/151 [==============================] - 0s 2ms/step - loss: 0.1148 - categorical_accuracy: 0.9548
<keras.callbacks.History at 0x7f7824ac7190>
resultado = classificador.evaluate(previsores_teste, classe_teste)
16/16 [==============================] - 0s 2ms/step - loss: 0.1944 - categorical_accuracy: 0.9481
previsoes = classificador.predict(previsores_teste)
previsoes = (previsoes > 0.5)16/16 [==============================] - 0s 1ms/step
import numpy as np
classe_teste2 = [np.argmax(t) for t in classe_teste]
previsoes2 = [np.argmax(t) for t in previsoes]
from sklearn.metrics import confusion_matrix
matriz = confusion_matrix(previsoes2, classe_teste2)matrizarray([[315, 6, 9],
[ 6, 98, 3],
[ 1, 1, 62]])
GridSearch com Validação Cruzada
def criarRede(optimizer, loos, kernel_initializer, activation, neurons):
classificador = Sequential()
classificador.add(Dense(units = neurons, activation = activation, kernel_initializer = kernel_initializer, input_dim = 5))
classificador.add(Dropout(0.2))
classificador.add(Dense(units = 12, activation = activation, kernel_initializer = kernel_initializer))
classificador.add(Dropout(0.2))
classificador.add(Dense(units = neurons, activation = activation, kernel_initializer = kernel_initializer))
classificador.add(Dropout(0.2))
classificador.add(Dense(units = 6, activation = activation, kernel_initializer = kernel_initializer))
classificador.add(Dropout(0.2))
classificador.add(Dense(units = 3, activation = 'softmax'))
#otimizador = keras.optimizers.Adam(lr=0.01, decay=0.0001, clipvalue=0.5)
classificador.compile(optimizer = optimizer, loss = loos,
metrics = ['categorical_accuracy'])
return classificadorclassificador = KerasClassifier(build_fn = criarRede)
parametros = {'batch_size': [10],
'epochs': [50, 100],
'optimizer': ['adam'],
'loos': ['categorical_crossentropy'],
'kernel_initializer': ['random_uniform', 'normal'],
'activation': ['relu', 'tanh', 'selu'],
'neurons': [12, 8]}
grid_search = GridSearchCV(estimator = classificador,
param_grid = parametros,
scoring = 'accuracy',
cv = 5)DeprecationWarning: KerasClassifier is deprecated, use Sci-Keras (https://github.com/adriangb/scikeras) instead. See https://www.adriangb.com/scikeras/stable/migration.html for help migrating.
classificador = KerasClassifier(build_fn = criarRede)
grid_search = grid_search.fit(previsores, classe)
melhores_parametros = grid_search.best_params_melhores_parametros{'activation': 'selu',
'batch_size': 10,
'epochs': 100,
'kernel_initializer': 'normal',
'loos': 'categorical_crossentropy',
'neurons': 12,
'optimizer': 'adam'}
melhor_precisao = grid_search.best_score_melhor_precisao0.7384999999999999
#classificador = KerasClassifier(build_fn = criarRede, epochs = 100, batch_size = 10)#resultados = cross_val_score(estimator = classificador, X = previsores, y = classe, cv = 10, scoring = 'accuracy')#media = resultados.mean()
#media# quanto maior o desvio - maior será o overfintting
#desvio = resultados.std()
#desvio