Day16_【机器学习—KNN算法】

发布于:2025-08-29 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、KNN 简介

KNN:K-近邻算法 (K Nearest Neighbor)

算法思想:一个样本最相似的 k 个样本中的大多数属于某一个类别,则该样本也属于这个类别

距离计算:欧氏距离

二、KNN 解决两类问题

分类问题与回归问题

分类流程:

  1. 计算未知样本到每一个训练样本的距离
  2. 将训练样本根据距离大小升序排列
  3. 取出距离最近的 K 个训练样本
  4. 进行多数表决,统计 K 个样本中哪个类别的样本个数最多
  5. 将未知的样本归属到出现次数最多的类别

回归流程:

  1. 计算未知样本到每一个训练样本的距离(欧式距离:对应维度差值的平方和 开平方根
  2. 将训练样本根据距离大小升序排列
  3. 取出距离最近的 K 个训练样本
  4. 把这个 K 个样本的目标值计算其平均值
  5. 作为将未知的样本预测的值

其中K值的选择:需要一些方法来寻找这个最合适的K值 交叉验证、网格搜索

  • K值过小 ,过拟合,容易受到异常点的影响,整体模型变得复杂
  • K值过大 ,欠拟合,整体的模型变得简单

三 、KNN算法API的使用

首先机器学习的开发环境,安装:基于Python的 scikit-learn 库

分类问题与回归问题

分类问题

'''
分类问题
KNN算法 代码实现步骤
            1:导包
            2:创建模型对象
            3:准备训练集
            4:准备测试集
            5:模型训练
            6:模型预测,并打印结果
'''
# 1:导包
from sklearn.neighbors import KNeighborsClassifier
#2:创建模型对象
estimator = KNeighborsClassifier(3)
#3、准备训练集   列表嵌套   二维  [样本数量,特征数量]
#外层列表  样本数  4个
#内层列表  特征数量  1列
x_train = [[0], [1], [2], [3]]
#一维的   [样本数量]  4个
y_train = [0, 0, 0, 1]
#4、准备测试集  易错点2:注意这里x_test是二维的
x_test = [[4]]
#5、模型训练
#参1:训练集特征  参2:训练集标签
estimator.fit(x_train, y_train)
#6、模型预测
y_test = estimator.predict(x_test)
#打印结果
print(y_test)

回归问题

'''回归问题'''
#1、导包
from sklearn.neighbors import KNeighborsRegressor
#2、创建模型(算法)对象 注意!!这里是回归问题
estimator = KNeighborsRegressor(2)
#3、准备训练集
x_train = [[0, 0, 1],
           [1, 1, 0],
           [3, 10, 10],
           [4, 11, 12]]
y_train = [0.1, 0.2, 0.3, 0.4]
#4、测试集(x_test)
x_test = [[3, 11, 10]]
#5、模型训练
estimator.fit(x_train, y_train)
#6、模型预测(y_test)
y_test = estimator.predict(x_test)
#打印结果
print(y_test)


网站公告

今日签到

点亮在社区的每一天
去签到