机器学习——k近邻算法

目录

一:KNN算法概述

1.介绍

2.原理

3.三大要素

二:k近邻算法的实现流程

三:一个关于k近邻算法的例子

四:k近邻算法的优缺点


一:KNN算法概述

1.介绍

KNN(K Near Neighbor):k个最近的邻居,即每个样本都可以用它最接近的k个邻居来代表。KNN算法是一种用于分类和回归的统计方法 ,可以说是最简单的分类算法之一。我的理解就是计算某给点到每个点的距离作为相似度的反馈。

2.原理

knn算法的核心思想是未标记样本的类别,由距离其最近的k个邻居投票来决定。具体的,假设我们有一个已标记好的数据集。此时有一个未标记的数据样本,我们的任务是预测出这个数据样本所属的类别。knn的原理是,计算待标记样本和数据集中每个样本的距离,取距离最近的k个样本。待标记的样本所属类别就由这k个距离最近的样本投票产生

如下,对于一个待分类的圆点,其类别就由k个距离最近的样本决策产生,当然k的取值不同,其最后的结果也会不同,因此,如何合适选择k的取值,也是我们需要思考的问题

简单来说,k近邻算法就是一种“近朱者赤近墨者黑”的分类算法

3.三大要素

k值的选取

当我们选择的k值较小时,泛化能力弱,容易受到异常点的影响(学习近似误差小,但是估计误差增大,过拟合)

当我们选择的k值较大时,模型复杂度降低,但是训练误差会增大,存在样本均衡的问题(学习近似误差大,但是估计误差小,欠拟合)

k值的选取应当适中,我们一般用交叉验证法搜索最优k值

距离度量:

常用的两种距离度量方法如下

欧氏距离:是最容易直观理解的距离度量方法,我们小学、初中和高中接触到的两个点在空间中的距离一般都是指欧氏距离。

在n维空间中,两点之间的欧几里得距离计算公式为:

$$d(x,y)=\sqrt{\sum{i-1}^{n}(x{i}-y_{i})^{2}}$$

曼哈顿距离:在曼哈顿街区要从一个十字路口开车到另一个十字路口,驾驶距离显然不是两点间的直线距离。这个实际驾驶距离就是“曼哈顿距离”。曼哈顿距离就是指两点之间在网格上的实际路径,也称为“城市街区距离”(City Block distance)。

在n维空间中,两点 之间的曼哈顿距离计算公式为:

$$d(x,y)=\sum{i-1}^{n}\vert x{i}-y_{i}\vert$$

分类决策规则

k近邻算法中的分类决策规则一般是多数表决。

二:k近邻算法的实现流程

1.收集准备数据:可以使用任何方法

2.计算已知类别数据集中的点与新样本点之间的距离并对其进行排序

3.选取合适的最近的k个点

4.进行平均或投票:在回归问题中,对于这k个点进行平均。对于分类问题,统计这K个点所在类别出现的频率,选取出现最高的作为新样本点的类别

5.返回结果作为当前点的预测值。

三:一个关于k近邻算法的例子

糖尿病预测算法

数据准备:

收集数据并将数据分为训练集和测试集

将人的身体状态(血压,胰岛素,葡萄糖等等)作为输入,是否患病作为输出

数据集如下所示

数据预处理

特征化处理

将数据划分为训练集和测试集

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)

print(X_train.shape)

print(X_test.shape)

print(y_train.shape)

print(y_test.shape)

对收集来的数据特征进行标准化处理

引入knn模型

n_neighbors:就是选取最近的点的个数k
p=2,metric='euclidean':使用欧几里得计算距离

classifier = KNeighborsClassifier(n_neighbors=11,p=2,metric='euclidean')

对测试集进行模型的训练

classifier.fit(X_train,y_train)

进行预测

y_pred = classifier.predict(X_test)

评估模型效果

对代码进行精确度评估

print(accuracy_score(y_test,y_pred))

结果为0.8181818181818182

证明本代码预测准度较高

其中关于k值的选择,可以用交叉验证或者网格搜索。

四:k近邻算法的优缺点

1.优点:算法简单易于理解实现且参数量较少

2.缺点:数据越多,计算量越大,效率越低,因此其难以运用到大型的数据集当中

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值