微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我创建了一个用于多类分类的模型,其中输出变量有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,kernel_initializer='random_normal'))
model.add(Dense(8,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,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

变量保存的值 我正在添加所需变量保存的值。我相信我收到的输出变量数量不正确,因为1值有多个输出

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)

解决方法

predict返回样本属于每个类别的概率,但是accuracy_score需要类别标签。您必须从预测中获取类标签。使用

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。