Python基础算法解析:K最近邻算法

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
简介: Python基础算法解析:K最近邻算法

K最近邻(K-Nearest Neighbors,简称KNN)是一种简单而有效的监督学习算法,常用于分类和回归问题。本文将介绍KNN算法的原理、实现步骤以及如何使用Python进行KNN的编程实践。

什么是K最近邻算法?

K最近邻算法是一种基于实例的学习方法,其核心思想是:如果一个样本在特征空间中的k个最相似(即最近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。KNN算法不需要训练模型,而是利用训练集中的数据进行预测。

KNN的原理

KNN算法的原理非常简单,主要包括以下几个步骤:

  • 计算距离:计算测试样本与训练样本之间的距离,通常使用欧氏距离或曼哈顿距离。
  • 选择最近邻:选取与测试样本距离最近的k个训练样本。
  • 进行分类(或回归):对于分类问题,通过投票机制确定测试样本的类别;对于回归问题,通过求取k个最近邻样本的平均值确定测试样本的输出。

    KNN的实现步骤

  • 计算距离:对于每个测试样本,计算其与所有训练样本的距离。
  • 选择最近邻:选取与测试样本距离最近的k个训练样本。
  • 进行分类(或回归):对于分类问题,采用多数表决法确定测试样本的类别;对于回归问题,采用平均值确定测试样本的输出。

    Python实现KNN算法

    下面通过Python代码演示如何实现KNN算法:
import numpy as np

class KNN:
    def __init__(self, k=3):
        self.k = k

    def euclidean_distance(self, x1, x2):
        return np.sqrt(np.sum((x1 - x2) ** 2))

    def predict_classification(self, X_test, X_train, y_train):
        y_pred = [self._predict_single_classification(x, X_train, y_train) for x in X_test]
        return np.array(y_pred)

    def _predict_single_classification(self, x, X_train, y_train):
        distances = [self.euclidean_distance(x, x_train) for x_train in X_train]
        k_indices = np.argsort(distances)[:self.k]
        k_nearest_labels = [y_train[i] for i in k_indices]
        most_common = np.argmax(np.bincount(k_nearest_labels))
        return most_common

    def predict_regression(self, X_test, X_train, y_train):
        y_pred = [self._predict_single_regression(x, X_train, y_train) for x in X_test]
        return np.array(y_pred)

    def _predict_single_regression(self, x, X_train, y_train):
        distances = [self.euclidean_distance(x, x_train) for x_train in X_train]
        k_indices = np.argsort(distances)[:self.k]
        k_nearest_labels = [y_train[i] for i in k_indices]
        return np.mean(k_nearest_labels)

在上述代码中,我们定义了一个名为KNN的类,包括了初始化方法、欧氏距离计算方法、分类预测方法和回归预测方法。其中,predict_classification方法用于进行分类预测,predict_regression方法用于进行回归预测。

使用KNN进行分类和回归

接下来,让我们使用KNN算法对一个简单的分类和回归问题进行预测:

from sklearn.datasets import load_iris, load_boston
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, mean_squared_error

# 分类问题示例
iris = load_iris()
X = iris.data
y = iris.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

knn_classifier = KNN(k=3)
y_pred_classification = knn_classifier.predict_classification(X_test, X_train, y_train)
accuracy = accuracy_score(y_test, y_pred_classification)
print("Classification Accuracy:", accuracy)

# 回归问题示例
boston = load_boston()
X = boston.data
y = boston.target

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

knn_regressor = KNN(k=3)
y_pred_regression = knn_regressor.predict_regression(X_test, X_train, y_train)
mse = mean_squared_error(y_test, y_pred_regression)
print("Mean Squared Error:", mse)

总结

K最近邻算法是一种简单而强大的监督学习算法,适用于分类和回归问题。通过本文的介绍,你已经了解了KNN算法的原理、实现步骤以及如何使用Python进行编程实践。希望本文能够帮助你更好地理解和应用KNN算法。

目录
相关文章
|
10天前
|
负载均衡 算法 Java
Spring Cloud全解析:负载均衡算法
本文介绍了负载均衡的两种方式:集中式负载均衡和进程内负载均衡,以及常见的负载均衡算法,包括轮询、随机、源地址哈希、加权轮询、加权随机和最小连接数等方法,帮助读者更好地理解和应用负载均衡技术。
|
11天前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
46 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
1天前
|
数据采集 存储 JSON
从零到一构建网络爬虫帝国:HTTP协议+Python requests库深度解析
在网络数据的海洋中,网络爬虫遵循HTTP协议,穿梭于互联网各处,收集宝贵信息。本文将从零开始,使用Python的requests库,深入解析HTTP协议,助你构建自己的网络爬虫帝国。首先介绍HTTP协议基础,包括请求与响应结构;然后详细介绍requests库的安装与使用,演示如何发送GET和POST请求并处理响应;最后概述爬虫构建流程及挑战,帮助你逐步掌握核心技术,畅游数据海洋。
13 3
|
7天前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
22 9
|
8天前
|
存储 算法 测试技术
预见未来?Python线性回归算法:数据中的秘密预言家
【9月更文挑战第11天】在数据的海洋中,线性回归算法犹如智慧的预言家,助我们揭示未知。本案例通过收集房屋面积、距市中心距离等数据,利用Python的pandas和scikit-learn库构建房价预测模型。经过训练与测试,模型展现出较好的预测能力,均方根误差(RMSE)低,帮助房地产投资者做出更明智决策。尽管现实关系复杂多变,线性回归仍提供了有效工具,引领我们在数据世界中自信前行。
22 5
|
8天前
|
机器学习/深度学习 人工智能 TensorFlow
深入骨髓的解析:Python中神经网络如何学会‘思考’,解锁AI新纪元
【9月更文挑战第11天】随着科技的发展,人工智能(AI)成为推动社会进步的关键力量,而神经网络作为AI的核心,正以其强大的学习和模式识别能力开启AI新纪元。本文将探讨Python中神经网络的工作原理,并通过示例代码展示其“思考”过程。神经网络模仿生物神经系统,通过加权连接传递信息并优化输出。Python凭借其丰富的科学计算库如TensorFlow和PyTorch,成为神经网络研究的首选语言。
11 1
|
16天前
|
机器学习/深度学习 数据采集 存储
一文读懂蒙特卡洛算法:从概率模拟到机器学习模型优化的全方位解析
蒙特卡洛方法起源于1945年科学家斯坦尼斯劳·乌拉姆对纸牌游戏中概率问题的思考,与约翰·冯·诺依曼共同奠定了该方法的理论基础。该方法通过模拟大量随机场景来近似复杂问题的解,因命名灵感源自蒙特卡洛赌场。如今,蒙特卡洛方法广泛应用于机器学习领域,尤其在超参数调优、贝叶斯滤波等方面表现出色。通过随机采样超参数空间,蒙特卡洛方法能够高效地找到优质组合,适用于处理高维度、非线性问题。本文通过实例展示了蒙特卡洛方法在估算圆周率π和优化机器学习模型中的应用,并对比了其与网格搜索方法的性能。
106 1
|
11天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
32 0
|
19天前
|
Java 缓存 数据库连接
揭秘!Struts 2性能翻倍的秘诀:不可思议的优化技巧大公开
【8月更文挑战第31天】《Struts 2性能优化技巧》介绍了提升Struts 2 Web应用响应速度的关键策略,包括减少配置开销、优化Action处理、合理使用拦截器、精简标签库使用、改进数据访问方式、利用缓存机制以及浏览器与网络层面的优化。通过实施这些技巧,如懒加载配置、异步请求处理、高效数据库连接管理和启用GZIP压缩等,可显著提高应用性能,为用户提供更快的体验。性能优化需根据实际场景持续调整。
44 0
|
19天前
|
数据采集 存储 数据库
Python中实现简单爬虫与数据解析
【8月更文挑战第31天】在数字化时代的浪潮中,数据成为了新的石油。本文将带领读者通过Python编程语言,从零开始构建一个简单的网络爬虫,并展示如何对爬取的数据进行解析和处理。我们将一起探索请求网站、解析HTML以及存储数据的基础知识,让每个人都能成为自己数据故事的讲述者。