zoukankan      html  css  js  c++  java
  • 【机器学习】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 # 超参数调优:超参数调整与优化,---不停的去尝试不同值的超参数,来获取最好的结果,那么此时所对应的超参数就是最优的
  • 相关阅读:
    Oracle SQL语句大全—查看表空间
    Class to disable copy and assign constructor
    在moss上自己总结了点小经验。。高手可以飘过 转贴
    在MOSS中直接嵌入ASP.NET Page zt
    Project Web Access 2007自定义FORM验证登录实现 zt
    SharePoint Portal Server 2003 中的单一登录 zt
    vs2008 开发 MOSS 顺序工作流
    VS2008开发MOSS工作流几个需要注意的地方
    向MOSS页面中添加服务器端代码的另外一种方式 zt
    状态机工作流的 SpecialPermissions
  • 原文地址:https://www.cnblogs.com/Tree0108/p/12116175.html
Copyright © 2011-2022 走看看