最近邻算法原理

        k-最近邻(k-Nearest Neighbors,KNN)算法是一种基本的机器学习分类和回归算法。在分类问题中,KNN通过测量不同特征值之间的距离来进行分类。它的工作原理是:存在一个样本数据集合,也称作训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最近邻)的分类标签。一般来说,我们只选择样本数据集中前k个最相似的数据,这就是k-近邻算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

使用场景

        KNN算法可以用于多种分类问题,包括但不限于文本分类、图像识别、推荐系统等。当数据标签噪音较大时,KNN算法较为健壮,因为它只依赖于最近的k个邻居的类别。此外,由于KNN算法易于理解和实现,它通常被用作机器学习入门的第一个算法。

优缺点

优点

  1. 原理简单,易于理解和实现。
  2. 基于实例的学习,无需建立模型,无需参数估计。
  3. 对异常值不敏感。

缺点

  1. 计算量大,特别是当训练集很大时。
  2. 需要存储所有训练数据,以便进行预测。
  3. 对数据的预处理要求较高,如特征的缩放和标准化。
  4. k值的选择对结果影响很大,通常需要交叉验证来选择合适的k值。

示例代码(使用Python的scikit-learn库)

        这里以鸢尾花数据集为例,直接使用Python的scikit-learn库,简单的代码如下,如果要使用此方法,可以自行调整参数:

from sklearn.datasets import load_iris  
from sklearn.model_selection import train_test_split  
from sklearn.preprocessing import StandardScaler  
from sklearn.neighbors import KNeighborsClassifier  
from sklearn.metrics import classification_report, confusion_matrix  
  
# 加载鸢尾花数据集  
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分类器,设置k=3  
knn = KNeighborsClassifier(n_neighbors=3)  
  
# 训练模型  
knn.fit(X_train, y_train)  
  
# 预测测试集  
y_pred = knn.predict(X_test)  
  
# 打印分类报告和混淆矩阵  
print(classification_report(y_test, y_pred))  
print(confusion_matrix(y_test, y_pred))

        在这个示例中,我们使用了鸢尾花数据集,并对其进行了特征标准化,划分了训练集和测试集,并创建了一个KNN分类器(设置k=3),训练了模型,对测试集进行了预测,并打印了分类报告和混淆矩阵来评估模型的性能。

 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部