KNN算法
什么是knn算法
分类/回归算法
给定一个训练数据集,对新的的输入实例,在训练数据集中找到与该实例最邻近的的K个实例,这K个实例的多数属于某个类,就把该实例分为这个类。即寻找最近的k个数据,推测新数据的分类。
算法原理
通用步骤
-
计算距离(常用欧几里得距离或马氏距离)
-
欧几里得距离
c = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 c=\sqrt{\left(x_{1}-x_{2}\right)^{2}+\left(y_{1}-y_{2}\right)^{2}} c=(x1−x2)2+(y1−y2)2 -
曼哈顿距离
c = ∣ x 1 − x 2 ∣ + ∣ y 1 − y 2 ∣ c=\left|x_{1}-x_{2}\right|+\left|y_{1}-y_{2}\right| c=∣x1−x2∣+∣y1−y2∣ -
马氏距离
D M ( x , y ) = ( x − y ) T Σ − 1 ( x − y ) D_{M}(x, y)=\sqrt{(x-y)^{T} \Sigma^{-1}(x-y)} DM(x,y)=(x−y)TΣ−1(x−y)
-
-
特征归一
-
升序排列
-
取前k个
-
加权平均
x ˉ = x 1 f 1 + x 2 f 2 + ⋯ + x n f n n \bar{x}=\frac{x_{1} f_{1}+x_{2} f_{2}+\cdots+x_{n} f_{n}}{n} xˉ=nx1f1+x2f2+⋯+xnfn
k的选取
- k太大:导致分类模糊
- k太小:受个例影响,波动较大
如何选取k
-
经验
-
均方根误差
R M S E = 1 N ∑ i = 1 n ( X o b s , i − X model , i ) 2 R M S E=\sqrt{\frac{1}{N} \sum_{i=1}^{n}\left(X_{o b s, i}-X_{\text {model }, i}\right)^{2}} RMSE=N1i=1∑n(Xobs,i−Xmodel ,i)2 -
均方误差
M S E = ∑ e i 2 n M S E=\frac{\sum e_{i}^{2}}{n} MSE=n∑ei2