使用 MLP 分类器,类的精度结果为零



我有一个大约45000个样本的数据集,每个样本的二进制输出为01。但是在 sklearn 包中使用 MLP 分类器后,我得到了一个模型,无论输入是什么,它始终具有1的输出。类0的精度为零。我尝试更改模型的超参数,但输出是相同的。谁能提出克服它的方法?

precision    recall  f1-score   support                                                                                                                                                                                                                                                                                                        
0       0.00      0.00      0.00     19967                                                                                                                              
1       0.57      1.00      0.73     26688                                                                                                                                                                                                                                                                                            
avg / total       0.33      0.57      0.42     46655  

PS:我的代码

loc = './new_attributes_66.csv'
data = pd.read_csv(loc)
scaler = MinMaxScaler(feature_range = (-1,1))
scaler.fit(data)
data = scaler.transform(data)
print data

input = data[:,0:64]
output = data[:,65]
X_tr, X_tst, y_tr, y_tst = train_test_split(input, output, test_size=0.1)
clf = MLPClassifier(solver='sgd', alpha=1e-5, hidden_layer_sizes=(40,121), random_state=0, warm_start = True, tol = 0.0000001, early_stopping = False, learning_rate='adaptive',learning_rate_init = 0.1, max_iter=10000,shuffle=True,verbose=True)
clf.fit(X_tr,y_tr)
predicted = clf.predict(input)
#print "Accuracy using MLP classifier: "
print metrics.precision_score(output, predicted)
#print confusion_matrix(y_tst,predicted)
print metrics.classification_report(output,predicted)
#print clf.coefs_

链接到数据集 (csv) : https://app.box.com/s/vfqgool2u9ovdc9oyi9elq99aor6c6gk

更新: 我已经根据最新结果修改了我的代码和结果。我可以提高精度和召回率,因为:

precision    recall  f1-score   support
-1.0       0.53      0.10      0.17     19967
1.0       0.58      0.93      0.72     26688
avg / total       0.56      0.58      0.48     46655

精度为58.14 %.超参数可以通过哪些其他方式变化?

您的数据可能受到类不平衡问题的困扰。可能的情况是,带有标签1的样本数量远远超过带有标签0的样本数量。解决阶级失衡问题的方法有很多种:

  • 打击机器学习中的不平衡类
  • 在样本下和过度抽样下执行,以解决类不平衡问题
  • 分层拆分 - Sklearn
  • 击打

您还可以尝试查看不同的 alpha 值或不同形状的隐藏图层。也许您正在使用的当前配置无法正确学习。

嘿伙计们,在穆罕默德·卡西夫的建议下,我尝试了对数据AdaBoostClassifier并将数据缩放到-1,1,并获得了以下结果:

精度:0.682432189042

precision    recall  f1-score   support
-1.0       0.59      0.56      0.57     19967
1.0       0.68      0.71      0.70     26688
avg / total       0.64      0.65      0.64     46655

与我们能够在没有缩放的情况下获得MLPclassifier甚至AdaBoostclassifier57-58 %相比,这是一个很大的改进。任何有更好结果的人都可以自由地发表他们的想法:)

相关内容

  • 没有找到相关文章

最新更新