predict_proba для алгоритма ML k-ближайших соседей (kNN) с LeaveOneOut
Есть код с моделью обучения k-ближайших соседей (kNN) по двум группам с добавлением условия: предсказание метки происходит только в том случае, если два ближайших соседа n_neighbors=2 имеют одинаковую метку. Например, если две метки [1. , 1.], то 1, если [0. , 0.] то 0, при других вариантах - предсказания нет.
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import LeaveOneOut
knn = KNeighborsClassifier(n_neighbors=2, n_jobs=-1, weights='distance').fit(X, Y)
y_knn = knn.predict(x_test)
print('все предсказания', y_knn)
y_knn_filt = np.max(knn.predict_proba(x_test), axis=1) == 1
print('фильтр уверенных предсказаний', y_knn_filt)
print('только уверенные предсказания', np.array(y_knn)[y_knn_filt])
AA = accuracy_score(a[y_test], y_knn)
print('score по всем предсказаниям', AA)
AA_filt = accuracy_score(np.array(y_test)[y_knn_filt], np.array(y_knn)[y_knn_filt])
print('score по уверенным предсказаниям', AA_filt)
Подскажите, как можно это условие перенести для модели обучения k-ближайших соседей (kNN) с перекрестным обучением все кроме одного LeaveOneOut.
Вот код:
knn = KNeighborsClassifier(n_neighbors=2, n_jobs=-1, weights='distance').fit(X, Y)
scores = cross_val_score(knn, X, Y, cv=LeaveOneOut())
Ответы (1 шт):
Если я правильно понял, что вам нужно. Метод kneighbors возвращает К ближайших соседей к классифицируемой точке. Причем возвращает как расстояния до них, так и их метки класса. Можно проверить на любое условие до присвоения метки вашей классифицируемой точки.