python - sklearn的KNeighborsClassifier中如何根据最高精度选择K

标签 python scikit-learn classification knn

我在分类项目中使用 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) 

我尝试了不同的值,结果是一样的。

最佳答案

您的代码中有多个错误

首先,在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)

在这种情况下,使用的所有 kacc 都是相同的。

acc_array
array([0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98])

关于python - sklearn的KNeighborsClassifier中如何根据最高精度选择K,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57347217/

相关文章:

scikit-learn - sklearn.base 中的 BaseEstimator (Python)

python - 使用 Sqlalchemy 计算列中的项目数

python - 打印 SelectKBest 的特征名称,其中 k 值位于 GridSearchCV 的 param_grid 内

machine-learning - scikit-learn 中的 SVC 和 LinearSVC 在什么参数下等效?

machine-learning - 如何使用SGD进行时间序列分析

python - 如何根据 ROC 结果设置 sklearn 分类器的阈值?

python - Python 中列表的中位数

python - 是否可以在docker下运行spark udf函数(主要是python)?

python - 如何将 Base64 图像字符串从 Flask Python 代码传递到 HTML?

scikit-learn - 在处理VotingClassifier或Grid搜索时,Sklearn中的GradientBoostingClassifier是否具有类权重(或替代方法)?