【KNN算法详解(用法,优缺点,适用场景)及应用】

这篇具有很好参考价值的文章主要介绍了【KNN算法详解(用法,优缺点,适用场景)及应用】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

KNN算法介绍

KNN(K Near Neighbor):k个最近的邻居,即每个样本都可以用它最接近的k个邻居来代表。KNN算法属于监督学习方式的分类算法,我的理解就是计算某给点到每个点的距离作为相似度的反馈。

简单来讲,KNN就是“近朱者赤,近墨者黑”的一种分类算法。
【KNN算法详解(用法,优缺点,适用场景)及应用】

KNN是一种基于实例的学习,属于懒惰学习,即没有显式学习过程。

要区分一下聚类(如Kmeans等),KNN是监督学习分类,而Kmeans是无监督学习的聚类,聚类将无标签的数据分成不同的簇。
【KNN算法详解(用法,优缺点,适用场景)及应用】

KNN算法三要素

距离度量

特征连续:距离函数选用曼哈顿距离(L1距离)/欧氏距离(L2距离)【KNN算法详解(用法,优缺点,适用场景)及应用】
当p=1 的时候,它是曼哈顿距离
当p=2的时候,它是欧式距离
当p不选择的时候,它是切比雪夫
特征离散:汉明距离
【KNN算法详解(用法,优缺点,适用场景)及应用】
举最简单的例子来说明欧式/曼哈顿距离公式是什么样的。
【KNN算法详解(用法,优缺点,适用场景)及应用】
【KNN算法详解(用法,优缺点,适用场景)及应用】

K取值

在scikit-learn重KNN算法的K值是通过n_neighbors参数来调节的,默认值是5。

参考李航博士一书统计学习方法中写道的K值选择:

K值小,相当于用较小的领域中的训练实例进行预测,只要与输入实例相近的实例才会对预测结果,模型变得复杂,只要改变一点点就可能导致分类结果出错,泛化性不佳。(学习近似误差小,但是估计误差增大,过拟合)
K值大,相当于用较大的领域中的训练实例进行预测,与输入实例较远的实例也会对预测结果产生影响,模型变得简单,可能预测出错。(学习近似误差大,但是估计误差小,欠拟合)
极端情况:K=0,没有可以类比的邻居;K=N,模型太简单,输出的分类就是所有类中数量最多的,距离都没有产生作用。
【KNN算法详解(用法,优缺点,适用场景)及应用】
什么是近似误差和估计误差:

近似误差:训练集上的误差
估计误差:测试集上的误差

分类规则

knn使用的分类决策规则是多数表决,如果损失函数为0-1损失函数,那么要使误分类率最小即使经验风险最小,多数表决规则实际上就等同于经验风险最小化。

KNN实际应用

案例引入
我们先看一个案例,这样可以更直观的理解KNN算法。数据如下表,其中包括10个人的身高、体重和年龄数据,然后预测第十一个人的体重。
【KNN算法详解(用法,优缺点,适用场景)及应用】
为了更清晰地了解数据间的关系,我们用坐标轴将身高和年龄表示出来,其中横坐标为年龄(age)、纵坐标为身高(Height)。【KNN算法详解(用法,优缺点,适用场景)及应用】
通过上图可以看到,11点的值是需要求解的,那么怎么求呢?我们可以看到在图中11点更接近于5点和1点,所以其体重应该更接近于5点和1点的值,也就是在72-77之间,这样我们就可以大致得到11点的体重值。下面我们用算法来实现这一过程。
KNN算法工作

如上所述,KNN可以用于分类和回归问题,通过样本间的某些相似特征来进行预测未知元素的值,即“物以类聚”:相同或相似的事物之间具有一些相似的特征。

在分类问题中,我们可以直接将其最近的样本值作为预测结果,那么在回归问题中怎么计算最终的预测结果呢?就像上面的例子,11点取值介于72-77之间,最终结果应该取多少合适呢?一般来说,我们将其平均值作为最终的预测结果。

1、计算待测点到已知点的距离
【KNN算法详解(用法,优缺点,适用场景)及应用】
2、选择距离待测点最近的K个点,k值为人工设置的,至于k值如何设置合适在后边讨论。在这个例子中,我们假设k=3,即点1、5、6被选择。【KNN算法详解(用法,优缺点,适用场景)及应用】
3、将点1、5、6的值取平均值作为最终的预测结果。即11点的Weight=(77+72+60)/3 = 69.66 kg
K值选择

K值代表最近邻的个数,k值的选择对预测结果有较大影响。

在上面的例子中,我们选择k=3时
【KNN算法详解(用法,优缺点,适用场景)及应用】
最终的预测结果为

ID11 = (77+72+60)/3
ID11 = 69.66 kg

当我们选择k=5时
【KNN算法详解(用法,优缺点,适用场景)及应用】
最终的预测结果为

ID 11 = (77+59+72+60+58)/5
ID 11 = 65.2 kg
我们可以看到k值不同结果也将不同,因此我们需要选择一个合适的k值来获得最佳的预测结果。我们的目标就是获得预测值与真实值之间最小的误差。

下面我们看一下k值与误差的关系曲线

【KNN算法详解(用法,优缺点,适用场景)及应用】
【KNN算法详解(用法,优缺点,适用场景)及应用】
由曲线可得,如果K值太小,则会发生过拟合;如果k值太大,则会发生欠拟合。因此我们根据误差曲线选择最佳k值为9,你也可以使用其他方法寻找最佳k值。

python实现代码

1、读取数据

import pandas as pd
df = pd.read_csv('train.csv')
df.head()

2、处理缺失值

df.isnull().sum()
#missing values in Item_weight and Outlet_size needs to be imputed
mean = df['Item_Weight'].mean() #imputing item_weight with mean
df['Item_Weight'].fillna(mean, inplace =True)
 
mode = df['Outlet_Size'].mode() #imputing outlet size with mode
df['Outlet_Size'].fillna(mode[0], inplace =True)

3、处理分类变量并删除ID列

df.drop(['Item_Identifier', 'Outlet_Identifier'], axis=1, inplace=True)
df = pd.get_dummies(df)

4、划分训练集与测试

df.drop(['Item_Identifier', 'Outlet_Identifier'], axis=1, inplace=True)from sklearn.model_selection import train_test_split
train , test = train_test_split(df, test_size = 0.3)
 
x_train = train.drop('Item_Outlet_Sales', axis=1)
y_train = train['Item_Outlet_Sales']
 
x_test = test.drop('Item_Outlet_Sales', axis = 1)
y_test = test['Item_Outlet_Sales']
df = pd.get_dummies(df)

5、特征标准化

from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler(feature_range=(0, 1))
 
x_train_scaled = scaler.fit_transform(x_train)
x_train = pd.DataFrame(x_train_scaled)
 
x_test_scaled = scaler.fit_transform(x_test)
x_test = pd.DataFrame(x_test_scaled)

6、查看误差曲线

from sklearn import neighbors
from sklearn.metrics import mean_squared_error 
from math import sqrt
import matplotlib.pyplot as plt
%matplotlib inline
rmse_val = [] #to store rmse values for different k
for K in range(20):
    K = K+1
    model = neighbors.KNeighborsRegressor(n_neighbors = K)
 
    model.fit(x_train, y_train)  #fit the model
    pred=model.predict(x_test) #make prediction on test set
    error = sqrt(mean_squared_error(y_test,pred)) #calculate rmse
    rmse_val.append(error) #store rmse values
    print('RMSE value for k= ' , K , 'is:', error)
curve = pd.DataFrame(rmse_val) #elbow curve 
curve.plot()

输出
【KNN算法详解(用法,优缺点,适用场景)及应用】
由误差曲线可得我们选择k=7可以获得最优结果

预测结果

test = pd.read_csv('test.csv')
submission = pd.read_csv('SampleSubmission.csv')
submission['Item_Identifier'] = test['Item_Identifier']
submission['Outlet_Identifier'] = test['Outlet_Identifier']
 
#preprocessing test dataset
test.drop(['Item_Identifier', 'Outlet_Identifier'], axis=1, inplace=True)
test['Item_Weight'].fillna(mean, inplace =True)
test = pd.get_dummies(test)
test_scaled = scaler.fit_transform(test)
test = pd.DataFrame(test_scaled)
 
#predicting on the test set and creating submission file
predict = model.predict(test)
submission['Item_Outlet_Sales'] = predict
submission.to_csv('submit_file.csv',index=False)

KNN算法优点,缺点,适用场景

优点

流程简单明了,易于实现
方便进行多分类任务,效果优于SVM
适合对稀有事件进行分类
缺点

计算量大,T = O ( n ) T=O(n)T=O(n),需要计算到每个点的距离
样本不平衡时(一些分类数量少,一些多),前K个样本中大容量类别占据多数,这种情况会影响到分类结果
K太小过拟合,K太大欠拟合,K较难决定得完美,通过交叉验证确定K
适用场景

多分类问题
稀有事件分类问题
文本分类问题
模式识别
聚类分析
样本数量较少的分类问题文章来源地址https://www.toymoban.com/news/detail-453266.html

到了这里,关于【KNN算法详解(用法,优缺点,适用场景)及应用】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Redis详解,包括安装命令,应用场景,优缺点,案列分析,各个开发语言如何应用

    Redis 是一个基于内存的开源数据库系统,被广泛应用于 Web 应用、消息队列、缓存、实时统计等领域。下面是 Redis 的详解,包括安装命令、应用场景和优缺点,以及案列分析和各个开发语言如何应用。此外,还提供了一些具体代码示例。 Redis 的安装命令因操作系统而异。以下

    2024年02月15日
    浏览(42)
  • 二十四种设计模式与六大设计原则(三):【装饰模式、迭代器模式、组合模式、观察者模式、责任链模式、访问者模式】的定义、举例说明、核心思想、适用场景和优缺点

    接上次博客:二十四种设计模式与六大设计原则(二):【门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式】的定义、举例说明、核心思想、适用场景和优缺点-CSDN博客 目录 装饰模式【Decorator Pattern】 定义 举例说明 核心思想 适用场景 优缺点 迭代

    2024年04月17日
    浏览(60)
  • [机器学习]K-means算法详解:原理、优缺点、代码实现、变体及实际应用

    文章首发于若绾 [机器学习]K-means算法详解:原理、优缺点、代码实现、变体及实际应用,转载请注明出处。 K-means算法是一种非常流行的无监督学习方法,主要应用于聚类问题。本篇博客将详细介绍K-means算法的原理、优缺点及实际应用场景。 K-means算法的核心思想是将数据划分

    2024年02月08日
    浏览(41)
  • 浅谈 iframe的优缺点以及使用场景

    提示:以下是本篇文章正文内容 iframe 是嵌入式框架,是 HTML框架 ,还是一个 内联元素 ,iframe元素会创建包含另一个文档的内联框架(行内框架),说白了就是,iframe用来在页面嵌入其他的页面。 通常我们使用iframe直接在页面嵌套iframe标签指定src就可以了。 iframe能够把嵌入

    2024年02月05日
    浏览(64)
  • 四大常用MQ的优缺点和应用场景选择

      官网地址 :http://activemq.apache.org/ - 官网介绍 Apache ActiveMQ是最流行的开源、多协议、基于Java的消息代理。它支持行业标准协议,因此用户可以从多种语言和平台的客户端选择中获益。从JavaScript、C、C++、Python、.NET等多个客户端连接。使用无处不在的AMQP协议集成多平台应用程

    2023年04月22日
    浏览(43)
  • 主流的 NoSQL 数据库 应用场景 优缺点

    主流的 NoSQL 数据库包括 MongoDB、Cassandra、Redis 和 Couchbase 等,它们在不同的应用场景下具有各自的优势和局限性。 应用场景 :适用于需要灵活的数据模型和丰富的查询能力的场景,如内容管理系统、实时分析等。 优点 :灵活的数据模型,支持复杂的数据结构和查询。水平扩

    2024年01月25日
    浏览(53)
  • Apache和Nginx的优缺点及各自使用的场景

    Apache和Nginx是两个常见的Web服务器,它们在性能、架构设计和适用场景上有一些不同之处。 Apache: 优点: 模块丰富: Apache支持大量的第三方模块,提供了很大的灵活性和可扩展性。 .htaccess 文件: Apache允许使用.htaccess文件进行配置,使得配置更加灵活,而无需修改主配置文

    2024年01月21日
    浏览(45)
  • ext3 文件系统的特点、优缺点以及使用场景

    ext3(Third Extended File System)是 ext2 文件系统的后续版本,它在 ext2 文件系统的基础上增加了日志功能,以提高文件系统的可靠性和稳定性。下面是 ext3 文件系统的特点、优缺点以及使用场景: 特点: ext3 文件系统是 ext2 文件系统的升级版本,具有兼容性好、稳定可靠等优点,

    2024年02月03日
    浏览(44)
  • 浅谈 ext2 文件系统的特点、优缺点以及使用场景

    ext2(Extended File System 2)是 Linux 中最早的一种文件系统,它是 Linux 文件系统的基础,也被广泛用于其他类 Unix 系统中。下面是 ext2 文件系统的特点、优缺点以及使用场景: 特点: ext2 文件系统可以支持大容量的存储设备,最大支持 32 TB 的文件系统大小。 ext2 文件系统使用块

    2024年02月03日
    浏览(45)
  • 简述 TCP 和 UDP 的区别以及优缺点和使用场景?

    1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接 2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付。Tcp通过校验和,重传控制,序号标识,

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包