机器学习-KNN分类算法Iris实例

本文介绍了K-最近邻(KNN)分类算法,并通过Python的Scikit-Learn库在Iris数据集上进行了实践操作,详细阐述了KNN的概念、Python相关知识点及其实例过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

python知识点

KNN实例

# -*- coding: utf-8 -*-
"""
Created on Sat Mar  5 09:55:02 2016

@author: TBKKEN
"""
import numpy

from sklearn import datasets
#引入数据集
#https://zh.wikipedia.org/wiki/%E5%AE%89%E5%BE%B7%E6%A3%AE%E9%B8%A2%E5%B0%BE%E8%8A%B1%E5%8D%89%E6%95%B0%E6%8D%AE%E9%9B%86
iris = datasets.load_iris()
#查看数据的规模
iris.data.shape
#查看训练目标的总类
numpy.unique(iris.target)

#随机重排列
permutation = numpy.random.permutation(iris.target.size)

iris.data = iris.data[permutation]
iris.target = iris.target[permutation]

<
### KNN算法概述 KNN(k-Nearest Neighbor Algorithm)是一种基于实例的学习方法,在模式识别领域具有广泛应用。其核心思想是通过寻找与目标样本最接近的 k 个邻居来进行分类或回归预测[^1]。 #### 工作机制 当输入一个新的未标记数据时,KNN 算法会在训练数据集中找到与此新数据最相似的 k 个实例。如果这是用于分类的任务,则根据这 k 个实例中占多数的类别来决定新数据所属的类别;如果是回归任务,则通常取这些邻居的目标变量平均值作为预测结果[^4]。 #### 特点分析 KNN 属于懒惰学习(Lazy Learning),因为它并不像其他许多监督学习模型那样存在显式的训练阶段。相反,它只是存储所有的训练样例直到需要做预测的时候才进行计算操作。这意味着每次新增加一个查询请求都需要重新遍历整个数据库并执行相应的距离度量运算[^2]。 另外值得注意的是,KNN 对于处理边界模糊或者有重叠区域的数据集特别有用,因为它是依据局部密度而非全局结构来做决策划分界限[^2]. ### Python 实现示例 下面提供了一个使用Python编程语言实现KNN算法的例子: ```python from collections import Counter import numpy as np def euclidean_distance(x1, x2): return np.sqrt(np.sum((x1 - x2)**2)) class KNN: def __init__(self, k=3): self.k = k def fit(self, X_train, y_train): self.X_train = X_train self.y_train = y_train def predict(self, X): predicted_labels = [self._predict(x) for x in X] return np.array(predicted_labels) def _predict(self, x): distances = [euclidean_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] if __name__ == "__main__": from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler iris = datasets.load_iris() X, y = iris.data, iris.target scaler = StandardScaler() X_scaled = scaler.fit_transform(X) X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, test_size=0.2, random_state=1234 ) clf = KNN(k=5) clf.fit(X_train, y_train) predictions = clf.predict(X_test) acc = np.mean(predictions == y_test) print(f"Accuracy: {acc}") ``` 此代码片段展示了如何构建自定义版本的KNN分类器以及评估它的性能表现. ### 距离度量方式 为了衡量两个对象之间的差异程度,我们需要定义适当的距离函数.KNN常用的几种距离测量标准包括欧几里得距离(Euclidean Distance),曼哈顿距离(Manhattan Distance)等等.[^4] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值