ppython 实现k nearest neighbours k最近邻分类算法

k nearest neighbours k最近邻分类算法介绍

K最近邻(KNN, K-Nearest Neighbor)分类算法是数据挖掘分类技术中最简单的方法之一,也是机器学习领域中一种基本的分类和回归方法。以下是对K最近邻分类算法的详细解释:

核心思想

KNN算法的核心思想是:如果一个样本在特征空间中的K个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性。这种分类决策只依赖于最邻近的一个或几个样本的类别,而不需要构建复杂的分类模型。

算法流程

准备数据:对数据进行预处理,包括特征选择、特征缩放等。

确定K值:K是一个预先设定的正整数,表示在训练集中选取与待分类点最近的邻居数量。K值的选择对最终预测结果有显著影响,需根据具体问题和数据特性进行合理选择。

距离计算:计算待分类点与训练集中每一个点之间的距离。常用的距离度量包括欧氏距离、曼哈顿距离等。

寻找最近的K个邻居:根据计算得到的距离,按由近及远排序,选择与待分类点距离最近的K个训练数据点作为其邻居。

类别决策:统计这K个邻居中各个类别的出现频率,将待分类点归为出现频率最高的类别。这种决策规则被称为"多数表决"或"硬投票"。

特点

简单易懂:KNN算法概念清晰,实现过程直观,便于理解与解释。

无需假设数据分布:KNN是非参数方法,不依赖于数据的具体分布形式,适用于各种类型的数据集。

适应性强:能够处理多种类型的数据(如数值型、名义型、序数型等),且对于缺失值和异常值有一定的鲁棒性。

计算复杂度高:随着训练集规模增大,每次预测时都需要计算待分类点与所有训练点的距离,导致时间复杂度较高。

存储需求大:KNN算法需要保存整个训练集,对于大规模数据集,存储成本可能过高。

对异常值敏感:异常值可能对预测结果产生较大影响。

对类别不平衡问题处理欠佳:当数据集中各类别样本数量严重不均衡时,KNN可能偏向于将新样本分类为样本数量较多的类别。

应用场景

KNN算法凭借其通用性和灵活性,在众多商业和科研领域有着广泛的应用,包括金融市场分析、图像识别、文本分类等。

k nearest neighbours k最近邻分类算法python实现样例

下面是一个简单的Python实现k最近邻分类算法的示例:

python 复制代码
import numpy as np
from collections import Counter

# 计算欧氏距离
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, y):
        self.X_train = X
        self.y_train = y

    def predict(self, X):
        y_pred = [self._predict(x) for x in X]
        return np.array(y_pred)

    def _predict(self, x):
        # 计算所有训练样本与输入样本的距离
        distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
        # 按距离排序,并获取最近的k个样本的索引
        k_indices = np.argsort(distances)[:self.k]
        # 获取这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]

使用示例:

python 复制代码
# 定义训练数据
X_train = np.array([[1, 2], [1.5, 1.8], [5, 8], [8, 8], [1, 0.6], [9, 11]])
y_train = np.array(['red', 'red', 'blue', 'blue', 'red', 'blue'])

# 创建KNN模型,设置k=3
knn = KNN(k=3)
# 训练模型
knn.fit(X_train, y_train)

# 定义测试数据
X_test = np.array([[2, 2], [6, 9], [1, 1], [10, 10]])
# 预测测试数据的标签
y_pred = knn.predict(X_test)

# 打印预测结果
print(y_pred)  # 输出 ['red' 'blue' 'red' 'blue']

这个示例中使用的是欧氏距离进行距离度量,可以根据需要修改为其他距离度量方式。同时,可以根据实际情况调整k值来获取更好的分类结果。

相关推荐
AI机器学习算法4 小时前
深度学习模型演进:6个里程碑式CNN架构
人工智能·深度学习·cnn·大模型·ai学习路线
Ztopcloud极拓云视角4 小时前
从 OpenRouter 数据看中美 AI 调用量反转:统计口径、模型路由与多云应对方案
人工智能·阿里云·大模型·token·中美ai
AI医影跨模态组学4 小时前
如何将深度学习MTSR与膀胱癌ITGB8/TGF-β/WNT机制建立关联,并进一步解释其与患者预后及肿瘤侵袭、免疫抑制的生物学联系
人工智能·深度学习·论文·医学影像
搬砖的前端5 小时前
AI编辑器开源主模型搭配本地模型辅助对标GPT5.2/GPT5.4/Claude4.6(前端开发专属)
人工智能·开源·claude·mcp·trae·qwen3.6·ops4.6
Python私教5 小时前
Hermes Agent 安全加固与生态扩展:2026-04-23 更新解析
人工智能
饼干哥哥5 小时前
Kimi K2.6 干成了Claude Design国产版,一句话生成电影级的动态品牌网站
人工智能
肖有米XTKF86466 小时前
带货者精品优选模式系统的平台解析
人工智能·信息可视化·团队开发·csdn开发云
天天进步20156 小时前
打破沙盒限制:OpenWork 如何通过权限模型实现安全的系统级调用?
人工智能·安全
xcbrand6 小时前
政府事业机构品牌策划公司找哪家
大数据·人工智能·python
骥龙6 小时前
第十篇:合规与未来展望——构建AI智能体安全标准
人工智能·安全