• 【明日方舟 人工智能】在罗德岛学习人工智能的日子 (一)


    K 值 近邻算法

    某样本在特征空间中如果有一个与其最相似的样本属于某个类别,那么这个样本也是属于这个类别

    比如距离:
    p = ( x 1 − x 2 ) 2 + ( y 1 − y 2 ) 2 p = \sqrt {(x_1 - x_2)^2 + (y_1 - y_2)^2} p=(x1x2)2+(y1y2)2
    当然我们数据之间可以没有距离这种差别, 比如电影的类别,员工的分类都是可以使用该公式的

    案例分析

    太糟糕了 ! 斯卡蒂突然找到博士,说自己是忘记了自己一起在深海猎人时候的伙伴 ! 幸好我们有数据来帮忙,快帮忙找找吧!

        名字  对猫的好感  对狗的好感  喜欢运动的程度
    0  斯卡蒂     70     92      100
    1  幽灵鲨     80     79       80
    2  凯尔希    100     82        0
    3  阿米娅    100    100      100
    
    • 1
    • 2
    • 3
    • 4
    • 5

    代码:

    import pandas as pd
    
    finder = 0  # 斯卡蒂在数据的第0行
    df = pd.read_excel('./我要贴贴.xlsx')  # 读取文件
    
    df['评分'] = (
            (
                    (df['对猫的好感'][0] - df['对猫的好感']) ** 2 +
                    (df['对狗的好感'][0] - df['对狗的好感']) ** 2 +
                    (df['喜欢运动的程度'][0] - df['喜欢运动的程度']) ** 2
            ) ** .5
    )  # 对斯卡蒂的距离做评分
    
    print(df)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    这是结果

        名字  对猫的好感  对狗的好感  喜欢运动的程度          评分
    0  斯卡蒂     70     92      100    0.000000
    1  幽灵鲨     80     79       80   25.865034
    2  凯尔希    100     82        0  104.880885
    3  阿米娅    100    100      100   31.048349
    
    • 1
    • 2
    • 3
    • 4
    • 5

    除了自己 斯卡蒂大概的伙伴就是离他最相似的幽灵鲨吧~ 事实上确实如此

    (话说斯卡蒂甚至92点喜欢我~)

    案例二

    又是健忘的斯卡蒂找到博士,说忘记自己是干什么的了,这可真是下头,但是我们还是可以进行操作

    名字法伤物伤防御类型
    斯卡蒂0400100
    幽灵鲨035080近卫
    凯尔希02000医疗
    阿米娅40000法师
    星熊0430800
    德克萨斯30300200先锋
    拉普兰德038090近卫
    闪灵03200医疗
    霞光0130400
    捣蛋鬼039090辅助

    还是这么操作:

    """
    需求:
    
    """
    import pandas as pd
    from sklearn.neighbors import KNeighborsClassifier
    
    
    finder = 0  # 斯卡蒂在数据的第0行
    df = pd.read_excel('./干员表.xlsx')  # 读取文件
    
    df['评分'] = (
            (
                    (df['法伤'][0] - df['法伤']) ** 2 +
                    (df['物伤'][0] - df['物伤']) ** 2 +
                    (df['防御'][0] - df['防御']) ** 2
            ) ** .5
    )  # 对斯卡蒂的距离做评分
    
    print(df)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
         名字   法伤   物伤   防御   类型          评分
    0   斯卡蒂    0  400  100  NaN    0.000000
    1   幽灵鲨    0  350   80   近卫   53.851648
    2   凯尔希    0  200    0   医疗  223.606798
    3   阿米娅  400    0    0   法师  574.456265
    4    星熊    0  430  800700.642562
    5  德克萨斯   30  300  200   先锋  144.568323
    6  拉普兰德    0  380   90   近卫   22.360680
    7    闪灵    0  320    0   医疗  128.062485
    8    霞光    0  130  400403.608721
    9   捣蛋鬼    0  390   90   辅助   14.142136
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    emm 斯卡蒂和捣蛋鬼最近 那他就是辅助吧!

    是吗? 不是!

    我们可以看见如果吧捣蛋鬼拿开我们可以看见两个近卫角色都紧挨着斯卡蒂很明显斯卡蒂是个近卫嘛!

    所以我们不能单独看一个挨着样本的相似样本而是找一个组,通过组内,这个组有X人不等(X最好是奇数方便我们投票选择) 这个X就是我们的K值 所以才叫K值近邻算法嘛。

    Sklearn 的使用

    白咕咕说博士真是个笨蛋(实际上也是的), 明明可以使用 sklearn 非要那么麻烦

    import pandas as pd
    from sklearn.neighbors import KNeighborsClassifier  # sklearn.neighbors是相邻算法之一
    
    finder = 0  # 斯卡蒂在数据的第0行
    df: pd.DataFrame = pd.read_excel('./干员表.xlsx')  # 读取文件
    
    X_TZ, X_GROUP = df.iloc[1:, 1:4], df.iloc[1:, 4]
    """
    X_TZ 放置着数据的特征值 如法伤物伤防御 记住不要把斯卡蒂的数据放进去了 他是需要进行预测而不是训练的的!
    
    X_GROUP 这些特征值可以得到的结果是什么 他的数据个数需要和X_TZ相似 
            但是形状可以不同
    """
    
    model = KNeighborsClassifier(n_neighbors=3)  # n_neighbors就是我们所说的 K值
    model.fit(X_TZ, X_GROUP)  # 把数据交给模型吧
    
    ret = model.predict(df.iloc[:1, 1:4])  # 把斯卡蒂带进去看看?
    print(ret)
    # ['近卫']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    这样的数据确实舒服了

    总结

    我们做个总结

    • 什么是K值邻近算法(一个分类算法)
    • K值近邻算法的原理(欧式距离公式)
    • sklearn实现K值近邻算法
    • 取多个样本的好处:避免异常的问题出现导致(数值相似但是不是同一类型样本的出现)我们的模型Bug
  • 相关阅读:
    【低代码开发_RuoYi_框架】RuoYi框架_前端页面部署/搭建
    RK3399驱动开发 | 18 - 使用 usb3.0 作为device模拟u盘(基于linux5.4.32内核)
    接口测试 —— 接口测试的意义
    java基于ssm的图书销售库存管理入库信息系统
    线上化变迁,使得销售与市场的脱节像一场濒临破裂的婚姻!
    如何使用 FaceIO 在 Vue.JS 中实现人脸识别?
    Ansible系列 | Ansible多种变量类型详解
    Market Insight:中国低代码/零代码市场典型供应商名录(2023)发布
    安装单机hbase
    使用jupyter的一些常识
  • 原文地址:https://blog.csdn.net/tc9527_/article/details/127877085