sklearn KNeighborsClassifier 如何计算类概率?

数据挖掘 scikit-学习 k-nn
2021-10-03 03:58:54

有一种预测类别概率的KNeighborsClassifier方法。但是,我找不到任何描述如何计算这些概率的文档。

这是一个返回类概率的玩具示例:

from sklearn.neighbors import KNeighborsClassifier
import numpy as np
N = 100
np.random.seed(1)
X = np.random.random((N,2))
Y = np.random.randint(2, size=N)
model = KNeighborsClassifier(5, weights='distance')
model.fit(X, Y)
print(model.predict_proba([[0.5, 0.5]]))
#>>> [[0.55486525 0.44513475]]
1个回答

类概率是 k-最近类指标的归一化加权平均值,由反距离加权。

例如:假设我们有 6 个类,与我们的测试输入最近的 5 个示例具有类标签“F”、“B”、“D”、“A”和“B”,距离分别为 2、3、4,分别为 5 和 6。

然后可以通过以下方式计算未归一化的类概率:

(1/2) * [0, 0, 0, 0, 0, 1] + (1/3) * [0, 1, 0, 0, 0, 0] + 
(1/4) * [0, 0, 0, 1, 0, 0] + (1/5) * [1, 0, 0, 0, 0, 0] + 
(1/6) * [0, 1, 0, 0, 0, 0] =

[1/5 ,1/2, 0, 1/4, 0, 1/2]

归一化后,我们得到:

[0.13793103, 0.34482758, 0.0, 0.17241379, 0.0, 0.34482758]

如果您选择weights='uniform',那么它会变成一个简单的平均值,可以通过将每个指标乘以(1/k)并求和来计算,而无需额外的标准化。