机器学习之KNN算法
1. KNN算法原理
KNN算法,即 K Nearest Neighbor,简称KNN,是我觉得最直观、也最能体现“人以群分,物以类聚”思想的监督学习算法。
算法思想:如果一个样本在特征空间中K个最相似的样本中大多数属于某个类别,则该样本也属于这个类别。

核心原理:对于一个待预测的样本,在训练数据中找到与之最相似的K个邻居,然后让这些邻居“投票”或“平均”来决定预测结果:
分类任务:K个邻居中出现次数最多的类别作为预测类别
回归任务:K个邻居的输出值的平均值作为预测结果
关键要素:
K值选择:超参数。K太小容易过拟合(受噪声点影响大),K太大容易欠拟合(决策边界太平滑)。常用交叉验证来确定最优K。
距离度量:最常用的是欧氏距离,也可以根据数据特点选择曼哈顿距离、余弦相似度等。

决策规则:多数表决或加权表决(距离越近的邻居权重越高)。
算法特点:
优点:简单直观,无需显式训练(属于“懒惰学习”),对异常值不敏感,理论成熟
缺点:计算复杂度高(预测时需要计算与所有训练样本的距离),内存开销大,特征维度高时会受“维度灾难”影响(距离度量逐渐失效)
2. KNN的应用
分类任务,实现步骤:
1.计算未知样本与每个训练样本的距离
2.将训练样本根据距离大小升序排列
3.取出最近的K个训练样本
4.进行多数表决,统计K个样本中哪个类别的样本个数最多
5.将未知样本归属到出现次数最多的类别
回归任务,实现步骤:
1.计算未知样本与每个训练样本的距离
2.将训练样本根据距离大小升序排列
3.取出最近的K个训练样本
4.计算最近K个样本的目标值的平均值
5.将平均值作为未知样本预测的值
3. 分类和回归API
分类任务:sklearn.neighbors.KNeighborsClassifier
回归任务:sklearn.neighbors.KNeighborsRegressor
4. 标准化和归一化
标准化和归一化,是属于特征工程的处理手段,用于解决量纲问题。
归一化:
API:sklearn.preprocessing.MinMaxScaler
公式:

标准化:
API:sklearn.preprocessing.StandardScaler
公式:


fit_transform和transform的区别:
fit_transform计算并转换(计算结果自动保存到对象中),建议只用于训练集。
transform只转换(直接使用之前计算结果),适用于测试集
如果在 测试集或预测数据上使用 fit_transform,会导致模型“偷偷”学习到测试数据的分布特征,从而造成 训练阶段无法反映真实泛化性能,即 信息泄露。
永远不要在训练集以外的数据上使用 fit 或 fit_transform
使用 transform 可避免引入额外信息,保障模型评估的公正性和安全性。
5. 交叉验证和网格搜索API
API:sklearn.model_selection.GridSearchCV()
参数:
estimator:模型
param_grid:超参数组合
cv:交叉验证折数
结果:best_score、best_params、cv_results
底层原理:
网格搜索(gridsearch):寻找最优的超参数组合
交叉验证(cross validation):训练集的所有数据均分cv份,每一份轮流作验证集,其它cv-1份作为训练集,cv等于几表示几折交叉验证。
GridSearchCV,即网格搜索交叉验证,可以在参数列表中反复训练验证,最后得到最优的超参组合。
更多推荐
所有评论(0)