如何[=10K in sklearn KNeighborsClassifier based on the highest accuracy
How to select K in sklearn's KNeighborsClassifier based on the highest accuracy
我在分类项目中使用 KNN
我正在尝试找到具有最高准确度位的 K,它只是给了我最高的 K 我正在使用更多的自动化过程,而不是使用肘部方法。
k=6
acc_array=np.zeros(k)
for n in range(1,k):
classifier=KNeighborsClassifier(n_neighbors=k).fit(x_train,y_train)
y_pred=classifier.predict(x_test)
acc=metrics.accuracy_score(y_test, y_pred)
acc_array[k-1]=acc
max_acc=np.amax(acc_array)
acc_list=list(acc_array)
k=acc_list.index(max_acc)
print("The best accuracy was with", max_acc, "with k=",k)
我尝试了不同的值,都是一样的。
您的代码中有多个错误。
First,在 for
循环中你总是有 n_neighbors=k
并且 k
是在循环外定义的,因此,它总是相同的.
第二个,你使用acc_array[k-1]=acc
并且k
是常量所以你将acc
值存储在相同的位置。
这是使用 Iris 数据集的正确版本:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
# import some data to play with
iris = datasets.load_iris()
X = iris.data
y = iris.target
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
k=10
acc_array=np.zeros(k)
for k in np.arange(1,k+1,1): # here k will take values from 1 to 10
classifier = KNeighborsClassifier(n_neighbors=k).fit(x_train,y_train) # k changes after each iteration
y_pred = classifier.predict(x_test)
acc = metrics.accuracy_score(y_test, y_pred)
acc_array[k-1]=acc # store correctly the results
max_acc=np.amax(acc_array)
acc_list=list(acc_array)
k=acc_list.index(max_acc)
print("The best accuracy was with", max_acc, "with k=", k+1)
在这种情况下,acc
对于所有使用的 k
都是相同的。
acc_array
array([0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98])
我在分类项目中使用 KNN
我正在尝试找到具有最高准确度位的 K,它只是给了我最高的 K 我正在使用更多的自动化过程,而不是使用肘部方法。
k=6
acc_array=np.zeros(k)
for n in range(1,k):
classifier=KNeighborsClassifier(n_neighbors=k).fit(x_train,y_train)
y_pred=classifier.predict(x_test)
acc=metrics.accuracy_score(y_test, y_pred)
acc_array[k-1]=acc
max_acc=np.amax(acc_array)
acc_list=list(acc_array)
k=acc_list.index(max_acc)
print("The best accuracy was with", max_acc, "with k=",k)
我尝试了不同的值,都是一样的。
您的代码中有多个错误。
First,在 for
循环中你总是有 n_neighbors=k
并且 k
是在循环外定义的,因此,它总是相同的.
第二个,你使用acc_array[k-1]=acc
并且k
是常量所以你将acc
值存储在相同的位置。
这是使用 Iris 数据集的正确版本:
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
# import some data to play with
iris = datasets.load_iris()
X = iris.data
y = iris.target
x_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=42)
k=10
acc_array=np.zeros(k)
for k in np.arange(1,k+1,1): # here k will take values from 1 to 10
classifier = KNeighborsClassifier(n_neighbors=k).fit(x_train,y_train) # k changes after each iteration
y_pred = classifier.predict(x_test)
acc = metrics.accuracy_score(y_test, y_pred)
acc_array[k-1]=acc # store correctly the results
max_acc=np.amax(acc_array)
acc_list=list(acc_array)
k=acc_list.index(max_acc)
print("The best accuracy was with", max_acc, "with k=", k+1)
在这种情况下,acc
对于所有使用的 k
都是相同的。
acc_array
array([0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98])