昨天对数据进行预处理后发现准确率和最佳k值都未发生变化,肯定是某个环节出了问题,于是对代码进行了修正。修正后的代码,数据在正则化,归一化,标准化后,准确率与最佳k值均发生了变化。bug修复成功。
#导入numpy,pandas,knn分类算法和训练集与测试集的切分工具
import numpy as np
import pandas as pd
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
#读取数据,不要header(标头),用空格分割每种特征
data = pd.read_csv('./datingTestSet2.txt',header = None,sep ='\t')
#将data转为可用的array,原为dataframe
dataArray = np.array(data)
#分割特征与目标变量
X = dataArray[:,0:3]
y = dataArray[:,3]
#定义一个函数,在随机切分的同时选择不同的k值,以确定最佳k值。返回最佳k值与最佳k值下的准确率。
def begin(a,b):
X_train,X_test,y_train,y_test = train_test_split(a,b)
score = 0
k = 0
for i in range(1,22):
knn = KNeighborsClassifier(n_neighbors=i)
knn.fit(X_train,y_train)
ks = knn.score(X_test,y_test)
if ks > score: