目录
k-邻近算法概述
k-邻近算法是一种常用的机器学习算法,用于分类和回归问题。它基于一个简单的思想:给定一个未标记的数据点,在训练集中找到其K个最近邻居,并根据这K个最近邻居的标签来预测该数据点的标签。
KNN算法流程
1. 准备数据集
准备带有标签的训练数据集,其中每个数据点都有特征和对应的标签
2. 选择K值
k值过小,容易受异常值影响。k值过大,受到样本均衡的问题
3. 计算距离
欧氏距离是最容易直观理解的距离度量方法
4. 选择最近邻居
根据计算得到的距离,选择K个距离最近的训练数据点作为最近邻居。
5. 进行预测
根据K个最近邻居的标签中出现次数最多的标签来预测未标记数据点的标签。
6. 评估模型性能
使用测试集来评估KNN模型的性能
算法实现
import numpy as np
from collections import Counter
class KNN:
def __init__(self, k):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def distance(self, x1, x2):
return np.sqrt(np.sum((x1 - x2)**2))
def _predict(self, x):
distances = [self.distance(x, x_train) for x_train in self.X_train]
k_indices = np.argsort(distances)[:self.k]
k_nearest_labels = [self.y_train[i] for i in k_indices]
most_common = Counter(k_nearest_labels).most_common(1)
return most_common[0][0]
def predict(self, X):
y_pred = [self._predict(x) for x in X]
return np.array(y_pred)
def accuracy(self, y_true, y_pred):
accuracy = np.sum(y_true == y_pred) / len(y_true)
return accuracy
# 加载数据集
X_train = np.array([[1, 2], [3, 4], [5, 6], [7, 8],[2, 3], [6, 7], [4, 5]])
y_train = np.array([0, 0, 1, 1, 0, 1, 1])
X_test = np.array([[2, 3], [6, 7]])
y_test = np.array([0, 1])
# 创建KNN对象并进行训练
knn = KNN(k=3)
knn.fit(X_train, y_train)
# 进行预测
y_pred = knn.predict(X_test)
print(y_pred)
# 评估模型性能
accuracy = knn.accuracy(y_test, y_pred)
print("准确率:", accuracy)
实验中遇到的问题
k的取值太大,数据集中某个种类的点太多,准确率会变得很低,k取1时容易被错误的数据干扰准确率也会变得很低
总结
KNN算法是一种简单而强大的分类和回归算法,易于理解和实现,要调整的参数少, 适用于各种类型的数据,能够捕捉到非线性关系,对于复杂的决策边界有较好的表现,可以轻松处理多类别问题,然而,它也有一些限制,如高计算复杂度、对异常值敏感等