深度学习 L4 k-邻近算法模型
- 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
- 🍖 原作者:K同学啊
基本概念
假设有一堆数据,每个数据点都有某些特征(比如颜色、大小、重量等),并且每个数据点被分成了不同的类别(如圆形、正方形、三角形)
现在有一个新的输入数据,不知道它属于哪个类别,需要通过k-邻近算法给它分类
KNN的原理:根据新数据点附近的k个相邻点是什么类别,通过这些邻近点的类别,确定新数据点的类别。
具体步骤
- 计算距离:KNN首先计算新数据点和已知数据点之间每个点的”距离“,一般使用欧几里得距离(如测量两点之间的直线距离)
- 找到K个最近的点:选出和新数据点距离最近的K个数据点,这些点就是新数据的邻近点
- 投票决定类别:根据这K个邻近点中最多种类的数据点,决定新数据点的种类
举例:假设有一张列有不同水果(如香蕉、苹果、梨子)特征信息(如颜色、大小、气味)的表格。现在有一个新的水果,不知道属于什么类别,需要根据这张表格判定。
KNN就会根据这张表格中的特征信息,找到和这个水果颜色、大小、气味最相近的K个水果。如果K个中最多的是香蕉,就会判定这个水果是香蕉
注意事项
K值的选择:K需要手动设定,即我们需要考虑多少个邻居。K值太小,预测受单个点影响太大;K值太大,会计入太多不相关的邻居,影响结果。
代码实现
通过sklearn包来实现KNN
环境配置
语言环境:Python3.9
编译器:Jupyter Lab
1.问题简介:
帮助海伦用KNN模型通过以下参数对约会网站的潜在对象进行分类:
- 每年获得的飞行常客里程数
- 玩视频游戏所耗时间百分比
- 每周消费的冰淇淋公升数
分类类别:
- 不喜欢的人
- 魅力一般的人
- 极具魅力的人
2.导入数据
数据标签详解
0:每年获得的飞行常客里程数
1:玩视频游戏所耗时间百分比
2:每周消费的冰淇淋公升数
3:人物类别(不喜欢的人、魅力一般的人、极具魅力的人)
导入数据集
import pandas as pd
data=pd.read_table('C:/Users/65106/OneDrive/Desktop/ML camp/L4/datingTestSet2.txt',
sep='\t',
header=None)
data.head()
选取参数变量和目标变量
X = data.iloc[:,:3]
Y = data.iloc[:,3]
调用sklearn model分割训练集和测试集
from sklearn.model_selection import train_test_split
#测试集占总数据集的25%
X_train, X_test, Y_train, Y_test = train_test_split(X, Y,
test_size=0.25,
random_state=3)
从sklearn中调用KNN邻近算法模型
from sklearn.neighbors import KNeighborsClassifier
knc = KNeighborsClassifier()
knc.fit(X_train, Y_train)
输出预测的结果
data["预测结果"] = knc.predict (data.iloc[:,:3])
data.head(10)
对算法进行评价
scoreK = knc.score(X_test,Y_test)
print(scoreK)
得分:0.796
总结
优点
简单易懂,适合初学者
缺点
不适用于数据量大的情况,计算每个点的距离会非常耗时;同事,对不相关的特征敏感,需要对数据进行预处理