ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-10-02

2021-10-02 22:01:56  阅读:182  来源: 互联网

标签:02 10 labels 近邻 样本 trainData 算法 2021 数据


提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言


一、什么是K近邻算法

简单地说k近邻算法采用不同特征值之间的距离方法进行分类

k-近邻算法的核心思想为:对于一个给定的训练集,当新的样本到来时,找到训练集中与新样本距离最近的k个样本,然后查看这k个样本所属类别,并将新样本归类到这k个样本中大多数样本所属类别中

工作原理:

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

二、代码展示

import numpy as np
import operator


def knn(trainData, testData, labels, k):
    # 计算训练样本的行数
    rowSize = trainData.shape[0]
    # 计算训练样本和测试样本的差值
    diff = np.tile(testData, (rowSize, 1)) - trainData
    # 计算差值的平方和
    sqrDiff = diff ** 2
    sqrDiffSum = sqrDiff.sum(axis=1)
    # 计算距离
    distances = sqrDiffSum ** 0.5
    # 对所得的距离从低到高进行排序
    sortDistance = distances.argsort()

    count = {}

    for i in range(k):
        vote = labels[sortDistance[i]]
        count[vote] = count.get(vote, 0) + 1
    # 对类别出现的频数从高到低进行排序
    sortCount = sorted(count.items(), key=operator.itemgetter(1), reverse=True)

    # 返回出现频数最高的类别
    return sortCount[0][0]
trainData = np.array([[5, 8], [4, 1], [3, 3], [4, 4]])
labels = ['动作片', '动作片', '爱情片', '爱情片']
testData = [4, 2]
X = knn(trainData, testData, labels, 3)
print(X)

结果展示

 

参照博客链接:Python 实现 KNN(K-近邻)算法 - Max_Lyu - 博客园


总结

刚开始学习PYthon,有许多不懂的地方  还得再接再厉呀!!!!

标签:02,10,labels,近邻,样本,trainData,算法,2021,数据
来源: https://blog.csdn.net/qq_56451568/article/details/120586528

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有