【机器学习实战】k-近邻算法

算法基本思想

     存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

关键函数编程实现

def classify0(inX, dataset, labels, k):
    """
    :param inX: 待分类数据
    :param dataset: 分类样本数据
    :param labels: 样本类别
    :param k: 距离最小的k个点
    :return: 返回分类分类标签
    """
    # 距离计算
    datasize = dataset.shape[0]  # 数据行数
    diffMat = tile(inX, (datasize, 1)) - dataset
    sqDiffMat = diffMat ** 2
    sqDistances = sqDiffMat.sum(axis=1)
    distances = sqDistances ** 0.5
    sortedDistIndicies = distances.argsort()  # 将元素从小到大排列,提取其对应的原来数据的index(索引)

    # 选择最近的K个点
    classcount = {}
    for i in range(k):
        voteLabel = labels[sortedDistIndicies[i]]
        classcount[voteLabel] = classcount.get(voteLabel, 0) + 1  # get()如果不存在,返回零值

    # 对字典进行排序
    sortedClassCount = sorted(classcount.iteritems(), key=operator.itemgetter(1), reverse=True)

    return sortedClassCount[0][0]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容