机器学习实战(1 - 1) k-临近算法(kNN)

本算法没有用到训练模型等内容,属于相对来说比较简单的一个算法,《机器学习实战》这本书中已经给出了比较详细的介绍, 下面是对代码的整理

import numpy as np
import operator

def createDataSet():
    group = np.array([[1, 101], [5, 89], [108, 5], [115, 8]])
    labels = ['爱情片', '爱情片', '动作片', '动作片']
    return group, labels

def classify0(inX, dataSet, labels, k):
    dataSetSize = dataSet.shape[0]
    ##返回数据集的行列, 0代表的是行, 1是列
    diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet
    ##意思是 把inx这个向量在行方向上复制dataSetSize次, 列上复制一次。
    sqDiffMat = diffMat**2
    ##各自求平方
    sqDistances = sqDiffMat.sum(axis=1)
    ##按行开方
    distances = sqDistances**0.5
    sortedDistIndicies = distances.argsort()
    classCount={
    
    }
    ##进行循环排序
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
    #用值进行排序, 再取他的键(因为是字典)
    return sortedClassCount[0][0]

if __name__ == '__main__':
    group, labels = createDataSet()
    test = [101, 20]
    test_class = classify0(test, group, labels, 3)
    print(test_class)

猜你喜欢

转载自blog.csdn.net/weixin_45465598/article/details/115449302