一、K近邻算法详述
1.算法步骤
为了判断未知实例的实例,以已知实例的实例作为参照。
选择参数K(K个与未知实例最近邻的点,通常k是不大于20的整数)
计算未知实例与所有已知实例的距离。
选择K个最近K个已知实例的点。
根据少数服从多数的投票原则,让未知实例归类为K个最近邻样本中最多数的实例。
2.细节
距离的衡量方法:欧式距离、余弦值、相关度、曼哈顿距离等。
3.训练算法需要做什么
选择参数K以及距离衡量方法。
4.算法优缺点
4.1 优点:简单、易于理解、容易实现、通过对K的选择可以去噪声。
4.2 缺点:需要大量空间存储样本数据、算法复杂度高、不适用于样本不均衡的情况。
二、K近邻算法的sklearn用法
from sklearn import neighbors
from sklearn import datasets
knn = neighbors.KNeighborsClassifier()
knn.fit(iris.data,iris.target)
predictedLabel = knn.predict([[0.1,0.2,0.3,.04]])
三、使用K近邻分类鸢尾花
1.鸢尾花数据集(Iris)
实例个数:150个实例
数据维度:蕚片长度,蕚片宽度,花瓣长度,花瓣宽度。
分类数目:三个:Iris setosa,Iris versicolor,Iris virginica
2.实际代码
from sklearn import neighbors
from sklearn import datasets
knn = neighbors.KNeighborsClassifier()
iris = datasets.load_iris()
print iris
knn.fit(iris.data,iris.target)
predictedLabel = knn.predict([[0.1,0.2,0.3,.04]])
print predictedLabel
四、总结
可以看到鸢尾花的数据是已经经过特征提取的四维数据,因此使用最近邻是合适的。但是现在深度学习都是直接使用图片的像素作为输入特征,特征值多,且数据量大,使用最近邻是不适合的。