K最近邻(kNN)算法是一种基于实例的学习,或无监督学习,用于分类和回归分析。以下是一个简单的Python实现,包括读取数据、计算距离和分类的步骤:
```python
import numpy as np
import pandas as pd
from collections import Counter
class KNN:
def __init__(self, path, test_data, k):
self.path = path
self.test_data = test_data
self.k = k
def read_data(self):
try:
self.data = pd.read_csv(self.path, sep=',', encoding='gbk')
except:
self.data = pd.read_excel(self.path)
return self.data
def calculate_distance(self, inX, dataset):
dataset_size = dataset.shape
diff_mat = np.tile(inX, (dataset_size, 1)) - dataset
sq_diff_mat = diff_mat 2 distance = sq_diff_mat.sum(axis=1) sorted_distance = distance.argsort() return sorted_distance def classify(self, inX): dataset = self.data.iloc[:, :-1].values labels = self.data.iloc[:, -1].values sorted_distance = self.calculate_distance(inX, dataset) label_count = Counter() for i in range(self.k): label_index = labels[sorted_distance[i]] label_count[label_index] += 1 sorted_label_count = sorted(label_count.items(), key=lambda x: x, reverse=True) return sorted_label_count 使用示例 if __name__ == "__main__": knn = KNN('path_to_data.csv', 'test_data.csv', k=3) knn.read_data() test_data = np.array([[23, 3, 17]]) 示例测试数据 predicted_label = knn.classify(test_data) print(f"Predicted label: {predicted_label}") ``` 代码解释 `read_data` 方法读取训练数据,支持CSV和Excel文件格式。 `calculate_distance` 方法计算输入数据点与训练集中每个数据点之间的欧氏距离,并返回按距离排序的索引。 `classify` 方法根据输入数据点的最近k个邻居的类别,使用多数投票法确定输入数据点的类别。 建议 数据预处理读取数据
计算距离
分类
参数选择:k的选择对算法性能有很大影响,可以通过交叉验证等方法选择合适的k值。
内存优化:对于大规模数据集,可以考虑使用更高效的数据结构和算法来减少内存消耗。