使用带有 RBM 和 MLP Sklearn 的管道

Posted

技术标签:

【中文标题】使用带有 RBM 和 MLP Sklearn 的管道【英文标题】:Using a pipeline with RBM and MLP Sklearn 【发布时间】:2018-01-10 09:52:37 【问题描述】:

我正在尝试使用带有RBMMLPclassifier 的管道,我的输入数据将首先在 rbm 上传递,将减少维度(从 513 个特征到 100 个特征(节点)),我设法编写了代码,它似乎是正确的,但最后我得到了这个错误

UndefinedMetricWarning:精度和 F 分数定义不明确,并且 在没有预测样本的标签中设置为 0.0。 '精确', 'predicted', 平均, warn_for)

  precision    recall  f1-score   support

      0       0.00      0.00      0.00        25
      1       0.00      0.00      0.00        28
      2       0.00      0.00      0.00        28
      3       0.00      0.00      0.00        34
      4       0.00      0.00      0.00        25

avg / total       0.00      0.00      0.00       140

这是我的代码

X_train, X_test, Y_train, Y_test = train_test_split(X, 
Y,test_size=0.2,random_state=0)

mlp = MLPClassifier(hidden_layer_sizes=100,activation="tanh",max_iter=200)
rbm = BernoulliRBM(random_state=0, verbose=True)

classifier = Pipeline(steps=[('rbm', rbm), ('mlpclassifier', mlp)])

rbm.learning_rate = 0.06
rbm.n_iter = 20
rbm.n_components = 100

classifier.fit(X_train, Y_train)

print("MLP using RBM features:\n%s\n" % (metrics.classification_report(Y_test,
                                             classifier.predict(X_test))))

【问题讨论】:

这不是错误。只是一个警告,对于特定的类,没有预测到样本,这会导致精度或召回计算被零除。如果可能,请添加数据,以便我们检查实际发生的情况。 【参考方案1】:

感谢您的回答 Kumar,我尝试从测试集中抽取一个样本,并做出预测

print('the real label', Y_train[0])
print('the prediction', classifier.predict(X_train[0].reshape(1,-1)))

这就是我得到的输出

the real label [1 0 0 0 0]
the prediction [[0 0 0 0 0]]

在我看来分类器(管道)没有经过训练!

【讨论】:

在预测测试数据之前,你有没有打电话给classifier.fit(X_train, Y_train)

以上是关于使用带有 RBM 和 MLP Sklearn 的管道的主要内容,如果未能解决你的问题,请参考以下文章

使用 sklearn MLP.predict_proba() 函数时找出类的标签

无法从 sklearn MLP 分类器中获得良好的准确性

如何确定 sklearn 中 MLP 分类器的“损失函数”?

sklearn 的 MLP predict_proba 函数在内部是如何工作的?

sklearn MLP(多层感知机Multi-layer Perceptron)模型使用RandomSearchCV获取最优参数及可视化

大白话5分钟带你走进人工智能-第35节神经网络之sklearn中的MLP实战