From 7593fcb68896955ef3604c69350af8d50eab32e0 Mon Sep 17 00:00:00 2001 From: cy <939601402@qq.com> Date: Tue, 1 Oct 2024 20:25:37 +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 | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/function.py b/function.py index 6871bda..c9162ac 100644 --- a/function.py +++ b/function.py @@ -41,7 +41,7 @@ name = "程悦" # 这里写自己的代码实现 -def classify0(inX, dataSet, labels, k=3): +def classify0(inX, dataSet, labels, k=9): """ KNN 分类算法。 @@ -54,20 +54,22 @@ def classify0(inX, dataSet, labels, k=3): Returns: - int: 预测的分类标签。 """ - + # 计算协方差矩阵并求逆矩阵 + cov_matrix = np.cov(dataSet, rowvar=False) + inv_cov_matrix = np.linalg.inv(cov_matrix) - # 计算输入样本与训练集中每个样本的欧几里得距离 - distances = distance.cdist(dataSet, [inX], metric='euclidean').flatten() + # 计算输入样本与训练集样本的马氏距离 + distances = [distance.mahalanobis(inX, data_point, inv_cov_matrix) for data_point in dataSet] - # 按距离排序并选择前k个最小的距离 + # 按距离排序并选择前 k 个最近的邻居 k_indices = np.argsort(distances)[:k] k_nearest_labels = [labels[i] for i in k_indices] - # 计算多数标签 + # 统计最近邻居中最多的标签 label_counts = Counter(k_nearest_labels) most_common_label = label_counts.most_common(1)[0][0] - return most_common_label + return most_common_label def load_data(file_path):