KNeighborsClassifier的概率预测方法仅返回0和1

Kas*_*aei 6 machine-learning probability nearest-neighbor scikit-learn

谁能告诉我我的代码有什么问题?为什么我可以使用LinearRegression来预测虹膜数据集的概率,但是KNeighborsClassifier给我0或1,而它却应该给我一个类似LinearRegression收益的结果?

from sklearn.datasets import load_iris
from sklearn import metrics

iris = load_iris()
X = iris.data
y = iris.target

for train_index, test_index in skf:
    X_train, X_test = X_total[train_index], X_total[test_index]
    y_train, y_test = y_total[train_index], y_total[test_index]

from sklearn.linear_model import LogisticRegression
ln = LogisticRegression()
ln.fit(X_train,y_train)

ln.predict_proba(X_test)[:,1]
Run Code Online (Sandbox Code Playgroud)

数组([0.18075722、0.08906078、0.14693156、0.10467766、0.14823032、0.70361962、0.65733216、0.77864636、0.67203114、0.68655163、0.25219798、0.3863194、0.30735105、0.13963637、0.28017798])

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5, algorithm='ball_tree', metric='euclidean')
knn.fit(X_train, y_train)

knn.predict_proba(X_test)[0:10,1]
Run Code Online (Sandbox Code Playgroud)

array([0.,0.,0.,0.,0.,1.,1.,1.,1.,1.])

lej*_*lot 7

因为KNN具有非常有限的概率概念。它的估计仅是最近邻国中票数的一部分。将邻居数增加到15或100或决策边界附近的查询点,您将看到更多不同的结果。当前,您的点仅总是具有5个具有相同标签的邻居(因此概率为0或1)。