一、算法原理与模型
knn算法即最近邻算法,其原理非常简单即根据给定的数据集,计算数据集中点的特征到待分类数据的欧氏距离,然后选择距离最近的k个作为判断依据,这k个数据中出现类别最多的作为新输入数据的label。模型用公式表示如下:
二、python代码实现
__author__ = 'Gujun(Bill)'
#knn code
#2018/03/07
import numpy as np
import random as rd
def countDistance(x1,x2):#计算欧氏 距离
dim = len(x1)
distance = 0
for i in range(dim):
distance += (x1[i]-x2[i])*(x1[i]-x2[i])
return np.sqrt(distance)
def do_predict(dataMax,sortedDistanceIndex,k):
temp = dict()#用字典存储对应的标签出现的次数
for i in range(k) :
temp[dataMax[sortedDistanceIndex[i]][-1]] += 1
return max(temp, key=temp.get) #出现频率最高的那个键的名字
def predict(dataMax,inputVec,k):
vec_num = dataMax.shape[0]
distances = vec_num*[0]
for i in range(vec_num):
distances[i] = countDistance(vec_num[i][:,-1])
sortedDistanceIndex = np.argsort(distances)
class_lable = do_prodict(dataMax,sortedDistanceIndex,k)
print("分类结果:",class_lable)