机器学习——knn临近算法

目录

什么是knn算法

knn算法的步骤

        1.加载数据集:

        2.特征标准化:

        3.计算距离:

        4.选择最近的K个样本:

        5.进行投票或计算平均值:

实验中遇到的问题

knn算法的优缺点

总结


什么是knn算法

        KNN(K-Nearest Neighbors)是一种基本的分类和回归算法,它通过计算距离来判断一个样本点属于哪个类别或者预测其数值。KNN算法的核心思想是,如果一个样本附近的k个最近邻中大多数属于某个类别,那么该样本很有可能也属于这个类别。

knn算法的步骤

        下面是一个KNN算法的例子,假设我们有一个二维数据集,分为两个类别,我们希望通过KNN算法对新样本进行分类:

        1.加载数据集:

        将训练数据集信息加载到内存中。

# 定义训练数据集
X_train = np.array([[1, 2], [2, 1], [3, 4], [4, 3]])
y_train = np.array([0, 0, 1, 1])

# 定义测试数据
X_test = np.array([[2.5, 3]])

        2.特征标准化:

        特征缩放可以提高模型的准确性。将所有特征值缩放到相同的范围内,例如[0, 1]。

# 特征标准化(这里简单地将特征值缩放到[0, 1]范围内)
X_train = (X_train - X_train.min()) / (X_train.max() - X_train.min())
X_test = (X_test - X_train.min()) / (X_train.max() - X_train.min())

        3.计算距离:

        根据选定的距离度量(如欧氏距离或曼哈顿距离),计算每个测试样本与所有训练样本之间的距离。

# 计算距离
distances = np.sqrt(np.sum((X_train - X_test) ** 2, axis=1))

        4.选择最近的K个样本:

        根据计算出的距离,选择与测试样本距离最近的K个训练样本。

# 选择最近的K个样本
k = 3
nearest_indices = distances.argsort()[:k]
nearest_labels = y_train[nearest_indices]

        5.进行投票或计算平均值:

        在分类问题中,使用这K个样本的标签进行投票,将得票最多的标签作为测试样本的预测结果。在回归问题中,使用这K个样本的目标变量的平均值作为测试样本的预测结果。

# 进行投票,选出得票最多的标签
prediction = np.bincount(nearest_labels).argmax()
print("预测结果:", prediction)

        我们首先定义了一个训练数据集`X_train`和对应的标签`y_train`,然后定义了一个测试数据`X_test`。接下来,我们进行特征标准化,计算每个训练样本与测试样本之间的距离,并选择最近的K个训练样本。最后,通过投票的方式确定测试样本的类别,并输出预测结果。      

实验中遇到的问题

        计算距离的方法:在K近邻算法中,计算样本之间的距离是一个重要的步骤。常用的距离计算方法有欧氏距离、曼哈顿距离。

        本次实验使用的是欧氏距离。欧氏距离是最常用的距离度量方法,其定义为两个向量之间的欧氏距离,即两个向量各个维度差值的平方和的平方根。

        欧氏距离适用于连续特征的距离度量,计算两个向量之间的直线距离。本实验中,欧氏距离是一个合适的选择。

knn算法的优缺点

优点:

1. 无需训练:KNN算法属于一种懒惰学习算法,不需要显式地进行模型训练,而是将所有的训练样本保存在内存中,当需要进行预测时直接计算距离即可。

2. 适用性广泛:KNN算法可以用于分类问题和回归问题,并且对数据分布没有假设,适用于各种类型的数据。

缺点:

1. 计算复杂度高:KNN算法需要计算测试样本与所有训练样本之间的距离,当训练集很大时,计算复杂度会很高。

2. 需要确定K值:KNN算法需要选择合适的K值,不同的K值可能会导致不同的预测结果。

总结

KNN算法是一种简单而常用的机器学习算法,适用于各种类型的数据和问题,根据具体问题和数据特点来选择是否使用KNN算法,进行相应的优化和调参。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值