Многоклассовая матрица путаницы Keras tool

#python #keras #scikit-learn #neural-network #multilabel-classification

#python #keras #scikit-learn #нейронная сеть #многоуровневая классификация

Вопрос:

Я создаю нейронную сеть, предназначенную для классификации между 10 различными соединениями, набор данных представляет собой что-то вроде:

 array([[400.  ,  23.  ,  52.38, ...,   1.  ,   0.  ,   0.  ],
   [400.  ,  21.63,  61.61, ...,   0.  ,   0.  ,   0.  ],
   [400.  ,  21.49,  61.95, ...,   0.  ,   0.  ,   0.  ],
   ...,
   [400.  ,  21.69,  41.98, ...,   0.  ,   0.  ,   0.  ],
   [400.  ,  22.48,  65.2 , ...,   0.  ,   0.  ,   0.  ],
   [400.  ,  22.02,  58.91, ...,   0.  ,   0.  ,   1.  ]])
  

где последние 10 чисел являются горячими, закодированными для соединений, которые я хочу идентифицировать. Это код, который я использую:

 dataset=numpy.asfarray(dataset[1:,0:],float)
x = dataset[0:,0:30]
y = dataset[0:,30:40]

x_train, x_test, y_train, y_test = train_test_split(    
x, y, test_size=0.20, random_state=1)   #siempre ha sido 42


standard=preprocessing.StandardScaler().fit(x_train)
x_train=standard.transform(x_train)
x_test=standard.transform(x_test)
dump(standard, 'std_modelo_400.bin', compress=True)

model = Sequential()
model.add(Dense(50, input_dim = x_test.shape[1], activation  =  'relu',kernel_regularizer=keras.regularizers.l1(0.01)))
model.add(Dense(30, input_dim = x_test.shape[1], activation  = 'relu',kernel_regularizer=keras.regularizers.l1(0.01)))
model.add(Dense(15, input_dim = x_test.shape[1], activation  = 'relu',kernel_regularizer=keras.regularizers.l1(0.01)))
model.add(Dense(10, activation='softmax',kernel_initializer='normal', bias_initializer=keras.initializers.Constant(value=0)))


model.summary()


model.compile(loss='categorical_crossentropy', 
          optimizer='adam',  
          metrics=['accuracy']
         )

history=model.fit(x_train,y_train,validation_data=(x_test,y_test),verbose=2,epochs=epochs,batch_size=batch_size)#callbacks=[monitor] , verbose=2
  

Я пытаюсь получить матрицу путаницы с помощью команды multilabel_confusion_matrix(y_test,pred) и получаю в таком виде:

 array([[[929681,    158],
    [   308, 102180]],

   [[930346,    407],
    [  6677,  94897]],

   [[930740,     38],
    [   477, 101072]],

   [[929287,   1522],
    [    69, 101449]],

   [[929703,   8843],
    [ 12217,  81564]],

   [[902624,    474],
    [  1565, 127664]],

   [[931152,   2236],
    [ 12140,  86799]],

   [[929085,     10],
    [     0, 103232]],

   [[911158,  22378],
    [  5362,  93429]],

   [[930412,    689],
    [   617, 100609]]], dtype=int64)
  

При использовании multilabel_confusion_matrix(y_test,pred,labels=["Comp1","Comp2","Comp3", "Comp4", "Comp5", "Comp6", "Comp7", "Comp8", "Comp9", "Comp10",]) я получаю сообщение об ошибке:

 elementwise comparison failed; returning scalar instead, but in the future will perform     elementwise comparison
mask amp;= (ar1 != a)
Traceback (most recent call last):

File "<ipython-input-18-00af06ffcbef>", line 1, in <module>
multilabel_confusion_matrix(y_test,pred,labels=["Comp1","Comp2","Comp3", "Comp4", "Comp5", "Comp6", "Comp7", "Comp8", "Comp9", "Comp10",])

File "C:UsersfmarinAnaconda3libsite-packagessklearnmetrics_classification.py", line 485, in multilabel_confusion_matrix
if np.max(labels) > np.max(present_labels):
  

Я понятия не имею, как это исправить. Я также хотел бы получить графическую версию матрицы путаницы, я использую scikit-learn toolbox.

Спасибо!