MLPClassifier阈值因子,用于消除与训练数据不匹配的测试样本



>我正在使用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.]clf.predict([[2., 2.], [-1., -2.]]).此函数的输出为array([1, 0])

正如我们所观察到的,测试数据 [2.,2.] 不在我们传递的训练数据集中。尽管如此,我们还是得到了最接近的匹配标签 1。

我试图找到的是,如果我提供的测试数据不在训练数据集中,我应该向用户打印一条消息,说明数据无效,而不是告诉他错误的标签为 1。

例如,在knn分类中,我有kneighbors函数,它告诉我最近的邻居与我以0到1等级提供的测试数据的距离。因此,通过将阈值保持在 0.6 或 0.7,我可以轻松消除与我的训练数据样本相距甚远的测试数据样本。

是否有任何这样的标准/阈值,我可以使用 MLPClassifier 或此处提到的任何一个增量分类器来限制我的测试样本(如果训练数据集中不存在),它们可以限制我的测试样本?

在评论中,您已经解释说您已经用单个类(脸部图片)训练了分类器。为了能够对它是否是你的脸进行分类,你也应该用负类(不是你的脸)来训练你的模型,这样模型就会学习可能有助于在不同人中识别你的脸的特征。

互联网上充斥着带有人脸的图片,因此您可以轻松地收集几千张这样的图片并正确训练您的分类器。

决策函数:https://datascience.stackexchange.com/a/28762/15884。它包含正值、0 值和负值。因此,将阈值设置为 0 以上可以消除异常值。

编辑:如果您使用的是partial_fit(),则必须再次检查阈值因子。高于 0 的阈值仅适用于 fit()。此外,MLPClassifier 没有 decision_function()。此答案适用于提供 decision_function() 的算法。

最新更新