generated from LufsX/Experiment-kNN
This commit is contained in:
-25
@@ -1,6 +1,5 @@
|
||||
import numpy as np
|
||||
import os
|
||||
from sklearn.neighbors import KDTree
|
||||
|
||||
"""
|
||||
实验说明:
|
||||
@@ -58,26 +57,6 @@ def classify(input_vector, dataSet, labels, k=1, distance_metric='euclidean', we
|
||||
return predicted_label
|
||||
|
||||
|
||||
def classify_with_kdtree(input_vector, dataSet, labels, k=1):
|
||||
"""
|
||||
使用 KD-tree 进行加速的 kNN 分类算法。
|
||||
|
||||
Args:
|
||||
- input_vector (numpy array): 输入待分类的样本。
|
||||
- dataSet (numpy array): 训练数据集。
|
||||
- labels (list or numpy array): 训练集对应的标签。
|
||||
- k (int): kNN 算法参数,默认值为1。
|
||||
|
||||
Returns:
|
||||
- int: 预测的分类标签。
|
||||
"""
|
||||
tree = KDTree(dataSet) # 构建 KD-tree
|
||||
dist, indices = tree.query(input_vector.reshape(1, -1), k=k) # 查询最近邻
|
||||
nearest_labels = np.array(labels)[indices[0]]
|
||||
predicted_label = np.bincount(nearest_labels).argmax()
|
||||
return predicted_label
|
||||
|
||||
|
||||
def load_dataset(directory):
|
||||
"""
|
||||
从文件夹中加载数据,若不自行正确实现,则无法通过评测,不记录成绩。
|
||||
@@ -162,7 +141,3 @@ if __name__ == "__main__":
|
||||
# 使用默认的欧氏距离和不加权的投票机制
|
||||
predicted_label = classify(test_vector, train_data, train_labels)
|
||||
print(f"预测的标签(普通分类): {predicted_label}")
|
||||
|
||||
# 使用 KD-tree 进行加速的分类
|
||||
predicted_label_kdtree = classify_with_kdtree(test_vector, train_data, train_labels)
|
||||
print(f"预测的标签KD-tree 加速: {predicted_label_kdtree}")
|
||||
|
||||
Reference in New Issue
Block a user