相关参数:https://www.cnblogs.com/xiaotan-code/p/6680438.html
步骤:
1、 数据集处理
2、 分割数据集
3、 对数据集进行标准化
4、 算法进行分类预测
算法实现:
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn import datasets
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.3)
knn=KNeighborsClassifier(n_neighbors=10,weights='distance')
knn.fit(x_train,y_train)
y_predict=knn.predict(x_test)
print("准确率:",knn.score(x_test,y_test))
问题:
1、 k值(交叉验证,调参)
太小,容易受异常点影响
太大,容易受k值数量类别波动
2、 性能问题:速度慢,时间复杂度高
优点:
无需参数估计,无需训练,易于理解,实现
缺点:
k值,时间复杂度高
交叉验证与网格搜索:
交叉验证:为了让模型的评估更加准确可信
网格搜索:调参数
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split,GridSearchCV
from sklearn import datasets
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.3)
knn=KNeighborsClassifier()
#网格搜索
#构造一些超参数的值进行搜索
param={"n_neighbors":[3,5,10]}
gc=GridSearchCV(knn,param_grid=param,cv=2)
gc.fit(x_train,y_train)
print("在测试集中准确率:",gc.score(x_test,y_test))
print("在交叉验证中最好的结果:",gc.best_score_)
print("选择最好的模型:",gc.best_estimator_)
print("每个超参数每次交叉验证的结果:",gc.cv_results_)