代码的结果始终与老师的不一样

来源:4-6 网格搜索与k近邻算法中更多超参数

weixin_慕仰9367891

2024-04-29

我使用了跟老师完全一样的代码,为什么输出的结果是KNeighborsClassifier(n_neighbors=1)?
这个结果为什么只出现一个参数,这是代表其它参数全部取默认值吗?
另外我之前在设置train_test_split函数的时候将test_size的值设置成了0.25,出来的结果跟这个也不一样,这个我倒是能够理解一些,不过在像老师一样改成0.2之后发现差别太大了

另外,不仅是这段代码,就算是之前在从底层编写KNN和评判标准的时候得出的结果也与老师的不一样,真的无法理解

我的代码如下:

import sklearn
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV
from sklearn import datasets
from sklearn.model_selection import train_test_split
digits = datasets.load_digits()
X_train,X_test,y_train,y_test = train_test_split(digits.data,digits.target,test_size = 0.2,random_state = 666)
'''网格搜索函数需要的变量是一个包含字典的列表'''
param_grid = [
    {
        'weights':['uniform'],
        'n_neighbors': [i for i in range(1,11)]
    },
    {
        'weights': ['distance'],
        'n_neighbors':[i for i in range(1,11)],
        'p':[p for p in range(1,6)]
    }
]
knn_clf = KNeighborsClassifier()
'''初始化网格搜索'''
grid_search = GridSearchCV(knn_clf,param_grid)#将机器学习的方法和网格搜索变量导入
grid_search.fit(X_train,y_train)#进行训练
'''现在可以用grid_search导出结果了'''
print(grid_search.best_estimator_)
写回答

1回答

约翰克里斯朵夫

2024-05-11

  1. 新的版本,对于这个数据,搜索结果是 n_neighbors 为 1 了。(老师自己测试过,在前面有其他同学提了类似问题,所以他去验证了)

  2. 我尝试改动下面代码X_train,X_test,y_train,y_test = train_test_split(digits.data,digits.target,test_size = 0.2,random_state = 666)中参数random_state的取值,搜索结果中p值和'weights'的取值会有变化,但n_neighbors 始终等于1。

  3. 老师说knn的学习是借用一个最简单的算法为了让我们懂机器算法的一些共通套路,knn本身在实际应用中没啥用处,所以不用太纠结。

    不知道对你有没有帮助,继续加油!我也才开始学,好像有点晚了

2
0

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5893 学习 · 2455 问题

查看课程