From 7557b2bf0d32a1857dffa28b6ae051ab7adc7dfb Mon Sep 17 00:00:00 2001 From: Xionghaoran <719929980@qq.com> Date: Wed, 23 Oct 2024 15:50:23 +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 | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/function.py b/function.py index 52376ab..ccf495b 100644 --- a/function.py +++ b/function.py @@ -1,3 +1,4 @@ +# function.py import numpy as np import os @@ -20,12 +21,14 @@ import os - numpy: 2.1.1 """ + """ 请在这里填写学号和姓名,不填写即成绩无效。 """ id = "202210423213" name = "熊浩燃" + """ 参数说明: - input_vector (numpy array): 输入待分类的样本。 @@ -36,33 +39,23 @@ name = "熊浩燃" - int: 预测的分类标签。 """ + # 这里写自己的代码实现 def classify(input_vector, dataSet, labels, k=1): """ - KNN 分类算法,使用马氏距离。 + KNN 分类算法。 Args: - input_vector (numpy array): 输入待分类的样本。 - dataSet (numpy array): 训练数据集。 - labels (list or numpy array): 训练集对应的标签。 - - k (int): kNN 算法参数,默认值为1。 + - k (int): kNN 算法参数,请**自行设置默认值**,评测时仅会使用其默认值,不修改默认值将**无法通过**评测,**成绩为零**。 Returns: - int: 预测的分类标签。 """ - # 计算数据集的协方差矩阵 - covariance_matrix = np.cov(dataSet, rowvar=False) - - # 添加正则化项,防止协方差矩阵奇异 - regularization_term = 1e-5 * np.eye(covariance_matrix.shape[0]) - covariance_matrix += regularization_term - - # 计算协方差矩阵的逆 - inv_covariance_matrix = np.linalg.inv(covariance_matrix) - - # 计算马氏距离 - distances = np.array([np.sqrt((input_vector - x).dot(inv_covariance_matrix).dot((input_vector - x).T)) for x in dataSet]) - + # 计算欧氏距离 + distances = np.linalg.norm(dataSet - input_vector, axis=1) # 获取距离最近的 k 个样本的索引 nearest_neighbors_indices = distances.argsort()[:k] # 获取这些样本的标签 @@ -156,4 +149,4 @@ if __name__ == "__main__": test_vector = np.array([int(char) for char in test_data]).reshape(1, 1024) predicted_label = classify(test_vector, train_data, train_labels) - print(f"预测的标签: {predicted_label}") + print(f"预测的标签: {predicted_label}") \ No newline at end of file