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

本文涉及的产品
实时数仓Hologres,5000CU*H 100GB 3个月
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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算法。

目录
相关文章
|
4天前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
24 4
|
5天前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
9天前
|
算法 测试技术 开发者
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗
在Python开发中,性能优化和代码审查至关重要。性能优化通过改进代码结构和算法提高程序运行速度,减少资源消耗;代码审查通过检查源代码发现潜在问题,提高代码质量和团队协作效率。本文介绍了一些实用的技巧和工具,帮助开发者提升开发效率。
12 3
|
10天前
|
测试技术 开发者 Python
深入浅出:Python中的装饰器解析与应用###
【10月更文挑战第22天】 本文将带你走进Python装饰器的世界,揭示其背后的魔法。我们将一起探索装饰器的定义、工作原理、常见用法以及如何自定义装饰器,让你的代码更加简洁高效。无论你是Python新手还是有一定经验的开发者,相信这篇文章都能为你带来新的启发和收获。 ###
9 1
|
10天前
|
设计模式 测试技术 开发者
Python中的装饰器深度解析
【10月更文挑战第24天】在Python的世界中,装饰器是那些能够为函数或类“添彩”的魔法工具。本文将带你深入理解装饰器的概念、工作原理以及如何自定义装饰器,让你的代码更加优雅和高效。
|
11天前
|
机器学习/深度学习 人工智能 算法
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
车辆车型识别,使用Python作为主要编程语言,通过收集多种车辆车型图像数据集,然后基于TensorFlow搭建卷积网络算法模型,并对数据集进行训练,最后得到一个识别精度较高的模型文件。再基于Django搭建web网页端操作界面,实现用户上传一张车辆图片识别其类型。
34 0
【车辆车型识别】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+算法模型
|
16天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
19天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。
|
27天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
60 0
|
27天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
49 0