目录
- 介绍
- 话不多说,进入实战
- 注意事项
- KNN算法的优势和劣势
介绍
1968年,Cover和Hart提出K近邻算法。该算法既可以用于回归也可以用于分类,其用于分类时其输入为实例的特征向量,输出为实例的类别。假设给定一个训练数据集,其中实例类别已知。度量每个样本点到其他样本点的距离,选择其中K个距离最近的样本点,按照多数表决原则对新的实例进行分类。
KNN的全称是K Nearest Neighbors,意思是K个最近的邻居,从这个名字我们就能看出一些KNN算法的蛛丝马迹了。K个最近邻居,毫无疑问,K的取值肯定是至关重要的。那么最近的邻居又是怎么回事呢?其实啊,KNN的原理就是当预测一个新的值x的时候,根据它距离最近的K个点是什么类别来判断x属于哪个类别。
我们知道K的取值比较重要,那么该如何确定K取多少值好呢?答案是通过交叉验证(将样本数据按照一定比例,拆分出训练用的数据和验证用的数据,比如6:4拆分出部分训练数据和验证数据),从选取一个较小的K值开始,不断增加K的值,然后计算验证集合的方差,最终找到一个比较合适的K值。
话不多说,进入实战
- knn的matlab实验【使用UCI数据集】
首先加载数据
load fisheriris
X = meas;
Y = species;
之后直接上内置函数
mdl = fitcknn(X,Y,'NumNeighbors',5,'Standardize',1);
这样就获得了KNN模型
下一步,就可以直接使用了
Xnew = [min(X);mean(X);max(X)];
[label,score,cost] = predict(mdl,Xnew)
这样便得到了结果
注意事项
训练和测试之前需要对数据标准化、归一化处理,不然可能结果无法达到预期。
KNN算法的优势和劣势
了解KNN算法的优势和劣势,可以帮助我们在选择学习算法的时候做出更加明智的决定。那我们就来看看KNN算法都有哪些优势以及其缺陷所在!
- KNN算法优点
简单易用,相比其他算法,KNN算是比较简洁明了的算法。即使没有很高的数学基础也能搞清楚它的原理。
模型训练时间快,上面说到KNN算法是惰性的,这里也就不再过多讲述。
预测效果好。
对异常值不敏感这里是引用
- KNN算法缺点
对内存要求较高,因为该算法存储了所有训练数据
预测阶段可能很慢
对不相关的功能和数据规模敏感