построение кривой Roc с использованием кераса - PullRequest
0 голосов
/ 30 августа 2018

У меня есть модель нейронной сети, и я использую KerasClassifier, а затем использую KFold для перекрестной проверки. Теперь у меня есть проблемы в построении кривой ROC. Я пробовал несколько кодов, но большинство из них дает мне ошибку с несколькими метками не интерпретируется. У меня есть следующий код, пока моя нейронная сеть не производит точность. Я буду благодарен, если кто-нибудь может помочь мне с более поздней частью кода.

import numpy as np
import pandas as pd
from keras.layers import Dense, Input
from keras.models import Model, Sequential
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils
from sklearn.model_selection import cross_val_score, KFold
from sklearn.preprocessing import LabelEncoder, MinMaxScaler,StandardScaler
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
seed = 7
np.random.seed(seed)
dataset = pd.read_csv('lukemia_2003.csv')
X_train = dataset.values[:,0:12600]
Y_train = dataset.values[:,12600]
scalar = MinMaxScaler()
scaled_data = scalar.fit_transform(X_train)
pca = PCA(n_components=10)
X_train_pca = pca.fit_transform(scaled_data)
encoder = LabelEncoder()
encoder.fit(Y_train)
encoded_Y = encoder.transform(Y_train)
dummy_Y = np_utils.to_categorical(encoded_Y)
hid_layer1 = 4
hid_layer2 = 4
output_layer = 4
def my_model():
    encoded = Sequential()
    encoded.add(Dense(hid_layer1, input_dim = 10, activation='tanh'))
    encoded.add(Dense(hid_layer2, activation='tanh'))
    encoded.add(Dense(output_layer, activation='softmax'))
    encoded.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    return encoded

result_mean_list = []
std_list = []
for i in range(30):
    estimator = KerasClassifier(build_fn=my_model, epochs=1500, batch_size=5, verbose=2)
    kfold = KFold(n_splits=10, shuffle=True, random_state=seed)
    results = cross_val_score(estimator, X_train_pca, dummy_Y, cv=kfold)
    result_mean_list.append(round(results.mean()*100,2))
    std_list.append(round(results.std()*100,2))


print ("Result mean: ", result_mean_list)
print ("Standard Deviation List: ", std_list)

Вот ссылка на набор данных. https://drive.google.com/open?id=15emI90-sPZMkHLuwRbNfTBli0h_S-PpM

1 Ответ

0 голосов
/ 31 августа 2018

Для вашего случая, поскольку ваша цель мультиклассовая, вы не можете использовать ROC для оценки классификатора. В случае, когда был двоичный классификатор, эта ссылка показывает, как нарисовать ROC-кривую.

...