Модель KNN (с использованием PCA) выдает одинаковую точность на каждой итерации k - PullRequest
1 голос
/ 20 февраля 2020

Я довольно новичок в технике машинного обучения, и я пытаюсь обдумать реализацию PCA и KNN для классификации различных выходов.

Я использую набор рукописных чисел от 0 до 9 Учебный комплект имеет форму (60000,784), а испытательный комплект имеет форму (10000,784). Я использую PCA, чтобы уменьшить размерность до первых 6 основных компонентов, поэтому теперь мой тренировочный набор имеет форму (60000,6), а тестовый набор - (10000,6). Я пытаюсь выполнить итерацию для различных значений k в диапазоне от 1 до 17, чтобы извлечь наилучшее из возможных значений k для моего приложения. Однако, когда я делаю это, я продолжаю получать 0,2023 за мою точность. Я чувствую, что это неправильно, и мне было интересно, что я мог сделать неправильно.

Вот мой код, где я выполняю PCA и мою попытку извлечь оптимальное значение K:

from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
from sklearn.decomposition import PCA

pca = PCA(n_components=6)
train_projected = pca.fit_transform(X_train_norm)
test_projected = pca.fit_transform(X_test_norm)

Для моих нормализованных массивов я просто разделил их на 255. Это максимально возможное значение.

k_range = range(1,17)
scores = {};
scores_list = [];
for i in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
    knn.fit(train_projected,y_train)
    pred = knn.predict(test_projected)
    scores[i] = metrics.accuracy_score(y_test,pred)
    scores_list.append(metrics.accuracy_score(y_test,pred))

print('Scores ', scores,'\n')
print('Scores List ',scores_list,'\n')

Scores  {1: 0.2023, 2: 0.2023, 3: 0.2023, 4: 0.2023, 5: 0.2023, 6: 0.2023, 7: 0.2023, 8: 0.2023, 9: 0.2023, 10: 0.2023, 11: 0.2023, 12: 0.2023, 13: 0.2023, 14: 0.2023, 15: 0.2023, 16: 0.2023, 17: 0.2023, 18: 0.2023, 19: 0.2023, 20: 0.2023, 21: 0.2023, 22: 0.2023, 23: 0.2023, 24: 0.2023, 25: 0.2023, 26: 0.2023}

Scores List  [0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023, 0.2023]

1 Ответ

0 голосов
/ 20 февраля 2020

Простая ошибка!

В этом коде:

for i in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)

Вы устанавливаете n_neighbors=k для каждой итерации. Это должно быть n_neighbors=i

...