关于KNN算法入门
knn全称是k-nearest neighbors,通过寻找k个距离最近的数据,来确定当前数据值的大小或类别。是机器学习中最为简单和经典的一个算法。
一、什么是KNN算法
knn全称是k-nearest neighbors,通过寻找k个距离最近的数据,来确定当前数据值的大小或类别。是机器学习中最为简单和经典的一个算法。
二、KNN算法距离公式
(1).欧氏距离公式
1、二维空间距离公式
二维空间中,有a(x1,y1)和b(x2,y2)两点,则其两点之间的欧氏距离为:
2、三维空间距离公式
三维空间中,有a(x1,y1,z1)和b(x2,y2,z2)两点,则其两点之间的欧氏距离为:
3、n维空间距离公式
在n维空间中,有和
两点,距离公式表达为
(2)哈曼顿距离
曼哈顿距离也称为L1距离或出租车几何,对于n为空间的两个点和
,曼哈顿距离公式为:
假设左下角的点为右上角的点为
,那么它们之间的曼哈顿距离用公式表示为 :
三、KNN算法核心思想
其实,KNN 的原理就是:当预测一个新样本的类别时,根据它距离最近的 K 个样本点是什么类别来判断该新样本属于哪个类别。
图中粉色的心就是我们要预测的那个点,假设K=3。那么KNN算法就会找到与它距离最近的三(这里用圆圈把它圈起来了),看看哪种类别多一些,比如这个图中是蓝色正方形多一些,那么就可以将这个心归为蓝色这一类数据。但是,当K=1的时候,判定就变成不一样了。这次变成黑色多一些,所以被归类成黑色这类数据。从这个例子中,我们就能看得出K的取值是很重要的。所以knn算法有两个细节就是 1、k值得选择和2、距离的计算。
四、KNN算法--sklearn
Sklearn (Scikit-Learn) 是基于 Python 语言的第三方机器学习库。它建立在 NumPy, SciPy, Pandas 和 Matplotlib库 之上,里面的 API 的设计非常好,所有对象的接口简单,很适合新手上路。
下面是sklearn安装的方法:在电脑命令行中输入以下代码即可
pip install scikit-learn -i https://pypi.tuna.tsinghua.edu.cn/simple/
然后sklearn使用的话大家可以在sklearn的官网上去查询
https://scikit-learn.org/, 到这个网站去搜索k-nearest neighbors,这里要注意版本的问题,要选择自己对应的版本才行
五、实例
以下是个人对这段代码的一点简单介绍
#import numpy as np #from sklearn.neighbors import KNeighborsClassifier
- numpy:专门用于处理数组和矩阵数据
- KNeighborsClassifier:是 scikit-learn 中的一个分类器,用于实现 KNN 算法。
- np.loadtxt:从文件 datingTestSet2.txt 中读取数据。
- X= data[ :,:-1]#表示获取data数据中的每一行,每一列,但是不包含最后一列
- y= data[:,-1] #表示获取data数据中的最后一列。
- KNeighborsClassifier:创建一个 KNN 分类器对象。
- neigh.fit(x,y)#fit训练,x,y,模型就训练好了
- neigh.predict用于预测新样本的类别。
- [[36429,3.570968,0.832254]]:是一个新样本,包含 3 个特征值。输出是该样本的预测类别。
- [[9744,11.440364,0.760461],
- [16191,0.100000,0.605619],
- [42377,6.519522,1.058602],
- [27353,11.475155,1.528626]] 是四个学生的数据
- predict_data:是一个包含多个样本的列表,每个样本有 3 个特征值。
- neigh.predict(predict_data):对每个样本进行预测,并返回预测的类别列表
- 下面是该段代码运行结果
六、优缺点
优点:简单易用,相比其他算法,KNN算是比较简洁明了的算法。
模型训练时间快
预测效果好
对异常值不敏感
缺点:对内存要求较高,因为该算法存储了所有训练数据
预测阶段可能很慢
对不相关的功能和数据规模敏感。
更多推荐
所有评论(0)