手写k-近邻算法
k-近邻算法的工作原理:存在一个样本数据集合,也成为训练样本集,样本集中的每一个数据都存在标签。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似的数据的分类标签。选择样本数据集中的前k个最相似的k个数据,将k个最相似数据中出现次数最多的分类作为新数据的类别。
k-近邻算法Python实现(手写)
## KNN.py
from numpy import *
import numpy as np
import operator
def createDataSet():
group=np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels=['A','A','B','B']
return group,labels
def classify0(inX,dataSet,labels,k):
dataSetSize=dataSet.shape[0]
diffMat=tile(inX,(dataSetSize,1))-dataSet
sqDiffMat=diffMat**2
sqDistance=sqDiffMat.sum(axis=1)
distance=sqDistance**0.5
sorted_d=distance.argsort()
classCount={}
for i in range(k):
votel=labels[sorted_d[i]]
classCount[votel]=classCount.get(votel,0)+1
sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
return sortedClassCount[0][0]
##test0.py
import KNN
group,labels=KNN.createDataSet()
print(KNN.classify0([0,0],group,labels,3))
sklearn实现k-近邻算法
## KNN.py
from numpy import *
import numpy as np
import operator
def createDataSet():
group=np.array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels=['A','A','B','B']
return group,labels
## sklearn_classify.py
import KNN
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
x_train=np.array([[0,0],[1,1]])
groups,labels=KNN.createDataSet()
clf=KNeighborsClassifier(n_neighbors=3)
clf.fit(groups,labels)
print(clf.predict(x_train))