From 8eaa88f2c9d374239c28a05043c11c164e62ba5b Mon Sep 17 00:00:00 2001 From: cool Date: Tue, 8 Oct 2024 00:04:59 +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 | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/function.py b/function.py index fb50b83..c51abf3 100644 --- a/function.py +++ b/function.py @@ -44,7 +44,6 @@ name = "陈宇杰" # 这里写自己的代码实现 - def classify0(inX, dataSet, labels, k): """ KNN 分类函数 @@ -80,36 +79,29 @@ def main(): scaler = StandardScaler() # 创建标准化对象 train_data = scaler.fit_transform(train_data) # 对训练数据进行标准化 - # 使用交叉验证选择最佳 k 值 - k_values = range(1, 31) # 定义 k 值范围 - best_k = 1 - best_accuracy = 0 + # 设置 K 值 + k = 1 # 直接定义 K 值为 1 - for k in k_values: - # 通过手动实现 KNN 分类计算准确率 - correct_predictions = 0 - for i in range(len(train_data)): - # 留出一条数据作为测试集,其余作为训练集 - test_sample = train_data[i] - train_subset = np.delete(train_data, i, axis=0) - train_labels_subset = np.delete(train_labels, i) + # 手动实现 KNN 分类计算准确率 + correct_predictions = 0 + for i in range(len(train_data)): + # 留出一条数据作为测试集,其余作为训练集 + test_sample = train_data[i] + train_subset = np.delete(train_data, i, axis=0) + train_labels_subset = np.delete(train_labels, i) - # 使用 KNN 分类器预测 - predicted_label = classify0(test_sample, train_subset, train_labels_subset, k) - if predicted_label == train_labels[i]: - correct_predictions += 1 + # 使用 KNN 分类器预测 + predicted_label = classify0(test_sample, train_subset, train_labels_subset, k) + if predicted_label == train_labels[i]: + correct_predictions += 1 - accuracy = correct_predictions / len(train_data) # 计算准确性 - if accuracy > best_accuracy: - best_accuracy = accuracy - best_k = k - - print(f"最佳 k 值: {best_k},准确率: {best_accuracy:.4f}") + accuracy = correct_predictions / len(train_data) # 计算准确性 + print(f"使用 K 值 {k} 的准确率: {accuracy:.4f}") # 测试分类 test_sample = [65915, 3.868359, 0.128078] # 测试样本 test_sample = scaler.transform([test_sample]) # 对测试样本进行相同的缩放 - predicted_label = classify0(test_sample[0], train_data, train_labels, best_k) # 分类 + predicted_label = classify0(test_sample[0], train_data, train_labels, k) # 分类 print(f"测试样本 {test_sample[0]} 的预测分类标签为: {predicted_label}")