如何修复ValueError:分类指标无法处理多类和多标签指示器目标混合的模型?

4
我已经创建了一个多类分类的模型,其中输出变量有6个类别。尝试获取准确度分数时出现错误。我尝试了其他SO答案,但是这些答案并没有帮助到我。 代码
#Converting Target Variable to Numeric
lang = {'US':1, 'UK':2, 'GE':3, 'IT':4, 'FR':5, 'ES':6} 
df.language = [lang[item] for item in df.language] 

#Creating Input Features and Target Variables
X= df.iloc[:,1:13]
y= df.iloc[:,0]

#Standardizing the Input Features
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X = scaler.fit_transform(X)

#Train Test Split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

#Model
model = Sequential()

model.add(Dense(12, activation='relu', kernel_initializer='random_normal', input_dim=12))
model.add(Dense(10, activation='relu', kernel_initializer='random_normal'))
model.add(Dense(8, activation='relu', kernel_initializer='random_normal'))

#Output Layer
model.add(Dense(7, activation = 'softmax', kernel_initializer='random_normal'))

#Compiling the neural network
model.compile(optimizer ='adam',loss='sparse_categorical_crossentropy', metrics =['accuracy'])

#Fitting the data to the training dataset
model.fit(X_train,y_train, batch_size=5, epochs=100)

#Make predictions
pred_train = model.predict(X_train)
pred_test = model.predict(X_test)  
   
print('Train Accuracy = ',accuracy_score(y_train,pred_train.round()))
print('Test Accuracy = ',accuracy_score(y_test,pred_test.round()))

今日免费次数已满, 请开通会员/明日再来
ValueError: Classification metrics can't handle a mix of multiclass and multilabel-indicator targets

变量所持有的值 我正在添加所需变量所持有的值。我认为我接收到的输出变量数量不正确,因为一个值有多个输出。

y_train

101    4
250    1
130    2
277    1
157    2
      ..
18     6
47     5
180    1
131    2
104    4

pred_train

array([[0.13525778, 0.15400752, 0.14303789, ..., 0.14364597, 0.14196989,
        0.14313765],
       ...,
       [0.13389133, 0.15622397, 0.14272076, ..., 0.14345258, 0.142379  ,
        0.14322434]], dtype=float32)

y_test

57     5
283    1
162    2
237    1
107    4
      ..
182    1
173    1
75     3
251    1
55     5

pred_test

array([[0.13440262, 0.15538406, 0.14284912, 0.13841757, 0.14352694,
        0.14221355, 0.14320615],
       .....,
       [0.13503768, 0.1543666 , 0.14298101, 0.13881107, 0.14361957,
        0.14203095, 0.14315312]], dtype=float32)

y_trainpred_trainy_testpred_test的值是什么? - B200011011
@B200011011 我已经添加了问题中的值,请查看。 - Ishan Dutta
尝试使用 jaccard_score。此外,您不能使用已训练的数据进行预测,因此 pred_train 没有用处。 - Omar
@ Omar,如果我不能使用训练数据进行预测,那么我如何比较模型在训练和测试数据上的准确性呢? - Ishan Dutta
@IshanDutta 这就是为什么你需要测试数据。也就是说:它不能学习“1是苹果”,然后预测1。它知道1的结果。你只会使你的结果模糊!测试数据是新的,所以你可以通过这些数据来测试其准确性。 - Omar
1个回答

2

predict 函数返回每个类别样本属于该类别的概率,但 accuracy_score 函数需要类别标签。您需要从预测结果中获取类别标签。使用

accuracy_score(y, np.argmax(pred_train, axis=1))

np.argmax 返回具有最高概率的类别的标签,由于您对一批数据进行了预测而不是单个样本,因此您将需要使用 axis=1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接