【发布时间】:2018-03-07 10:12:58
【问题描述】:
我正在使用 MLPClassifer 示例 scikit-learn
训练代码:
from sklearn.neural_network import MLPClassifier
X = [[0., 0.], [1., 1.]]
y = [0, 1]
clf = MLPClassifier(solver='lbfgs', alpha=1e-5,
hidden_layer_sizes=(5, 2), random_state=1)
clf.fit(X, y)
在预测步骤,我们使用测试数据 [2., 2.], [-1., -2.] in
clf.predict([[2., 2.], [-1., -2.]])。这个函数的输出是
array([1, 0])
正如我们所观察到的,测试数据 [2.,2.] 不在我们通过的训练数据集中。尽管如此,我们还是得到了最接近的匹配标签 1。
我想要找到的是,如果我提供的测试数据不在训练数据集中,我应该向用户打印一条消息,指出数据无效,而不是告诉他错误的标签为 1。
例如,在 knn 分类中,我有kneighbours function,它告诉我最近的邻居与我以 0 到 1 的比例提供的测试数据的距离。因此,我可以通过将阈值保持在 0.6 或 0.7 来轻松消除与我的训练数据样本相距甚远的测试数据样本。
有没有像这样的标准/阈值,我可以用 MLPClassifier 或Incremental Classifiers mentioned here 中的任何一个来限制我的测试样本(如果火车数据集中不存在)?
【问题讨论】:
-
那么,您想仅从训练集中预测样本吗?
-
抱歉,这些模型不是这样工作的。假设训练样本和测试样本基于某个未知分布独立同分布,而 MLP 只是学习这个分布。如果你把无效的输入塞进它的喉咙里,你不应该期望它知道,因为它假设你知道你在做什么。我建议您在将其传递给预测之前提前过滤掉这些无效值。
-
@user1 ,那么,你不能只检查样本是否在训练集中,如果是,就报告相应的 y 值吗?使用分类器有什么意义?
-
我有一个训练数据集,它对我的 10 个不同的人脸图像进行分类。当我预测我的新人脸图像时,它总是预测为我的。完美的。没问题,。但是,当我给我的同事提供未经训练的图像时,它仍然与我训练过的一张脸相匹配。我的脸不应该和我同事的脸匹配,即使相似度很小。
-
我用 knn 分类器尝试了这个,并且由于 kneighbour 函数,阈值因子在那里工作正常。但是,我想看看我如何与其他分类器一起预测这一点。我很想知道是否有任何距离公式或概率可以设置为过滤器。我试图用 predict_proba(test_data) 找到一些方法并得到值 [[0.34 0.002...]。我不确定这是否是我应该专注的事情。
标签: python machine-learning scikit-learn