假设你有一个包含N个对象的数据库,每个对象包含x和y两个特征属性和一个类别属性c。K=5时的KNN算法代码
时间: 2023-03-05 16:38:21 浏览: 88
假设你的数据库是一个名为“dataset”的列表,每个元素都是一个字典,包含以下键值对:
- "x": 一个表示对象x特征属性的数值
- "y": 一个表示对象y特征属性的数值
- "c": 一个表示对象类别属性的字符串
下面是K=5时的KNN算法代码:
```python
def knn(query_x, query_y, k, dataset):
distances = []
# 计算查询点和数据库中每个点之间的距离
for data in dataset:
distance = ((data["x"] - query_x)**2 + (data["y"] - query_y)**2)**0.5
distances.append((distance, data["c"]))
# 按距离从小到大排序
distances.sort()
# 统计k个最近邻中每个类别出现的次数
counts = {}
for i in range(k):
c = distances[i][1]
counts[c] = counts.get(c, 0) + 1
# 找到出现次数最多的类别
max_count = 0
max_c = None
for c, count in counts.items():
if count > max_count:
max_count = count
max_c = c
return max_c
```
使用方法:
- 调用`knn(query_x, query_y, k, dataset)`函数,其中`query_x`和`query_y`分别是查询点的x和y特征属性,`k`是选取的最近邻数,`dataset`是包含N个对象的数据库列表。
- 返回值是一个字符串,表示查询点所属的类别属性。
阅读全文