knn算法实例带数据集
时间: 2023-08-27 22:04:07 浏览: 86
KNN算法示例
4星 · 用户满意度95%
好的,下面是一个简单的KNN算法实例,包括一个数据集。请注意,这个数据集只是一个示例,您可以根据自己的需求修改它。
```python
import math
# 定义KNN算法
def knn(data, query, k, distance_fn, choice_fn):
"""
data: 训练数据,是一个列表,每个元素都是一个元组,元组的第一个元素是数据点的特征,第二个元素是数据点的标签
query: 查询数据,是一个元组,元组的第一个元素是查询点的特征
k: 选择最近邻居的数量
distance_fn: 距离函数,用于计算数据点之间的距离
choice_fn: 投票函数,用于选择最终的标签
"""
# 计算查询点与每个数据点之间的距离
distances = []
for index, point in enumerate(data):
distance = distance_fn(point[0], query)
distances.append((distance, index))
# 按照距离排序
distances = sorted(distances)
# 选择最近的k个邻居
neighbors = distances[:k]
# 对邻居进行投票,选择最终的标签
labels = [data[i][1] for distance, i in neighbors]
return choice_fn(labels)
# 定义欧几里得距离函数
def euclidean_distance(point1, point2):
"""
point1: 特征向量1
point2: 特征向量2
"""
distance = 0
for i in range(len(point1)):
distance += pow(point1[i] - point2[i], 2)
return math.sqrt(distance)
# 定义投票函数,选择标签出现最多的那个
def mode(labels):
"""
labels: 标签列表
"""
return max(set(labels), key=labels.count)
# 定义一个数据集
data = [
([1, 2, 3], 'A'),
([4, 5, 6], 'B'),
([7, 8, 9], 'C'),
([10, 11, 12], 'D')
]
# 测试KNN算法
print(knn(data, [1, 2, 1], 3, euclidean_distance, mode)) # 输出 A
```
带有数据集的KNN算法实现到这里就结束了,您可以根据自己的需求修改数据集和特征向量的维度。
阅读全文