【问题标题】:plot Roc curve using keras使用 keras 绘制 Roc 曲线
【发布时间】:2019-02-05 15:12:08
【问题描述】:

我有一个神经网络模型,我使用 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

【问题讨论】:

    标签: neural-network keras roc auc


    【解决方案1】:

    对于您的情况,由于您的目标是多类的,因此您不能使用 ROC 来评估分类器。在有二元分类器的情况下,link 展示了如何绘制 ROC 曲线。

    【讨论】:

    • 是的,我已经尝试过了,但是第一个 for 循环中提到的“y_score”变量显示错误。此链接中的二进制分类 ROC 曲线工作得非常好,但我有分类分类,其中 y_score 以“y_score 未定义”错误结束。
    • ROC 是显示二元分类器(两个类别)效率的图表。您的目标有 4 个类别,因此不能在此处使用。请澄清。
    • 是的,我只有这个数据集,它是多类分类。除此之外,我拥有的另一个数据集是我能够实现 ROC 的二进制分类。我被这个多类分类所困扰。有没有办法为多类绘制 ROC
    • ROC 对于多类没有意义。它仅用于二进制分类。(en.wikipedia.org/wiki/Receiver_operating_characteristic)。尝试使用混淆矩阵进行多类评估。
    • 虽然您的陈述听起来合乎逻辑,但人们也将 ROC 扩展为分类分类器。在这种情况下,您必须将希望其 ROC 的类作为“正”标签,并将其他类(两个/更多)作为“负”标签。就这样!
    猜你喜欢
    • 1970-01-01
    • 2020-08-15
    • 2018-12-26
    • 2016-02-04
    • 2019-02-27
    • 1970-01-01
    • 2021-03-03
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多