KNN关于超参数的问题

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

XTZ3344441

2018-05-19

%%time
best_method = ""
best_p = -1
best_score = 0.0
best_k = -1

for method in ["uniform","distance"]:
    for k in range(1,10):
        for p in range(1,6):
            knn_clf = KNeighborsClassifier(n_neighbors = k,weights = method,p=p)
            knn_clf.fit(X_train,y_train)
            score = knn_clf.score(X_test,y_test)
            if score > best_score:
                best_k = k
                best_method = method
                best_p = p
                best_score = score
                
print("best_score = ",best_method)
print("best_p = ",best_p)
print("best_score = ",best_score)
print("best_k = ",best_k)


best_score =  uniform
best_p =  2
best_score =  0.9916666666666667
best_k =  4
Wall time: 36.7 s


best_score =  distance
best_p =  2
best_score =  0.9888888888888889
best_k =  3
Wall time: 17.4 s

既然p是在weight为distance时才有存在的意义

那2这个结果的理解是不是可以看出,相对而言,选择对的weight比选择对的p更加重要,weight更加超呢??

写回答

1回答

liuyubobobo

2018-05-19

参数p是在weight为distance的时候才有意义,你可以理解成weight更加“超”。但这里的更加“超”只是层级上的一个选择关系而已,很难说distance的选择比p的选择更重要。


这就好比我们本科毕业以后会选择去读研还是去工作。读研要选择去哪个学校读,读什么专业;工作要选择去哪个厂工作,在哪个部门做什么职位。这些选择具有层级性,决定了上一层选择,才能去看下一层选择。但很难说上层选择更重要。每一个选择都很重要:)

0
2
liuyubobobo
回复
高斯的盾
在这里我犯了一个大错误。你说的对,p在weight下也有意义。可以参考这里:https://coding.imooc.com/learn/questiondetail/39378.html 抱歉!
2018-11-06
共2条回复

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

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

5839 学习 · 2437 问题

查看课程