【问题标题】:Confidence score for machine learning with SciKit Learn?使用 SciKit Learn 进行机器学习的信心得分?
【发布时间】:2020-10-26 10:32:14
【问题描述】:

我遵循了一个将 SciKit Learning 的机器学习应用于面部识别的示例。 https://scikit-learn.org/stable/auto_examples/applications/plot_face_recognition.html#sphx-glr-auto-examples-applications-plot-face-recognition-py

我已经能够成功地使示例适应我自己的数据。但是,我迷失了一点:

在准备好数据、训练模型之后,您最终会得到以下结果: Y_pred = clf.predict(X_test_pca)

这会产生一个预测向量,每个人脸一个。 我想不通的是如何获得任何与之对应的置信度测量。

分类方法是一种强制选择,因此传入的每个人脸都必须被分类为已知人脸之一,即使它甚至不接近。

如何获得每个人脸的数字,以反映结果与已知人脸的匹配程度?

【问题讨论】:

  • clf.predict_proba()?
  • "print(classification_report(y_test, y_pred, target_names=target_names)) print(confusion_matrix(y_test, y_pred, labels=range(n_classes)))" ???

标签: python machine-learning scikit-learn face-recognition


【解决方案1】:

您似乎正在寻找scikit-learn 估计器的.predict_proba() 方法。它返回可能结果的概率,而不是单个预测。

您所指的示例是使用SVC。正如它所说,这个函数有点特别:

模型需要在训练时计算概率信息:适合属性probability设置为True。

因此,如果您使用与示例中相同的模型,请使用以下命令对其进行实例化:

SVC(kernel='rbf', class_weight='balanced', probability=True)

并使用.predict_proba() 而不是.predict()

y_pred = clf.predict_proba(X_test_pca)

这将返回一个形状数组(n_samples, n_classes),即每个样本的每个类别的概率。例如,可以通过调用 y_pred[k] 来访问类 k 的概率。

【讨论】:

  • 非常感谢。我现在几乎可以正常工作了。我唯一剩下的问题是结果的大小比有意义的要小一些。我有 62 个班级,但我得到了 Nx60 结果,其中 N 是图像的数量。我检查了训练数据集中是否缺少 2 个类,但它们都不是空的。有什么建议可以减少班级的数量吗?我已经确认它们都是独一无二的。
  • 拟合模型后,检查SVC.classes_ 以查看估计器已识别出哪些标签。将结果与传递给估计器的最终数据集的类进行比较,看看是否能找到任何线索。如果您说的是对的,它将返回 60 个标签,您应该会看到缺少的内容。
猜你喜欢
  • 2020-12-10
  • 2017-08-22
  • 2019-04-16
  • 2013-06-17
  • 2019-02-08
  • 2016-06-18
  • 2020-04-17
  • 1970-01-01
  • 2015-02-24
相关资源
最近更新 更多