• 【机器学习】knn算法自实现


     1 import pandas as pd
     2 import numpy as np
     3 
     4 
     5 def build_data():
     6     """
     7     加载数据
     8     :return:
     9     """
    10     # 1、加载数据
    11     data = pd.read_excel("./电影分类数据.xlsx")
    12 
    13     return data
    14 
    15 
    16 def distance(v1, v2):
    17     """
    18     计算距离
    19     :param v1:点1
    20     :param v2: 点2
    21     :return: 距离dist
    22     """
    23     # 法1
    24     # v1 是矩阵 将矩阵转化数组,再进行降为1维
    25     # v1 = v1.A[0]
    26     # print(v1)
    27     # sum_ = 0
    28     # for i in range(v1.shape[0]):
    29     #     sum_ += (v1[i] - v2[i]) ** 2
    30     # dist = np.sqrt(sum_)
    31     # print(dist)
    32     # 法2
    33     dist = np.sqrt(np.sum(np.power((v1 - v2), 2)))
    34     return dist
    35 
    36 
    37 def knn_owns(train, test, k):
    38     """
    39     自实现knn算法
    40     :param train:训练集
    41     :param test: 测试集
    42     :param k: 邻居个数
    43     :return: None
    44     """
    45     # 每一个测试样本需要与每一个的训练样本计算距离
    46     # for i in range(train.shape[0]):
    47     #     distance(test[1:], train.iloc[i, 1:])
    48     for index in train.index:
    49         dist = distance(test[1:].values, train.loc[index, "搞笑镜头":"打斗镜头"].values)
    50         train.loc[index, "dist"] = dist
    51 
    52     # 按照距离升序排序
    53     res = train.sort_values(by="dist").head(k)["电影类型"].mode()
    54 
    55     # print(train)
    56     print(res)
    57 
    58 
    59 def main():
    60     """
    61     主函数
    62     :return:
    63     """
    64     # 1、加载数据
    65     data = build_data()
    66     print("data:
    ", data)
    67     # 2、数据集拆分
    68     # 训练集
    69     train = data.iloc[:, 1:-4]
    70     print("train_
    ", train)
    71     # 测试集
    72     test = data.columns[-4:]
    73     print("test_:
    ", test)
    74     # 2、自实现knn
    75     # 指定k个邻居
    76     k = int(input("请输入邻居个数:"))
    77     # 邻居个数k 不同 结果不同
    78     knn_owns(train, test, k)
    79 
    80 
    81 if __name__ == '__main__':
    82     main()
    83 
    84 # 超参数: 人可以指定不同的值,来获取不同结果,k值在训练的过程中,不发生改变。
    85 # 超参数调优:超参数调整与优化,---不停的去尝试不同值的超参数,来获取最好的结果,那么此时所对应的超参数就是最优的
  • 相关阅读:
    了解外界的窗口
    博客添加卡通精灵
    LINUX chage 命令 以及常用参数
    Linux系统 端口知识以及相关监听工具
    Linux 常用命令之cp
    树莓派的知识分享
    ghost一键备份还原工具使用指南
    使用rsync在Windows(服务端)与Linux (客户端)之间的同步
    制作linux 随身碟
    白嫖!1000+个常用的Linux命令!
  • 原文地址:https://www.cnblogs.com/Tree0108/p/12116175.html
Copyright © 2020-2023  润新知