一、背景介绍
K 近邻算法(K-Nearest Neighbors, KNN)是机器学习中最简单、最直观的算法之一,其核心思想源于人类对相似事物的判断逻辑 ——'近朱者赤,近墨者黑'。该算法无需复杂的训练过程,直接通过计算样本间的距离来进行分类或回归,广泛应用于图像识别、文本分类、推荐系统等领域。
二、KNN 算法原理
2.1 核心思想
KNN 的核心思想是:对于一个待预测样本,找到训练数据中与其最相似的 K 个样本(近邻),根据这 K 个样本的类别(分类问题)或数值(回归问题)进行投票或平均,从而确定待预测样本的类别或数值。
关键点:
相似性度量:通过距离函数衡量样本间的相似性。
K 值选择:近邻数量 K 对结果影响显著。
投票机制:分类问题通常采用多数投票,回归问题采用均值或加权平均。
2.2 距离度量方法
常见的距离度量方法包括:
欧氏距离:适用于连续变量,计算两点间的直线距离。
曼哈顿距离:适用于城市网格路径等场景,计算两点间的折线距离。
余弦相似度:适用于文本、图像等高维数据,衡量向量间的方向相似性。
2.3 算法流程
KNN 算法的典型流程如下:
1·数据预处理:对数据进行清洗、归一化,避免特征量纲影响距离计算。
2·计算距离:计算待预测样本与所有训练样本的距离。
3·选择近邻:按距离升序排列,选取前 K 个最近邻样本。
4·分类 / 回归决策:
分类:统计 K 个近邻的类别,选择出现次数最多的类别。
回归:计算 K 个近邻数值的平均值或加权平均值。
2.4 算法结构
三、KNN 算法代码实现
3.1 基于 Scikit-learn 的简单实现
以鸢尾花数据集(Iris Dataset)为例,演示 KNN 分类的完整流程。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data[:, :]
y = iris.target
feature_names = iris.feature_names[:]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=, random_state=)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
knn = KNeighborsClassifier(n_neighbors=)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
()


