diff --git a/function.py b/function.py index 5e3edf5..2463910 100644 --- a/function.py +++ b/function.py @@ -58,8 +58,6 @@ def load_data(file_path): return features, labels -import numpy as np - def classify0(inX, dataSet, labels, k=3): """ KNN 分类算法。 @@ -85,32 +83,42 @@ def classify0(inX, dataSet, labels, k=3): else: return -1 - if __name__ == "__main__": + # 加载数据 def load_data(file_path): data = np.loadtxt(file_path, delimiter="\t") features = data[:, :-1] labels = data[:, -1].astype(int) return features, labels + train_file_path = "datingTrainSet2.tsv" + test_file_path = "datingTestSet2.tsv" + + train_features, train_labels = load_data(train_file_path) + test_features, test_labels = load_data(test_file_path) + + # 归一化特征 def normalize(features): min_vals = features.min(axis=0) max_vals = features.max(axis=0) ranges = max_vals - min_vals normalized = (features - min_vals) / ranges - normalized[ranges == 0] = 0 # Prevent division by zero + normalized[ranges == 0] = 0 # 防止除以零 return normalized - train_file_path = "datingTrainSet2.tsv" - train_features, train_labels = load_data(train_file_path) - - test_file_path = "datingTestSet2.tsv" - test_features, test_labels = load_data(test_file_path) - - # Normalize features train_features = normalize(train_features) test_features = normalize(test_features) - + + correct_count = 0 + for i in range(len(test_features)): + test_feature = test_features[i].reshape(1, -1) + predict_label = classify0(test_feature, train_features, train_labels, k=3) + if predict_label == -1: + continue + correct_count += (predict_label == test_labels[i]) + + accuracy = correct_count / len(test_features) + print(f"Accuracy: {accuracy:.2f}") correct_count = 0 for i in range(len(test_features)): test_feature = test_features[i].reshape(1, -1)