帮我写一个不用sklearn的knn
时间: 2024-05-01 15:16:34 浏览: 20
好的,以下是一个简单的基于Python的KNN算法实现,不使用sklearn库:
```python
import math
import operator
# 计算两个点之间的距离
def euclidean_distance(point1, point2):
distance = 0.0
for i in range(len(point1)):
distance += (point1[i] - point2[i]) ** 2
return math.sqrt(distance)
# KNN算法
def knn(training_data, test_data, k):
distances = []
for i in range(len(training_data)):
distance = euclidean_distance(test_data, training_data[i][0])
distances.append((training_data[i], distance))
distances.sort(key=operator.itemgetter(1))
neighbors = []
for i in range(k):
neighbors.append(distances[i][0])
class_votes = {}
for i in range(len(neighbors)):
response = neighbors[i][1]
if response in class_votes:
class_votes[response] += 1
else:
class_votes[response] = 1
sorted_votes = sorted(class_votes.items(), key=operator.itemgetter(1), reverse=True)
return sorted_votes[0][0]
# 测试数据
training_data = [([2.0, 1.0], 'A'), ([1.0, 3.0], 'A'), ([4.0, 2.0], 'B'), ([3.0, 4.0], 'B')]
test_data = [2.0, 3.0]
k = 3
# 执行KNN算法
result = knn(training_data, test_data, k)
# 输出预测结果
print('预测结果:', result)
```
输出结果为:预测结果:A
以上代码实现了基于欧氏距离的KNN算法。在训练数据中,每个数据点都有一个标签用于表示其所属的类别,KNN算法根据测试数据点与训练数据点之间的距离,找出距离最近的K个邻居,然后根据这K个邻居的标签,通过投票的方式预测测试数据点的类别。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)