简述1. KNN算法介绍K Nearest Neighbor-K近邻算法2. 原理1️⃣ 基于欧氏距离(欧氏距离对应维度差值平方和开平方根,简单理解勾股定理)或其他距离计算方式计算测试集和每个调试集之间的距离再根据距离排序找到最近的K个样本2️⃣ 基于K个样本投票票组多的就作为最终预测结果 》分类问题3️⃣ 基于K个样本计算均值作为最终预测结果 》回归问题3. 实现思路1️⃣ 分类问题适用于适用于有特征、有标签且标签是不连续的离散的2️⃣ 回归问题适用于适用于有特征、有标签且标签是连续的4. KNN算法分类问题思路1️⃣ 计算测试集和每个训练的样本之间的距离2️⃣基于距离进行升序排序3️⃣找到最近的K个样本4️⃣①分类问题K个样本进行投票|| ②回归问题基于K个样本的标签计算均值5️⃣①分类问题票数多的结果作为最终预测结果|| ②回归问题将计算出的均值作为最终的预测结果5. 代码实现思路1️⃣ 导包2️⃣准备数据集测试集 和 训练集3️⃣ 创建模型对象KNN模型对象/ KNN回归对象4️⃣ 模型训练5️⃣ 模型预测6. 总结K值过小容易受到异常值的影响且会导致模型学到大量脏的特征导致出现过拟合K值过大模型会变得简单容易发生欠拟合1. KNN算法分类API# 1.导包fromsklearn.neighborsimportKNeighborsClassifier#KNN算法的 分类模型# 2.准备数据集测试集 和 训练集x_train[[0],[1],[2],[3]]#训练集的特征数据因为特征可以有多个所以是一个二维数组y_train[0,0,1,1]#训练集的标签数据因为标签是离散的所以是一个一维数组x_test[[5]]#测试集的特征数据要和测试集特征格式保持一致# 3.创建模型对象KNN模型对象# estimator估计器模型对象也可以用变量名model做接收estimatorKNeighborsClassifier(n_neighbors3)# 4.模型训练# 传入训练集的特征数据、训练集的标签数据estimator.fit(x_train,y_train)#不需要返回值# 5.模型预测# 传入测试集的特征数据获取到预测结果测试集的标签y_testy_predestimator.predict(x_test)# 6.打印预测结果print(f预测值为{y_pred})# 求谁离5最近3因为5-32,2平方44开根号2即为根号4# 5和2之间的距离5-233的平方99开根号3# n_neighbors2求的是距离x_test5最近的2个即3,2对3,2对应的y_train进行投票投票结果都是1所以最终预测结果是1# n_neighbors3求的是距离x_test5最近的3个即3,2,1对3,2,1对应的y_train进行投票投票结果1个0、2个1所以最终预测结果是1# n_neighbors4求的是距离x_test5最近的4个即4,3,2,1对4,3,2,1对应的y_train进行投票投票结果2个0、2个1# 但是01两个预测值哪个结果小就认为哪个模型更简单根据奥卡姆剃刀原则(给定两个具有相同泛化误差的模型较简单的模型 比 较复杂的模型更可取)所以最终预测结果是0# 当票数相同时优先选择再训练集中最早出现的类别在y_train[0,0,1,1]0比1更早出现所以最终预测结果是0# 当票数相同时会比较Unicode0更小所以预测结果是0# Scikit-learn中平票处理默认选择数值较小的标签可以通过设置weightsdistance让距离近的样本有更大权重、选择距离最近的标签2. KNN算法回归API# 1.导包fromsklearn.neighborsimportKNeighborsRegressor#KNN算法的 回归模型# 2.准备数据集测试集 和 训练集# 差值(3,11,9) (2,10,10) (0,1,0) (1,0,2)# 平方和211 204 1 5# 开根号14.53 14.28 1 2.24x_train[[0,0,1],[1,1,0],[3,10,10],[4,11,12]]#训练集的特征数据因为特征可以有多个所以是一个二维数组y_train[0.1,0.2,0.3,0.4]#训练集的标签数据因为标签是连续的所以是一个一维数组x_test[[3,11,10]]#测试集的特征数据要和测试集特征格式保持一致# 3.创建模型对estimatorKNeighborsRegressor(n_neighbors4)# 4.模型训练estimator.fit(x_train,y_train)# 5.模型预测y_preestimator.predict(x_test)# 6.打印预测结果print(预测结果,y_pre)# n_neighbors33邻距求距离最近(平方和/开根号 最小)的3个值分别对应的y_train的值即 0.2, 0.3, 0.4三者平均值是0.3所以预测结果为0.3# n_neighbors22邻距求距离最近(平方和/开根号 最小)的2个值分别对应的y_train的值即 0.3, 0.4两者平均值是0.35所以预测结果为0.35# n_neighbors44邻距求距离最近(平方和/开根号 最小)的4个值(即跟样本数一致)分别对应的y_train的值即 0.1, 0.2, 0.3, 0.4,求平均数所以预测结果为0.25# 因为找的数是所有的全算即kn当kn时永远取全部数字的平均值即k值过大会发生欠拟合k值过小会发生过拟合