尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

速通机器学习 | 01 K 近邻算法 (KNN):最简单的监督分类算法

速通机器学习 | 01 K 近邻算法 (KNN):最简单的监督分类算法 速通机器学习 | 01 K 近邻算法 (KNN)专栏前言 欢迎来到【速通机器学习】系列。本系列拒绝堆砌复杂公式优先理解思想搭配可直接运行代码快速掌握传统机器学习主流算法。本章作为系列第一篇我们从最简单、最好理解的 KNNK 近邻算法入手。一、什么是 KNN通俗理解KNN 全称K-Nearest NeighborsK 近邻算法。一句话理解物以类聚。在预测一个样本的时候找寻距离它最近的 k 个邻居通过少数服从多数来划分类别。二、怎么计算距离在初中我们就学过两点之间的距离也就是欧氏距离二维公式多维特征以此类推。计算待测样本和所有样本距离后进行排序选取 k 个最近的数据统计类别数量最多的类别即为该预测数据的类别。三、代码实现该代码是通过鸢尾花的特征对鸢尾花进行分类训练数据与测试数据均可以在本文顶部免费下载。分段讲解完整代码训练数据样例测试集数据样例简单介绍一下 pandas 库主要用于表格型数据处理能够读取 Excel、筛选指定列、构建数据表非常适合机器学习前期数据整理工作。步骤1对训练集和测试集进行特征与标签分离# 导入pandas库读取Excel数据 import pandas as pd #读取数据 train_data pd.read_excel(rD:\pythoncode2\bigdata_ai40\机器学习\data\鸢尾花训练数据.xlsx) test_data pd.read_excel(rD:\pythoncode2\bigdata_ai40\机器学习\data\鸢尾花测试数据.xlsx) #将特征和标签分离 train_X train_data[[萼片长(cm),萼片宽(cm),花瓣长(cm),花瓣宽(cm)]] train_Y train_data[[类型_num]] test_X test_data[[萼片长(cm),萼片宽(cm),花瓣长(cm),花瓣宽(cm)]] test_Y test_data[[类型_num]]步骤2由于不同特征数值范围差距较大距离计算会被大数特征主导因此 KNN 需要做标准化处理。两种常见标准化方法Min-Max 归一化将数值压缩在 0 到 1 之间公式为Z-Score 标准化将数值进行标准化处理使其符合标准正态分布。本文代码使用该方式公式为使用sklearn库sklearn.preprocessing提供标准化工具scale对每一列进行标准化#导入用于标准化的scale from sklearn.preprocessing import scale #创建空DataFrame存放标准化之后的训练特征 data pd.DataFrame() data[萼片长标准化] scale(train_X[萼片长(cm)]) data[萼片宽标准化] scale(train_X[萼片宽(cm)]) data[花瓣长标准化] scale(train_X[花瓣长(cm)]) data[花瓣宽标准化] scale(train_X[花瓣宽(cm)])步骤3开始训练sklearn.neighbors.KNeighborsClassifiersklearn 内置 KNN 分类器自动计算 k 个最近值并分类#导入knn模块 from sklearn.neighbors import KNeighborsClassifier #设置K3选取最近3个邻居 knn KNeighborsClassifier(n_neighbors3) #传入标准化特征与标签开始训练 knn.fit(data,train_Y)步骤4进行自测predict() 可以输出预测值score() 可以对预测值和真实值进行比对输出正确率。#自测将训练数据放入训练好的模型进行预测 train_predicted knn.predict(data) print(train_predicted) #计算正确率训练集中预测正确样本占比 score knn.score(data,train_Y) print(score)步骤5测试预测# 对测试集特征执行标准化 data_test pd.DataFrame() data_test[萼片长标准化] scale(test_X[萼片长(cm)]) data_test[萼片宽标准化] scale(test_X[萼片宽(cm)]) data_test[花瓣长标准化] scale(test_X[花瓣长(cm)]) data_test[花瓣宽标准化] scale(test_X[花瓣宽(cm)]) #测试集预测 print(测试集预测) print(knn.predict(data_test)) #测试集得分 print(测试集得分) print(knn.score(data_test,test_Y))四、补充知识点K 值选择K 取值过小模型容易受到异常数据干扰发生过拟合。K 取值过大较远的样本参与投票容易造成欠拟合。实际应用中通常选择奇数 K 值避免出现投票持平的情况。五、KNN 优缺点✅ 优点原理简单直观容易理解无需复杂训练过程小数据集快速上手原生支持多分类任务❌ 缺点数据量大的时候预测速度很慢需要逐一计算距离面对超高维数据效果下滑维度灾难需要提前对特征做标准化处理本章小结KNN 核心思路计算距离选取最近 k 个邻居投票分类使用欧式距离衡量样本相似度特征标准化是 KNN 必不可少的步骤代码流程读取数据→分离特征标签→标准化→模型训练→预测评估
返回列表