pythom实现knn
时间: 2023-12-28 20:05:13 浏览: 23
KNN(k-近邻算法)是一种基本的分类和回归算法。在KNN算法中,输出是由最近的k个训练样本的标签(分类)或输出(回归)的平均值决定的。
以下是一个简单的python实现KNN算法的示例:
```python
import numpy as np
class KNN:
def __init__(self, k):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = []
for i in range(len(X)):
distances = np.sqrt(np.sum(np.square(self.X_train - X[i,:]), axis=1))
indices = np.argsort(distances)[:self.k]
labels = self.y_train[indices]
y_pred.append(np.bincount(labels).argmax())
return np.array(y_pred)
```
在这个示例中,KNN类有三个方法:__init__(构造函数),fit(用于训练模型)和predict(用于预测新数据的标签或输出)。
在构造函数中,我们传递一个k值,该值是我们要使用的最近的k个训练样本。
在fit方法中,我们将训练数据X和它们的标签y保存在实例变量self.X_train和self.y_train中。
在predict方法中,我们预测新数据X的标签或输出。对于每个新数据点X[i,:],我们计算它与所有训练样本之间的距离,并选择最近的k个训练样本。然后,我们选择这些训练样本中最常见的标签,作为预测的标签。
以下是一个简单的示例,展示如何使用KNN类:
```python
# 创建一个KNN对象,k=3
knn = KNN(k=3)
# 训练模型
X_train = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
y_train = np.array([0, 0, 1, 1])
knn.fit(X_train, y_train)
# 预测新数据点的标签
X_test = np.array([[0, 1], [2, 3], [4, 5], [6, 7]])
y_pred = knn.predict(X_test)
print(y_pred)
# 输出:[0 0 1 1]
```
在这个示例中,我们创建了一个KNN对象,并使用fit方法将训练数据和标签传递给它。然后,我们使用predict方法预测新的数据点的标签。最后,我们输出预测的标签数组。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_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)