我对机器学习技术相当陌生,我正在尝试通过 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]
最佳答案
简单的错误!
在此代码中:
for i in k_range:
knn = KNeighborsClassifier(n_neighbors=k)
您正在为每次迭代设置n_neighbors=k
。它应该是n_neighbors=i
关于python - KNN 模型(使用 PCA)在 k 的每次迭代中输出相同的精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60313472/