Я хочу построить график, который показывает ошибку ошибочной классификации по сравнению с соседями де К, используя KNN.
Это код, который я построил для этого:
# creating odd list of K for KNN
myList = list(range(1,50))
# subsetting just the odd ones
neighbors = filter(lambda x: x % 2 != 0, myList)
# empty list that will hold cv scores
cv_scores = []
# perform 10-fold cross validation
for k in neighbors:
knn = KNN(n_neighbors=k, n_jobs = 6, metric = 'minkowski', contamination = 0.05)
scores = cross_val_score(knn, X_test, pred, cv=10, scoring='accuracy')
cv_scores.append(scores.mean())
### Create Plot
import matplotlib.pyplot as plt
plt.style.use('ggplot')
# changing to misclassification error
MSE = [1 - x for x in cv_scores]
# determining best k
optimal_k = neighbors[MSE.index(min(next(iter(MSE))))]
print ("The optimal K neighbors number is %d" % optimal_k)
# plot misclassification error vs k
plt.plot(neighbors, MSE, figsize = (20,12))
plt.xlabel('Number of Neighbors K')
plt.ylabel('Misclassification Error')
plt.show()
Проблема вэта строка:
optimal_k = neighbors[MSE.index(min(next(iter(MSE))))]
Этот код, кажется, был написан на python 2. Это была оригинальная строка:
optimal_k = neighbors[MSE.index(min(MSE))]
Я добавил next()
и iter()
, чтобы решить эту проблему, как советуют некоторые пользователи в других темах, похожих на эту.Но я получаю эту ошибку:
TypeError: 'numpy.float64' object is not iterable
Я знаю, почему происходит эта ошибка, она должна проходить через список, но она принимает только цифры.Я думаю, что проблема связана с использованием filter()
в этой строке:
neighbors = filter(lambda x: x % 2 != 0, myList)
Как я могу исправить этот код для запуска на Python 3 и предотвратить это? ?? 1021 *
Спасибо вadvance
EDIT:
Используемая мной версия KNN не предназначена для sklearn, для тех, кто хотел бы попробовать этот код.Это происходит из пакета обнаружения аномалий под названием PYOD.Ссылка здесь
Вы также можете попробовать его с оригинальным KNN из sklearn, но учтите, что вам нужно будет удалить параметр загрязнения и, возможно, параметр расстояния