机器学习之最近邻算法
小白,最近在学习Python的机器学习课程,最近邻算法,对应中国的古话:近朱者赤近墨者黑
举个例子,你想知道某个人A的职业,你可以通过他身边朋友的职业来猜测,比如他有n个朋友,一个做设计的铁哥们B,一个做房产中介的高中同学C,还有两个玩的比较好的是做码农的D和E。我们来量化一下几人的关系A B<AC<A D,AE<A~others
k近邻算法中的k值的选择,如果我们选k=2,k=3或者k=4时,得出1:1:1,选取最近的B,那么我们猜测A的职业为设计师,当我们选择k=5时,1:1:2,我们猜测A的职业为码农
图片:
下面是看的课程的代码示例,Python版本为3.6版本
import numpy as np
import operator
# inX 要检测的数据
# dataSet 数据集
# labels 结果集
# k 选择距离最小的K个点
def classify0(inX,dataSet,labels,k):
# 计算矩阵的行数
dataSetSize = dataSet.shape[0]
# 第一个维度重复1次,第二个维度重复dataSetSize次
diffMat = np.tile(inX,(dataSetSize,1))-dataSet
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis = 1)
distances = sqDistances**0.5
sortedDistIndicies = distances.argsort()
# argsort()函数返回的是distances元素从小到大排列后相应元素的索引。如a=array([2,1,5,3]),a.argsort() 的结果为:[1,0,3,2]
classCount = {
} # 分类标签字典 标签:标签出现次数
for i in range(k):
# 选出k个距离最近的数据
voteILabel = labels[sortedDistIndicies[i