基于KNN算法实现分类
时间: 2023-07-25 21:05:37 浏览: 105
利用KNN算法进行分类
KNN(K-Nearest Neighbors)算法是一种常用的分类算法。它的基本思想是:对于一个未知样本,找到训练集中与它最近的K个样本,根据这K个样本的类别进行投票,将投票结果作为未知样本的类别。
1. 数据预处理
首先需要对数据进行预处理,包括特征选择、特征缩放等。通常情况下,使用欧几里得距离计算样本之间的距离,因此需要对数据进行归一化处理。
2. 计算距离
对于一个未知样本,需要计算它与训练集中每个样本之间的距离。常用的距离度量方法包括欧几里得距离、曼哈顿距离、切比雪夫距离等。
3. 选择K值
K值的选择对算法的效果有很大的影响。通常情况下,K值越大,模型的复杂度越低,容易受到噪声的干扰,K值越小,模型的复杂度越高,容易出现过拟合的情况。因此,需要通过交叉验证等方法选择合适的K值。
4. 进行投票
找到K个与未知样本最近的样本后,根据它们的类别进行投票,将投票结果作为未知样本的类别。
5. 实现代码
下面是基于Python实现KNN算法的代码:
```python
import numpy as np
from collections import Counter
class KNN:
def __init__(self, k=5):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = []
for x in X:
distances = [np.linalg.norm(x - x_train) for x_train in self.X_train]
k_indices = np.argsort(distances)[:self.k]
k_labels = [self.y_train[i] for i in k_indices]
most_common = Counter(k_labels).most_common(1)
y_pred.append(most_common[0][0])
return y_pred
```
示例代码:
```python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
from knn import KNN
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 数据预处理
scaler = StandardScaler()
X = scaler.fit_transform(X)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练模型
knn = KNN(k=5)
knn.fit(X_train, y_train)
# 预测
y_pred = knn.predict(X_test)
# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
```
以上就是基于KNN算法实现分类的步骤和代码。
阅读全文