在 KNN (predict_proba) 中将概率设为 0 或 1



我使用了sklearn的KNN,并使用predict_proba预测了标签。我期待 0 到 1 范围内的值,因为它告诉特定类的概率。但我只得到0和1。

我也放了很大的k值,但没有收获。虽然我只有 1000 个样本,特征约为 200,而且矩阵基本上很稀疏。

谁能告诉我这里有什么解决方案?

sklearn.neighbors.KNeighborsClassifier(n_neighbors=**k**)

你只得到0和1的原因是n_neighbors = k参数。如果 k 值设置为 1,则得到 0 或 1。如果设置为 2,您将获得 0、0.5 或 1。如果设置为 3,则概率输出将为 0、0.333、0.666 或 1。

另请注意,概率值在 KNN 中基本上是没有意义的。该算法基于相似性和距离。

原因可能是训练集和测试集中缺乏各种数据。

如果样本的特征可能只存在于特定类中,并且其特征不存在于训练集中其他类的任何样本中,那么该样本将被预测为属于该类,其他类的概率为 100% (1) 和 0% (0)。否则;假设您有 2 个类并测试像 knn.predict_proba(sample) 这样的样本并期望一些结果,例如 [[0.47, 0.53]] 无论哪种方式,结果都将总共产生 1

如果是这种情况,请尝试生成您自己的测试样本,该样本具有来自训练集中多个类对象的特征。

来到这里寻找类似问题的潜在解决方案,并发布一个片段以防这对其他人有帮助。

我用了sklearn.neighbors.KNeighborsRegressor(n_neighbors=21, weights='distance').fit(x, y).但是,predict() 产生 {0., 1.} 作为唯一的输出,而 n_neighbors + 1 个输出是可能的。将权重设置为uniform predict() 会产生 22 个预期的唯一结果。

相关内容

  • 没有找到相关文章

最新更新