邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是k个最近的邻居的意思,说的是每一个样本均可以用它最接近的k个邻居来表明。
kNN算法的核心思想是若是一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具备这个类别上样本的特性。该方法在肯定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别。 kNN方法在类别决策时,只与极少许的相邻样本有关。因为kNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来肯定所属类别的,所以对于类域的交叉或重叠较多的待分样本集来讲,kNN方法较其余方法更为适合。html
安装Ubuntu16.04桌面版 or 安装好桌面的服务器版python
安装numpy,numpy是什么算法
pip install numpy # 在国内每每会安装失败,若是安装失败,可经过先wget xxx.whl在运行pip install解决 # 好比: wget https://pypi.python.org/packages/5e/d5/3433e015f3e4a1f309dbb110e8557947f68887fe9b8438d50a4b7790a954/numpy-1.11.2-cp27-cp27mu-manylinux1_x86_64.whl#md5=fa62a11922a9e0776963508fb5254d3d pip install numpy-1.11.2-cp27-cp27mu-manylinux1_x86_64.whl
安装matplotlib,matplotlib是什么segmentfault
pip install matplotlib # 如安装失败的话,解决办法参考安装numpy的解决办法
# encoding: utf-8 import cv2 import numpy as np import matplotlib.pyplot as plt train_data = np.random.randint(0, 100, (25, 2)).astype(np.float32) responses = np.random.randint(0, 2, (25, 1)).astype(np.float32) red = train_data[responses.ravel() == 0] plt.scatter(red[:,0], red[:,1], 80, 'r', '^') blue = train_data[responses.ravel() == 1] plt.scatter(blue[:,0], blue[:,1], 80, 'b', 's') # plt.show() newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32) plt.scatter(newcomer[:,0], newcomer[:,1], 80, 'g', 'o') knn = cv2.ml.KNearest_create() knn.train(train_data, cv2.ml.ROW_SAMPLE, responses) ret, results, neighbours, dist = knn.findNearest(newcomer, 5) print("result: ", results) print("neighbours: ", neighbours) print("distance: ", dist) plt.show()
生成待训练的数据和标签服务器
train_data = np.random.randint(0, 100, (25, 2)).astype(np.float32) responses = np.random.randint(0, 2, (25, 1)).astype(np.float32)
在图中标记红色样本dom
red = train_data[responses.ravel() == 0] plt.scatter(red[:,0], red[:,1], 80, 'r', '^')
在图中标记蓝色样本spa
blue = train_data[responses.ravel() == 1] plt.scatter(blue[:,0], blue[:,1], 80, 'b', 's')
产生待分类数据.net
newcomer = np.random.randint(0, 100, (1, 2)).astype(np.float32) plt.scatter(newcomer[:,0], newcomer[:,1], 80, 'g', 'o')
训练样本并产生分类3d
knn = cv2.ml.KNearest_create() knn.train(train_data, cv2.ml.ROW_SAMPLE, responses)
给新数据分类
ret, results, neighbours, dist = knn.findNearest(newcomer, 5)
在图中显示全部数据
plt.show()