• 机器学习之KNN算法



    前言:主要介绍KNN算法的基本原理,公式、sklearn实现knn算法,以及knn的优点缺点使用场景等。


    1 KNN算法

    • KNN:中文名分类算法-k近邻算法。如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
    • 计算距离公式:
      a(a1, a2, a3), b(b1, b2, b3)
      在这里插入图片描述

    2 预测电影类型例子

    在这里插入图片描述
    根据上面的公式计算:
    (18-3)的平方+ (90-104)的平方,然后再开方结果:20.5182
    依次得出的结果为 356 开方为 18.8679
    依次得出的结果为 370 开方为 19.2353
    依次得出的结果为 13289 开方为 115.2779
    依次得出的结果为 13786 开方为 117.4137
    依次得出的结果为 14144 开方为 118.9285
    所以我们可以得出 打斗镜头18 接吻镜头90的电影类型为爱情片。

    3 sklearn实现KNN算法

    还是以预测电影类型为例子,用sklearn实现电影预测。
    数据截图:
    在这里插入图片描述

    import pandas as pd
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.model_selection import train_test_split
    from sklearn.preprocessing import StandardScaler
    import numpy as np
    
    
    def knncls():
        """
        K-近邻预测电影的类型
        """
        # 读取数据
        data = pd.read_csv("train.csv")
        # 取出数据当中的特征值和目标值
        y = data['电影类型'] #目标值
        x = data[['打斗镜头', '接吻镜头']] #特征值
        # print(x)
        # 进行数据的分割训练集合测试集
        x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20)
        # 特征工程(标准化)
        std = StandardScaler()
        # 对测试集和训练集的特征值进行标准化
        x_train = std.fit_transform(x_train)
        x_test = std.transform(x_test)
        # 进行算法流程 # 超参数
        knn = KNeighborsClassifier(n_neighbors=3)
        knn.fit(x_train, y_train)
        y_predict = knn.predict(x_test)
        print("预测的测试结果", y_predict)
        # 得出预测结果
        print(x_test)
        print(y_test)
        # 得出准确率
        print("预测的准确率:", knn.score(x_test, y_test))
    
        print("----------------------------------------------------")
        data_test = np.array([[3, 100], [1, 90], [2, 81], [101, 10], [99, 5], [98, 2]])  #自己的数据,预测电影的类型
        y_predict = knn.predict(data_test)
        print(y_predict)
        for i, k in zip(data_test, y_predict):
            print(i[0], "---------", i[1], "--------", k)
    
    if __name__ == '__main__':
        knncls()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    在这里插入图片描述

    4 总结

    • 优点:简单,易于理解,易于实现,无需估计参数,无需训练
    • 缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大必须指定K值,K值选择不当则分类精度不能保证
    • 使用场景:小数据场景,几千~几万样本,具体场景具体业务去测试
  • 相关阅读:
    C++:C++三方库创建web程序
    怎么把录音转换成mp3格式?
    【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.9 右键菜单事件
    WMS系统出库管理:优化仓储流程
    【QML】vscode安装QML格式化插件方法
    SolidWorks2021导出带材质的OBJ文件
    基于Unity3D的AVG卡牌游戏设计与实现
    微型操作系统内核源码详解系列五(1):arm cortex m3架构
    vue3基础铺垫之 async/await
    c# 实验七 图像列表框及树形视图控件的使用
  • 原文地址:https://blog.csdn.net/qq_32306361/article/details/126362384