【机器学习】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:\n", data)
67     # 2、数据集拆分
68     # 训练集
69     train = data.iloc[:, 1:-4]
70     print("train_\n", train)
71     # 测试集
72     test = data.columns[-4:]
73     print("test_:\n", 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 # 超参数调优:超参数调整与优化,---不停的去尝试不同值的超参数,来获取最好的结果,那么此时所对应的超参数就是最优的

猜你喜欢

转载自www.cnblogs.com/Tree0108/p/12116175.html