From 29b0604bf9a633f88b9d957b2f72f5d43acc54f2 Mon Sep 17 00:00:00 2001 From: butterfly-is-butter-fly <3425654530@qq.com> Date: Tue, 15 Oct 2024 23:09:26 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20function.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- function.py | 68 +++++++++++++++++++++++++++++++++-------------------- 1 file changed, 43 insertions(+), 25 deletions(-) diff --git a/function.py b/function.py index 939cc8c..7a4863e 100644 --- a/function.py +++ b/function.py @@ -1,6 +1,5 @@ -# function.py import numpy as np - +from collections import Counter """ 挑战说明: @@ -40,26 +39,45 @@ name = "邓杰元" - int: 预测的分类标签。 """ - -# 这里写自己的代码实现 def classify0(inX, dataSet, labels, k=20): - # 计算输入向量与训练集中每个样本的欧氏距离 - distances = np.sqrt(np.sum((dataSet - input_vector) ** 2, axis=1)) - - # 获取距离最小的k个样本的索引 - k_indices = np.argsort(distances)[:k] - - # 获取这k个样本的标签 - k_nearest_labels = labels[k_indices] - - # 找出出现次数最多的标签 - most_common = Counter(k_nearest_labels).most_common(1) - + """ + KNN 分类算法。 + + Args: + - inX (numpy array): 输入待分类的样本。 + - dataSet (numpy array): 训练数据集。 + - labels (list or numpy array): 训练集对应的标签。 + - k (int): kNN 算法参数,默认值为 20。 + + Returns: + - int: 预测的分类标签。 + """ + # 计算输入向量与训练集中每个样本的欧氏距离 + distances = np.sqrt(np.sum((dataSet - inX) ** 2, axis=1)) + + # 获取距离最小的 k 个样本的索引 + k_indices = np.argsort(distances)[:k] + + # 获取这 k 个样本的标签 + k_nearest_labels = labels[k_indices] + + # 找出出现次数最多的标签 + most_common = Counter(k_nearest_labels).most_common(1) + + # 返回出现次数最多的标签 + return most_common[0][0] def load_data(file_path): """ 加载 TSV 格式数据文件。 + + Args: + - file_path (str): 数据文件路径。 + + Returns: + - features (numpy array): 数据特征矩阵。 + - labels (numpy array): 数据对应的标签。 """ data = np.loadtxt(file_path, delimiter="\t") features = data[:, :-1] @@ -68,14 +86,14 @@ def load_data(file_path): if __name__ == "__main__": - # 以下代码可用于测试,可自行随意修改 + # 测试代码,可以自行修改和测试 - train_file = "datingTrainSet2.tsv" - test_file = "datingTestSet2.tsv" - - train_data, train_labels = load_data(train_file) - test_data, test_labels = load_data(test_file) - - # 测试 classify0 函数 - # 注意:这里只是演示,实际评测会使用独立的测试集 + train_file = "datingTrainSet2.tsv" + test_file = "datingTestSet2.tsv" + + train_data, train_labels = load_data(train_file) + test_data, test_labels = load_data(test_file) + + # 测试 classify0 函数 + # 注意:这里只是演示,实际评测会使用独立的测试集 print(classify0([65915, 3.868359, 0.128078], train_data, train_labels)) \ No newline at end of file