数据挖掘与机器学习中的KNN监督学习算法实现
K-近邻(K-Nearest Neighbors,KNN)是一种简单且常用的监督学习算法,适用于分类和回归问题。下面是一个KNN算法的基本实现,采用Python编程语言和常用库,如NumPy和Scikit-learn。
基本步骤
- 数据准备:导入必要的库并准备数据集。
- 训练模型:使用训练数据来训练KNN模型。
- 模型预测:使用模型对新的数据进行预测。
- 评估模型:通过测试集评估模型性能。
KNN算法本质
- KNN通过计算新样本与训练集中所有样本的距离(通常为欧几里得距离),选择距离最小的K个样本。
- 对于分类问题,通过多数表决来确定新样本的类别;对于回归问题,返回K个最近邻点的均值。
实现步骤
# 导入必要的库
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 生成示例数据集(使用内置数据或自己的数据)
from sklearn.datasets import load_iris
data = load_iris()
X, y = data.data, data.target
# 分割数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 特征缩放(标准化数据集)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# 实例化KNN模型(假设K=3)
knn = KNeighborsClassifier(n_neighbors=3)
# 训练模型
knn.fit(X_train, y_train)
# 预测测试集结果
y_pred = knn.predict(X_test)
# 计算模型准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Model accuracy: {accuracy * 100:.2f}%")
关键点说明
- 数据标准化:KNN对特征的尺度非常敏感,因此在计算距离之前进行特征缩放(如标准化或归一化)是非常重要的。
- 选择K值:选择合适的K值需要经验或通过交叉验证来确定。K值过小容易受噪声影响,过大会导致模型过于平滑。
- 距离度量:欧几里得距离是最常用的,但在一些情况下,可以使用其他距离度量(如曼哈顿距离)。
注意事项
- KNN的计算开销较大,尤其在样本数目很多时,因为每次预测都需要计算距离。
- 在高维空间中,KNN可能表现不佳(维度灾难问题)。
- 适合在小数据集上应用,且对异常值敏感。
这段代码可以理解为一个基本的KNN实现示例,它根据数据的性质和规模可以适当进行调整和优化。