K近邻算法(knn)
核心概念
1. 算法定义
每个样本由其最接近的K个邻近样本代表(K通常≤20)。
对新数据分类时,提取训练集中特征最相似的K个样本,统计其类别频率,将最高频类别作为预测结果。
2. 算法步骤
① 计算新数据与所有训练样本的距离;
② 按距离递增排序;
③ 选取距离最小的K个点;
④ 统计K个点的类别频率;
⑤ 返回频率最高的类别作为预测分类。
距离度量方法
1. 欧氏距离
多维空间中的绝对距离。
公式(n维):
$$ d = \sqrt{\sum_{i=1}^{n}(x_i - y_i)^2} $$
2. 曼哈顿距离
坐标轴上的绝对轴距总和。
公式(二维):
$$ d = |x_1 - x_2| + |y_1 - y_2| $$
实战案例:鸢尾花分类(基于sklearn)
1. 数据集
特征:花萼长度/宽度、花瓣长度/宽度(4个特征)。
标签:3种鸢尾花类别(`setosa`, `versicolor`, `virginica`)。
2. 实现步骤
1. 加载数据
iris = datasets.load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3)
2. 创建KNN模型(K=5,欧氏距离)
knn = KNeighborsClassifier(n_neighbors=5, metric="euclidean")
knn.fit(X_train, y_train)
3. 评估与预测
train_score = knn.score(X_train, y_train) # 训练集准确率
test_score = knn.score(X_test, y_test) # 测试集准确率
y_pred = knn.predict(X_test) # 预测标签
```