我为多类分类创建了一个模型,其中输出变量具有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
变量持有的值我要添加所需变量持有的值。我相信我收到的输出变量数量不正确,因为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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句