我已经按照一个使用SciKit Learn进行人脸识别的例子进行了操作。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)
这会生成一个预测向量,每张脸一个。我无法弄清楚如何获得与此对应的任何信心测量值。
分类方法是一种强制选择,因此每张输入的脸都必须被分类为已知脸中的一个,即使它实际上并不接近。
如何获得一个数字来反映每张脸的结果与已知脸的匹配程度?
回答:
看起来你在寻找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
的概率。