机器学习——KNN

这篇博客介绍了KNN(K-最近邻)算法的详细步骤,包括数据集处理、分割、标准化和分类预测。讨论了k值选择的重要性,指出k值太小可能受异常点影响,太大则会受类别波动影响。此外,还提到了KNN算法的性能问题,如速度慢和时间复杂度高。尽管如此,KNN的优点在于无需参数估计和训练,易于理解和实现。文章最后提到了交叉验证用于提高模型评估的准确性,以及网格搜索作为调参的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

相关参数: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_)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值