机器学习:knn算法

1、概述

        全称是k-nearest neighbors,通过寻找k个距离最近的数据,来确定当前数据值的大小或类别。K-近邻算法是一种基本而又有效的机器学习算法,用于分类和回归任务。它属于实例学习方法,或者说是一种基于规则的记忆方法。

2、基本概念

  • K值(Number of Neighbors, K)

    • K是算法中的一个关键参数,决定了评估新数据点时考虑的最近邻居的数量。

  • 特征空间(Feature Space)

    • 特征空间是数据点的所有特征组成的空间,每个数据点在这个空间中都有一个位置。

  • 距离度量(Distance Metric)

    • 用于计算特征空间中两个点之间的距离。常见的距离度量包括欧氏距离、曼哈顿距离和闵可夫斯基距离。

    • 欧氏距离(Euclidean Distance)(最常用):

      • 最常用的距离度量,定义为多维空间中两点之间的直线距离。公式为:

        𝑑(𝑝,𝑞)=

      • 其中 p 和 q 是两个点,pi 和 qi 是它们在第 i维的坐标。

    • 曼哈顿距离(Manhattan Distance)

      • 也称为城市街区距离,是两点在标准坐标系上的绝对轴距之和。公式为:

        𝑑(𝑝,𝑞)=

  • 超参数(Hyperparameter)

    • 算法运行之前需要设置的参数,K值就是K-NN算法的一个超参数。

  • 训练集(Training Set)

    • 用于训练模型的数据集,包含输入特征和对应的标签。

  • 测试集(Test Set)

    • 用于评估模型性能的数据集,通常不参与训练过程。

3、算法流程

  • 选择K值:确定考虑的邻居数量。

  • 确定距离度量:选择一种距离度量方法。

  • 对测试数据点进行距离计算:计算测试点与训练集中所有点的距离。

  • 找到K个最近邻居:根据距离排序,选择最近的K个点。

  • 进行决策:根据K个邻居的标签进行投票(分类)或计算平均值(回归)。

  • 输出预测结果:将决策结果作为新数据点的预测输出。

  • 例子

    

import numpy as np

#导入txt文件,numpy可以读取txt文件以二维数组的形式保存
data=np.loadtxt("datingTestSet2.txt")

#导入k-近邻分类器
from sklearn.neighbors import KNeighborsClassifier
#获取数组除最后一列的数据子集,特征集
# 特征集(Feature Set):
# 特征集是由多个特征(Feature)组成的集合,这些特征是输入到模型中用于进行预测的数据点。
# 特征可以是连续的数值,也可以是离散的类别。
# 在监督学习中,特征集通常不包含目标变量(即我们想要预测的值)。
# 例如,在房价预测模型中,特征可能包括房屋的大小、位置、建造年份等。
x=data[:,:-1]
#获取数组最后一列的数据子集,标签集
# 标签集(Label Set):
# 标签集是与特征集相对应的,包含了每个数据点的目标变量或结果。
# 在监督学习中,标签集是我们希望模型学习并预测的值。
# 标签可以是连续的数值(如回归问题)或离散的类别(如分类问题)。
# 继续上面房价的例子,标签集将包含每个房屋的实际售价。
y=data[:,-1]
#设置k-近邻分类,近邻数为10
neigh=KNeighborsClassifier(n_neighbors=10)
#将特征集和标签集训练分类器
neigh.fit(x,y)
#对指定一个数据预测
print(neigh.predict([[42383,12.36756,1.5236]]))
#对指定列表预测
predict_data=[[56789,08.12345,2.67890],
        [12345,67.23456,3.45678],
        [23456,78.34567,4.56789],
        [34567,89.45678,5.67890],
        [45678,90.56789,6.78901],
        [56789,01.23456,7.89012]]
print(neigh.predict(predict_data))

4、KNN算法优缺点

  • 优点

    • 简单易懂:无需训练过程,实现简单。

    • 无参数学习:除了K值外,没有其他需要调节的参数。

    • 适用于多分类问题。

  • 缺点

    • 计算成本高:特别是对于大规模数据集,每次预测都需要遍历整个训练集。

    • 对噪声敏感:训练数据中的异常值会对预测结果产生较大影响。

    • 存储需求大:需要存储全部训练数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值