实现KNN算法。数据集X=([0],[1],[2],[3]),Y=[0,0,1,1],预测[0.5]点的所属类别, 近邻数为3.
时间: 2023-06-13 07:08:48 浏览: 30
KNN算法是基于数据集的一种非参数的分类方法。对于给定的测试点,通过计算其与所有训练点的距离,选取距离最近的K个点,根据这K个点所属的类别进行投票,得票最高的类别即为预测结果。
在这个问题中,我们需要实现KNN算法来预测[0.5]点所属的类别,数据集X=([0],[1],[2],[3]),Y=[0,0,1,1],预测[0.5]点的所属类别, 近邻数为3。
首先,我们需要计算[0.5]点与所有训练点的距离,这里使用欧氏距离。计算公式为:
$distance(x,y) = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2}$
其中,$x$和$y$分别表示两个点的特征向量,$n$表示特征向量的维度。
代码实现如下:
```python
import math
def euclidean_distance(x, y):
"""
计算两个点之间的欧氏距离
"""
distance = math.sqrt(sum([(xi - yi)**2 for xi, yi in zip(x, y)]))
return distance
def knn(X, Y, x, k):
"""
KNN算法实现
"""
distances = []
for i in range(len(X)):
dist = euclidean_distance(X[i], x)
distances.append((dist, Y[i]))
# 按距离从小到大排序
distances = sorted(distances, key=lambda x: x[0])
# 统计最近的K个点的类别
k_nearest = [item[1] for item in distances[:k]]
# 进行投票
counts = {}
for label in k_nearest:
counts[label] = counts.get(label, 0) + 1
# 返回得票最高的类别
return max(counts, key=counts.get)
```
使用上述代码进行预测,结果为:
```python
X = [[0], [1], [2], [3]]
Y = [0, 0, 1, 1]
x = [0.5]
k = 3
label = knn(X, Y, x, k)
print(label)
```
输出结果为:
```
0
```
因为最近的三个点中有两个类别为0,一个类别为1,所以[0.5]点被预测为类别0。