我正在使用sklearn的KNN并使用predict_proba预测标签。我期待值在0到1的范围内,因为它告诉了特定类的概率。但我只得到0& 1。
我也放了很大的k值,但没有增益。虽然我只有1000个样本,其特征在200左右,而且矩阵很稀疏。
有人可以告诉我这里有什么解决方案吗?
答案 0 :(得分:0)
原因可能是训练和测试集中缺少各种数据。
如果样本的特征可能仅存在于特定类别中,而其特征在训练集中的其他类别的任何样本中不存在,则该样本将被预测以100%的概率属于该类别(1 ),其他类别则为0%(0)。
除此以外;假设您有2个类,并测试了knn.predict_proba(sample)
之类的样本,并期望得到诸如[[0.47, 0.53]]
之类的结果,则无论哪种方式,该结果总计为1。
如果是这样,请尝试生成自己的测试样本,该样本具有训练集中多个类对象的功能。
答案 1 :(得分:0)
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中基本上是没有意义的。该算法基于相似度和距离。