python手撕knn
时间: 2024-09-20 10:14:29 浏览: 41
python实现KNN算法
5星 · 资源好评率100%
在Python中,K近邻(K-Nearest Neighbors,简称KNN)算法是一种简单的机器学习分类模型。它的基本思想是,对于新的待分类样本,通过查找训练集中与其最近的K个邻居(按某种距离度量),然后基于这K个邻居的类别多数决定该样本的类别。
以下是手撕KNN算法的基本步骤:
1. **数据预处理**:加载数据集并对其进行必要的预处理,如特征缩放、缺失值处理等。
```python
import pandas as pd
# 加载数据
data = pd.read_csv('dataset.csv')
X = data.iloc[:, :-1] # 特征
y = data.iloc[:, -1] # 标签
```
2. **计算距离**:对于新样本,需要计算它与所有训练样本之间的距离。常用的有欧氏距离、曼哈顿距离等。这里使用`scipy`库的`distance.cdist`函数。
```python
from scipy.spatial.distance import cdist
def euclidean_distance(x1, x2):
return np.sqrt(np.sum((x1 - x2)**2))
# 计算距离矩阵
distances = cdist(X, [new_sample], metric=euclidean_distance)
```
3. **选择K个邻居**:找到距离最小的K个邻居,通常是按降序排列。
4. **投票确定类别**:统计K个邻居中最常见的类别作为预测结果。
```python
class_counts = Counter(y[distances.argmin(axis=1)[:k]])
most_common_class = class_counts.most_common(1)[0][0]
```
5. **实现KNN分类器**:将上述步骤封装到一个函数里。
```python
def knn_classifier(X_train, y_train, new_sample, k=3):
distances = ... # 计算距离
predicted_class = ... # 投票确定类别
return predicted_class
```
阅读全文