机器学习----KNN算法

左手的ㄟ右手 2022-03-19 01:36 368阅读 0赞

KNN算法应该是机器学习中最简单的算法,其算法核心步骤如下:

对未知类别属性的数据集中的每个样本执行:
1.计算已知类别数据集中的点与当前点之间的距离
2.按照距离递增次序排序
3.选取当前点距离最小的K个点
4.确定前K个点所在类别的出现频率
5.返回前K个点出现频率最高的类别作为当前点的预测分类

纪录一下核心代码

  1. #knn算法实现
  2. def classify0(inX, dataSet, labels, k): #s测试向量 训练向量,标签, k值
  3. dataSetSize = dataSet.shape[0]
  4. diffMat = np.tile(inX, (dataSetSize,1)) - dataSet #tile()用于扩展矩阵 将测试向量Y方向复制到与训练数据一致
  5. sqDiffMat = diffMat**2
  6. sqDistances = sqDiffMat.sum(axis=1)
  7. distances = sqDistances**0.5 #求得距离
  8. sortedDistIndicies = distances.argsort() #返回排序的下标,从小到大
  9. classCount={ }
  10. for i in range(k):
  11. voteIlabel = labels[sortedDistIndicies[i]] #找到测试最近的前3个数据
  12. classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 #用字典计数
  13. sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
  14. #对字典排序,基于值,从大到小(逆序,reverse=True)
  15. return sortedClassCount[0][0]
  16. #导入数据集
  17. def file2matrix(filename):
  18. fr = open(filename)
  19. numberOfLines = len(fr.readlines()) #get the number of lines in the file
  20. returnMat = np.zeros((numberOfLines,3)) #prepare matrix to return
  21. classLabelVector = [] #prepare labels return
  22. fr = open(filename)
  23. index = 0
  24. for line in fr.readlines():
  25. line = line.strip()
  26. listFromLine = line.split('\t')
  27. returnMat[index, :] = listFromLine[0:3]
  28. classLabelVector.append(int(listFromLine[-1]))
  29. index += 1
  30. return returnMat,classLabelVector
  31. #数值归一化
  32. #newValue=(oldvalue-min)/(max-min)
  33. def autoNorm(dataSet):
  34. minVals = dataSet.min(0) #返回该矩阵中每一列的最小值
  35. maxVals = dataSet.max(0)
  36. ranges = maxVals - minVals
  37. normDataSet = np.zeros(np.shape(dataSet))
  38. m = dataSet.shape[0]
  39. normDataSet = dataSet - np.tile(minVals, (m,1))
  40. normDataSet = normDataSet/np.tile(ranges, (m,1)) #element wise divide
  41. return normDataSet, ranges, minVals

发表评论

表情:
评论列表 (有 0 条评论,368人围观)

还没有评论,来说两句吧...

相关阅读

    相关 机器学习经典算法KNN

    一、前言 KNN 的英文叫 K-Nearest Neighbor,应该算是数据挖掘算法中最简单的一种。 先用一个例子体会下。 /\请尊重作者劳动成果,转载请标明原文链接:

    相关 机器学习算法KNN

    原理 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 KNN算法不仅可以用于分类,还可以用于回归。

    相关 机器学习----KNN算法

    KNN算法应该是机器学习中最简单的算法,其算法核心步骤如下: 对未知类别属性的数据集中的每个样本执行: 1.计算已知类别数据集中的点与当前点之间的距离 2.按照距离递

    相关 [机器学习] k-近邻算法(knn)

    最近在参加大数据的暑期培训,记录一下学习的东西。   引言   懒惰学习法:简单的存储数据,并且一直等待,直到给定一个检验数据,才进行范化,以便根据与存储的训练元组的相似