一、KNNK-近邻算法K Nearest Neighbor简称KNN。比如根据你的“邻居”来推断出你的类别KNN算法思想如果一个样本在特征空间中的 k 个最相似通过距离判断的样本中的大多数属于某一个类别则该样本也属于这个类别二、K值的选择1、K值过小用较小邻域中的训练实例进行预测1容易受到异常点的影响。2K值的减小就意味着整体模型变得复杂容易发生过拟合。只分析1个人容易过度分析2、K值过大用较大邻域中的训练实例进行预测1受到样本均衡的问题。2且K值的增大就意味着整体的模型变得简单欠拟合。同时分析很多人容易分析不到位3、举例KNN为训练样本个数无论输入实例是什么只会按训练集中最多的类别进行预测, 受到样本均衡的影响4、如何对K超参数进行调优需要一些方法来寻找这个最合适的K值交叉验证、网格搜索三、解决的问题1、 解决问题分类问题标签不连续、回归问题标签连续2、算法思想若一个样本在特征空间中的 k 个最相似的样本大多数属于某一个类别则该样本也属于这个类别3、相似性欧氏距离四、KNN算法API使用 - 分类问题1、 KNN分类APIsklearn.neighbors.KNeighborsClassifier(n_neighbors5)n_neighborsint,可选默认 5k_neighbors查询默认使用的邻居数 KNN算法介绍(K Nearest Neighbors), K近邻算法 原理: 基于 欧式距离(或者其它距离计算方式)计算 测试集 和 每个训练集之间的距离, 然后根据距离升序排列, 找到最近的K个样本. 基于K个样本投票, 票数多的就作为最终预测结果 - 分类问题. 基于K个样本计算平均值, 作为最终预测结果 - 回归问题. 实现思路: 1. 分类问题 适用于: 有特征, 有标签, 且标签是不连续的(离散的) 2. 回归问题. 适用于: 有特征, 有标签, 且标签是连续的. KNN算法, 分类问题思路如下: 1. 计算测试集和每个训练的样本之间的 距离. 2. 基于距离进行升序排列. 3. 找到最近的K个样本. 4. K个样本进行投票. 5. 票数多的结果, 作为最终的预测结果. 代码实现思路: 1. 导包. 2. 准备数据集(测试集 和 训练集) 3. 创建(KNN 分类模型)模型对象. 4. 模型训练. 5. 模型预测. # 1. 导包. from sklearn.neighbors import KNeighborsClassifier # 分类 # from sklearn.neighbors import KNeighborsRegressor # 回归 # 2. 准备数据集(测试集 和 训练集) # train: 训练集 # test: 测试集 # neighbors: 最近邻的邻居数 x_train [[0], [1], [2], [3]] # 训练集的特征数据, 因为特征可以有多个特征, 所以是一个二维数组。 y_train [0, 0, 1, 1] # 训练集的标签数据, 因为标签是离散的, 所以是一个一维数组 x_test [[5]] # 测试集的特征数据 # 3. 创建(KNN 分类模型)模型对象. # estimator: 估计器, 模型对象, 也可以用变量名 model做接收. estimator KNeighborsClassifier(n_neighbors3) # 4. 模型训练 # 传入: 训练集的特征数据, 训练集的标签数据 estimator.fit(x_train, y_train) # 5. 模型预测. # 传入: 测试集的特征数据, 获取到: 预测结果(测试集的标签, y_test) y_pre estimator.predict(x_test) # 6. 打印预测结果. print(f预测值为: {y_pre})2、KNN回归APIsklearn.neighbors.KNeighborsRegressor(n_neighbors5) KNN算法介绍(K Nearest Neighbors), K近邻算法 原理: 基于 欧式距离(或者其它距离计算方式)计算 测试集 和 每个训练集之间的距离, 然后根据距离升序排列, 找到最近的K个样本. 基于K个样本投票, 票数多的就作为最终预测结果 - 分类问题. 基于K个样本计算平均值, 作为最终预测结果 - 回归问题. 实现思路: 1. 分类问题 适用于: 有特征, 有标签, 且标签是不连续的(离散的) 2. 回归问题. 适用于: 有特征, 有标签, 且标签是连续的. KNN算法, 回归问题思路如下: 1. 计算测试集和每个训练的样本之间的 距离. 2. 基于距离进行升序排列. 3. 找到最近的K个样本. 4. 基于K个样本的标签值, 计算平均值. 5. 将上述计算出来的平均值, 作为最终的预测结果. 代码实现思路: 1. 导包. 2. 准备数据集(测试集 和 训练集) 3. 创建(KNN 回归模型)模型对象. 4. 模型训练. 5. 模型预测. 总结: K值过小, 容易受到异常值的影响, 且会导致模型学到大量的脏的特征, 导致出现: 过拟合. K值过大, 模型会变得简单, 容易发生: 欠拟合. # 1. 导包. from sklearn.neighbors import KNeighborsRegressor # KNN算法的 回归模型 # 2. 准备数据集(测试集 和 训练集) # 开根号: 14.53 14.28 1 2.24 # 平方和: 211 204 1 5 # 差值: (3,11,9) (2,10,10) (0,1,0) (1,0,2) x_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. 创建(KNN 回归模型)模型对象. estimator KNeighborsRegressor(n_neighbors2) # 4. 模型训练. estimator.fit(x_train, y_train) # 5. 模型预测. y_pre estimator.predict(x_test) # 6. 打印预测结果. print(f预测值为: {y_pre})