梅科尔工作室-深度学习-KNN

目录

1.KNN介绍

2.实例解析

2.1.数据集及处理

2.1.1.数据集介绍

2.1.2.数据集展示

2.1.3.数据集处理

2.2.KNN算法展示


1.KNN介绍

        knn(K-Nearest Neighbor))简称k近邻算法,当判断一个新的数据是属于哪一类时,通过计算离这个数据最近的k个数在哪个分类最多得出这个数据是属于哪个类。knn训练的必须是监督型任务。

        中间方块是新来的数据,现在想要判断这个方块是属于哪一类。当选的k为3时,由图可知,这个数据被划在三角类;如果k=5,可以看出三个圆离得近,两个三角离的近,因此这个数据被划分在圆圈类中。从这里可以看出k的选值对KNN算法的准确率还是有影响的。

扫描二维码关注公众号,回复: 17030802 查看本文章

2.实例解析

2.1.数据集及处理

2.1.1.数据集介绍

数据集来自UCI Machine Learning Repository: Wine Quality Data Set

这里选取了红葡萄酒数据集中的前100条数据

以下为数据集特征介绍,当quality大于5时,品质为佳

2.1.2.数据集展示

        可以看出 ,数据集格式存在一些问题,csv每条数据规范点应该是以逗号分隔,而这里用的是分号(;)导致打开excel展示数据出错,之后处理也会出现问题。接下来我们对数据进行处理。将分号改为逗号,因为要处理数据,所以选取了前一百条数据,原数据集数据还是比较多的。

2.1.3.数据集处理

         思路就是一次性读取所有值(比较方便,这里只做展示),因为是前100条所以占内存不大。将修改后的数据存储在字符串,之后再覆盖原有文件。

2.2.KNN算法展示

        读取文件利用列表生成器以及csv自带库将数据以字典形式一条条存储在列表,因为原数据集产品质量是用字符形式的数字组成的,为了方便之后分类(两类,大于5为good,其他bad)将数据全部替换成两级分类标签。

打乱列表字典顺序后,将数据集分为训练集与测试集,8:2的比例。

         计算所要分类的点与附近的点的距离,这里所用的是欧式距离,可以类比两点间的距离公式,这里是多维的数据,并且每一维是数值而不是离散的分类标签。

下面是knn算法代码

def knn(data, k):
    res = [
        {"result": train["quality"], "distance": distance(data, train)}
        for train in train_data
    ]
    sorted(res,key=lambda a:a["distance"])

    res1 = res[:k]
    good = 0
    bad = 0
    for i in res1:
        if i["result"] == "good":
            good += 1
        else:
            bad += 1
    if good > bad:
        return "good"
    else:
        return "bad"
    # result = {"good": 0, "bad": 0}
    # # 4.1 总距离
    # sum = 0
    # for r in res1:
    #     sum += r["distance"]
    # # 4.2 计算权重
    # for r in res1:
    #     result[r['result']] += 1 - r["distance"] / sum
    #
    # # 4.3 得出结果
    # if result['good'] > result['bad']:
    #     return "good"
    # else:
    #     return "bad"

         创建一个新的只有两个键的字典组成的列表一个存放类别,一个存放距离。用sorted函数进行升序排列。key的值用固定的lambda函数,后面的字母是任取的并且按照第二个进行排序,如b:b["distance"]表示按照键“distance”进行排序。

        排序后选取前k个数据进行计算哪一类的数据多,你可以采用第一种计算个数的方式,也可以采用第二种计算权值的方式。

验证哪个k的准确率更高,因为选取的数据比较少,所以得出的准确率就当看看了。

        因为前一百条数据基本上都是good型数据,不合格的葡萄酒样品只有个别几个,所以出现这种情况。 

猜你喜欢

转载自blog.csdn.net/qq_59744114/article/details/126286583
今日推荐