怎么手搓一个knn分类器
时间: 2023-12-17 10:49:31 浏览: 99
手动实现 KNN 分类器需要经过以下步骤:
1. 准备数据集:包含多个样本,每个样本都有多个特征和一个标签值。
2. 确定 K 值:KNN 分类器中的 K 值表示邻居的数量,需要根据具体情况确定。
3. 计算距离:使用欧氏距离或曼哈顿距离计算一个未知样本与数据集中所有样本之间的距离。
4. 找到 K 个最近的邻居:根据距离的大小,找到离未知样本最近的 K 个样本,称为 “邻居”。
5. 获取邻居的类别:从 K 个邻居中获取它们的标签值。
6. 执行分类:将未知样本分类为邻居中出现最多的类别。
下面是一个简单的 Python 实现:
```
import numpy as np
class KNN:
def __init__(self, k=3):
self.k = k
def fit(self, X, y):
self.X = X
self.y = y
def predict(self, X_test):
y_pred = []
for sample in X_test:
distances = np.sqrt(np.sum((self.X - sample)**2, axis=1))
nearest_neighbors = np.argsort(distances)[:self.k]
neighbor_labels = self.y[nearest_neighbors]
counts = np.bincount(neighbor_labels)
y_pred.append(np.argmax(counts))
return y_pred
```
其中,`X` 和 `y` 分别表示特征矩阵和标签向量,`X_test` 表示需要进行预测的未知样本。这段代码实现的是基于欧氏距离的 KNN 分类器,`np.argsort` 函数可以返回升序距离索引,`np.bincount` 函数可以返回每个标签的数量。
阅读全文