From 446f9fc29cf7be23e866dcb0050af10dd698d9fd Mon Sep 17 00:00:00 2001 From: cy <939601402@qq.com> Date: Tue, 1 Oct 2024 20:35:34 +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 | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/function.py b/function.py index 9297b5f..06141c5 100644 --- a/function.py +++ b/function.py @@ -41,7 +41,7 @@ name = "程悦" # 这里写自己的代码实现 -def classify0(inX, dataSet, labels, k=9): +def classify0(inX, dataSet, labels, k=3): """ KNN 分类算法。 @@ -54,22 +54,20 @@ def classify0(inX, dataSet, labels, k=9): Returns: - int: 预测的分类标签。 """ - # 计算协方差矩阵并求逆矩阵 - cov_matrix = np.cov(dataSet, rowvar=False) - inv_cov_matrix = np.linalg.inv(cov_matrix) + - # 计算输入样本与训练集样本的马氏距离 - distances = [distance.mahalanobis(inX, data_point, inv_cov_matrix) for data_point in dataSet] + # 计算输入样本与训练集中每个样本的欧几里得距离 + distances = distance.cdist(dataSet, [inX], metric='euclidean').flatten() - # 按距离排序并选择前 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): @@ -90,10 +88,10 @@ if __name__ == "__main__": train_data, train_labels = load_data(train_file) test_data, test_labels = load_data(test_file) - # # 特征缩放 - # scaler = StandardScaler() - # train_data = scaler.fit_transform(train_data) - # test_data = scaler.transform(test_data) + # 特征缩放 + scaler = StandardScaler() + train_data = scaler.fit_transform(train_data) + test_data = scaler.transform(test_data) # 测试 classify0 函数 test_sample = test_data[0] # 使用测试集中的第一个样本进行测试 @@ -107,4 +105,4 @@ if __name__ == "__main__": if predicted_label == test_labels[i]: correct_count += 1 accuracy = correct_count / len(test_data) - print(f"Accuracy: {accuracy * 100:.2f}%") + print(f"Accuracy: {accuracy * 100:.2f}%") \ No newline at end of file