如何解决如何修复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 举报,一经查实,本站将立刻删除。