Python KNN模型(使用PCA)在k的每次迭代中输出相同的精度

Python KNN模型(使用PCA)在k的每次迭代中输出相同的精度,python,pca,knn,Python,Pca,Knn,我对机器学习技术是相当陌生的,我正试图用PCA和KNN的实现来对不同的输出进行分类 我使用的是从0到9的手写数字数据集。训练集的形状为(60000784),测试集的形状为(10000784)。我使用PCA将维数降低到前6个主成分,因此现在我的训练集的形状为(60000,6),测试集的形状为(10000,6)。我尝试对不同的k值(从1到17)执行迭代,以提取应用程序的最佳k值。然而,当我这样做的时候,我的精确度一直是0.2023。我觉得这是不正确的,我想知道我可能做错了什么 这是我的代码,我在其中

我对机器学习技术是相当陌生的,我正试图用PCA和KNN的实现来对不同的输出进行分类

我使用的是从0到9的手写数字数据集。训练集的形状为(60000784),测试集的形状为(10000784)。我使用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]
简单的错误

在此代码中:

for i in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
您正在为每个迭代设置
n\u neights=k
。这应该是一个简单的错误

在此代码中:

for i in k_range:
    knn = KNeighborsClassifier(n_neighbors=k)
您正在为每个迭代设置
n\u neights=k
。它应该是
n\u neights=i