Метод прогнозирования вероятности KNeighborsClassifier возвращает только 0 и 1

63
6

Может ли кто-нибудь сказать мне, что проблема с моим кодом? Почему я могу предсказать вероятность набора диафрагмы с помощью 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]

([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]

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

спросил(а) 2016-05-07T16:30:00+03:00 3 года, 11 месяцев назад
1
Решение
66

Потому что KNN имеет очень ограниченную концепцию вероятности. Его оценка - это просто доля голосов среди ближайших соседей. Увеличьте число соседей до 15 или 100 или точку запроса вблизи границы решения, и вы увидите более разнообразные результаты. В настоящее время ваши очки просто всегда имеют 5 соседей одной метки (таким образом, вероятность 0 или 1).

ответил(а) 2016-05-07T16:35:00+03:00 3 года, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема