神经网络只从二元分类中预测一个类别

3
我的任务是学习工厂中的次品。也就是说,我试图检测次品或良品。然而,在这个问题中存在一个类别占据了其他类别(其中一个类别有99.7%的数据);因为次品非常罕见。训练准确率为0.9971,验证准确率为0.9970,听起来很惊人。 但问题是,该模型只预测所有物品都是0类,即良品。这意味着它无法对任何次品进行分类。 我该如何解决这个问题呢?我已经查看了其他问题并尝试过,但我仍然面临这种情况。总数据点数为122400行和5个特征。 最后,我的测试集混淆矩阵如下:
array([[30508,     0],
       [   92,     0]], dtype=int64)

这段代码写得很糟糕。

我的代码如下:

le = LabelEncoder()
y = le.fit_transform(y)



ohe = OneHotEncoder(sparse=False)
y = y.reshape(-1,1)
y = ohe.fit_transform(y)


scaler = StandardScaler()
x = scaler.fit_transform(x)


x_train, x_test, y_train, y_test = train_test_split(x,y,test_size = 0.25, random_state = 777) 




#DNN Modelling


epochs = 15
batch_size =128
Learning_rate_optimizer = 0.001



model = Sequential() 

model.add(Dense(5, 
                kernel_initializer='glorot_uniform',
                activation='relu', 
                input_shape=(5,)))  

model.add(Dense(5,
                kernel_initializer='glorot_uniform', 
                activation='relu'))   
model.add(Dense(8,
                kernel_initializer='glorot_uniform', 
                activation='relu'))

model.add(Dense(2,
                kernel_initializer='glorot_uniform', 
                activation='softmax')) 



model.compile(loss='binary_crossentropy',
              optimizer=Adam(lr = Learning_rate_optimizer), 
              metrics=['accuracy']) 


history = model.fit(x_train, y_train,
                    batch_size=batch_size, 
                    epochs=epochs,  
                    verbose=1, 
                    validation_data=(x_test, y_test))



y_pred = model.predict(x_test)

confusion_matrix(y_test.argmax(axis=1), y_pred.argmax(axis=1)) 

谢谢您


2
你的数据不平衡。尝试在model.fit中使用类权重并检查结果。 - mehrdadep
2个回答

4

2
最好的尝试是首先取两个类别的数据几乎相等的部分,将它们拆分为训练-测试-验证集,对整个数据集进行分类器的训练和全面的测试。您还可以尝试使用数据增强技术来获得更多的数据。不断迭代,甚至尝试改变损失函数以适应您的条件。

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