《机器学习实战》(笔记)— k-近邻算法

作者:杨润炜
日期:2018/2/20 22:39

k-近邻算法

学习内容

  • 1.理解k-近邻算法的原理
  • 2.k-近邻算法的实现

我的理解

  • k-近邻算法一定作为分类识别,是一种较为简单直接的算法。将待识别的数据特征与数据集里的特征进行比较,通过一定规则算出与所有样本的距离,选取k个最相近的数据(通常k不大于20),k个最相似数据中出现次数最多的分类,就作为待识别数据的分类。
    虽然这种算法精度高、对异常值不敏感,然而也存在计算复杂度高的缺点。

  • 下面作一个k-近邻算法的简单示例:
    创建一个含有4个向量、分别属于AB两类的数据集:

    1. def createDataSet():
    2. group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    3. labels = ['A','A','B','B']
    4. return group, labels

    kNN分类算法实现:

    1. def classify0(inX, dataSet, labels, k):
    2. # 待识别数据与数据集每个样本的距离计算
    3. # 距离的计算使用欧氏距离公式
    4. dataSetSize = dataSet.shape[0]
    5. diffMat = tile(inX, (dataSetSize,1)) - dataSet
    6. sqDiffMat = diffMat**2
    7. sqDistances = sqDiffMat.sum(axis=1)
    8. distances = sqDistances**0.5
    9. sortedDistIndicies = distances.argsort()
    10. classCount={}
    11. # 获取距离最小的k个点
    12. for i in range(k):
    13. voteIlabel = labels[sortedDistIndicies[i]]
    14. classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
    15. # 使用operator模块的itemgetter方法,排序并返回发生频率最高的元素标签
    16. sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
    17. return sortedClassCount[0][0]

    运行效果:

    1. >>> import kNN
    2. >>> kNN.classify0([0,0], group, labels, 3)
    3. 'B'

    完整代码实现可查看:kNN,或者直接阅读《机器学习实战》第2章内容。

意义

理解并实现了kNN分类算法,掌握了这一简单直接的机器学习算法原理。

感谢您的阅读!
如果看完后有任何疑问,欢迎拍砖。
欢迎转载,转载请注明出处:http://www.yangrunwei.com/a/93.html
邮箱:glowrypauky@gmail.com
QQ: 892413924