**************写在最前**************
此文为学习过程中的总结归纳和部分个人想法,仅记录而已,持续更新........
力薄才疏,恳请大家如果发现有什么问题请一定积极留言交流哦~~
个人认为:机器学习中监督学习虽可分为回归和拟合,方法较多,有必要从基本简单的一步一步学习,虽不必要对每个公式都推导一遍,但是最起码要知道原理,因为后面比较难的算法都是在基础算法的基础上进行增加和提升的。东拼西凑的学习还是觉得不扎实。当然本人还是小小白。
注:来自书籍机器学习实战
KNN基本原理:
k-近邻算法,实现分类作用,其中k的意思就是选择和目标k个距离最近的点来判断目标属于哪一类。其中距离采用欧式距离。
注意:a. 使用字典; b.使用迭代器
以下代码来自机器学习实战相关章节,这里只是自己编写实现罢了
#-*-coding:utf-8-*-
"""
aiming to achive the KNN algorithm
"""
import numpy as np
import operator
def KnnClassfy(test_x,train_x,train_y,k):
m=train_x.shape[0]
diffMat=np.tile(test_x,(m,1))-train_x
sqDiffMat=diffMat**2 # 欧式距离
sqDistance=sqDiffMat.sum(axis=1) # 行相加
distance=sqDistance**0.5
sortedDistanceIndex=distance.argsort() # 从小到大排序
classCount={}
for i in range(0,k): # 选择前 k 个
voteLabel=train_y[sortedDistanceIndex[i]]
classCount[voteLabel]=classCount.get(voteLabel,0)+1
sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True) # 从大到小排序
return sortedClassCount[0][0]
if __name__=='__main__':
# the dataset
train_x=np.array([[0,0],[0.1,0.1],[1.0,1.0],[1.1,1.4]])
train_y=np.array(['A','A','B','B'])
test_x=np.array([[0.2,0.1]])
test_y=KnnClassfy(test_x,train_x,train_y,3)
print ("the classsfied result of KNN is %s " % (test_y))