使用Python处理KNN分类算法的实现代码

KNN(K-Nearest Neighbors)是一种常用的分类算法,它的基本思想是根据样本之间的距离来判断它们的类别。在本文中,我们将介绍如何使用Python实现KNN分类算法,并提供两个示例说明。

KNN分类算法的实现

KNN分类算法的实现过程包括以下几个步骤:

  1. 加载数据集
  2. 划分训练集和测试集
  3. 计算样本之间的距离
  4. 选择K个最近邻样本
  5. 根据K个最近邻样本的类别进行投票
  6. 输出预测结果

下面是一个简单的示例,用于演示如何使用Python实现KNN分类算法。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
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.3, random_state=42)

# 计算样本之间的距离
def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2) ** 2))

# 选择K个最近邻样本
def get_neighbors(X_train, y_train, x_test, k):
    distances = []
    for i in range(len(X_train)):
        dist = euclidean_distance(X_train[i], x_test)
        distances.append((X_train[i], y_train[i], dist))
    distances.sort(key=lambda x: x[2])
    neighbors = []
    for i in range(k):
        neighbors.append((distances[i][0], distances[i][1]))
    return neighbors

# 根据K个最近邻样本的类别进行投票
def vote(neighbors):
    class_votes = {}
    for neighbor in neighbors:
        label = neighbor[1]
        if label in class_votes:
            class_votes[label] += 1
        else:
            class_votes[label] = 1
    sorted_votes = sorted(class_votes.items(), key=lambda x: x[1], reverse=True)
    return sorted_votes[0][0]

# 输出预测结果
def predict(X_train, y_train, X_test, k):
    predictions = []
    for i in range(len(X_test)):
        neighbors = get_neighbors(X_train, y_train, X_test[i], k)
        result = vote(neighbors)
        predictions.append(result)
    return predictions

# 训练模型并预测测试集
y_pred = predict(X_train, y_train, X_test, k=3)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)

在这个示例中,我们首先使用load_iris函数加载鸢尾花数据集。然后,我们将数据集划分为训练集和测试集,其中测试集占总数据集的30%。接下来,我们定义了三个函数:euclidean_distance用于计算样本之间的欧几里得距离,get_neighbors用于选择K个最近邻样本,vote用于根据K个最近邻样本的类别进行投票。然后,我们定义了一个predict函数,用于训练模型并预测测试集。最后,我们计算模型的准确率,并输出结果。

示例1:使用KNN分类算法进行鸢尾花分类

下面是一个示例,用于演示如何使用KNN分类算法进行鸢尾花分类。在这个示例中,我们使用KNN分类算法来训练模型,并使用测试集来评估模型的准确率。

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
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.3, random_state=42)

# 计算样本之间的距离
def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2) ** 2))

# 选择K个最近邻样本
def get_neighbors(X_train, y_train, x_test, k):
    distances = []
    for i in range(len(X_train)):
        dist = euclidean_distance(X_train[i], x_test)
        distances.append((X_train[i], y_train[i], dist))
    distances.sort(key=lambda x: x[2])
    neighbors = []
    for i in range(k):
        neighbors.append((distances[i][0], distances[i][1]))
    return neighbors

# 根据K个最近邻样本的类别进行投票
def vote(neighbors):
    class_votes = {}
    for neighbor in neighbors:
        label = neighbor[1]
        if label in class_votes:
            class_votes[label] += 1
        else:
            class_votes[label] = 1
    sorted_votes = sorted(class_votes.items(), key=lambda x: x[1], reverse=True)
    return sorted_votes[0][0]

# 输出预测结果
def predict(X_train, y_train, X_test, k):
    predictions = []
    for i in range(len(X_test)):
        neighbors = get_neighbors(X_train, y_train, X_test[i], k)
        result = vote(neighbors)
        predictions.append(result)
    return predictions

# 训练模型并预测测试集
y_pred = predict(X_train, y_train, X_test, k=3)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)

在这个示例中,我们首先使用load_iris函数加载鸢尾花数据集。然后,我们将数据集划分为训练集和测试集,其中测试集占总数据集的30%。接下来,我们定义了三个函数:euclidean_distance用于计算样本之间的欧几里得距离,get_neighbors用于选择K个最近邻样本,vote用于根据K个最近邻样本的类别进行投票。然后,我们定义了一个predict函数,用于训练模型并预测测试集。最后,我们计算模型的准确率,并输出结果。

示例2:使用KNN分类算法进行手写数字识别

下面是一个示例,用于演示如何使用KNN分类算法进行手写数字识别。在这个示例中,我们使用KNN分类算法来训练模型,并使用测试集来评估模型的准确率。

import numpy as np
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 加载数据集
digits = load_digits()
X = digits.data
y = digits.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 计算样本之间的距离
def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2) ** 2))

# 选择K个最近邻样本
def get_neighbors(X_train, y_train, x_test, k):
    distances = []
    for i in range(len(X_train)):
        dist = euclidean_distance(X_train[i], x_test)
        distances.append((X_train[i], y_train[i], dist))
    distances.sort(key=lambda x: x[2])
    neighbors = []
    for i in range(k):
        neighbors.append((distances[i][0], distances[i][1]))
    return neighbors

# 根据K个最近邻样本的类别进行投票
def vote(neighbors):
    class_votes = {}
    for neighbor in neighbors:
        label = neighbor[1]
        if label in class_votes:
            class_votes[label] += 1
        else:
            class_votes[label] = 1
    sorted_votes = sorted(class_votes.items(), key=lambda x: x[1], reverse=True)
    return sorted_votes[0][0]

# 输出预测结果
def predict(X_train, y_train, X_test, k):
    predictions = []
    for i in range(len(X_test)):
        neighbors = get_neighbors(X_train, y_train, X_test[i], k)
        result = vote(neighbors)
        predictions.append(result)
    return predictions

# 训练模型并预测测试集
y_pred = predict(X_train, y_train, X_test, k=3)

# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)

在这个示例中,我们首先使用load_digits函数加载手写数字数据集。然后,我们将数据集划分为训练集和测试集,其中测试集占总数据集的30%。接下来,我们定义了三个函数:euclidean_distance用于计算样本之间的欧几里得距离,get_neighbors用于选择K个最近邻样本,vote用于根据K个最近邻样本的类别进行投票。然后,我们定义了一个predict函数,用于训练模型并预测测试集。最后,我们计算模型的准确率,并输出结果。

总结

本文介绍了如何使用Python实现KNN分类算法,并提供了两个示例说明。在实际应用中,我们可以根据具体的问题选择不同的K值和距离度量方法,并结合其他算法进行综合处理,实现复杂的数据结构和算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python处理KNN分类算法的实现代码 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • Python设置默认编码为utf8的方法

    如果你使用Python 2.x版本,可以通过在脚本开头添加以下代码来设置默认编码为utf8: # -*- coding: utf-8 -*- 这条代码告诉Python解释器,脚本中的所有文本都应当按照utf8编码解析。在Python 3.x版本,utf8已经被默认设置为编码,你不需要再做这个设置了。 另外,你也可以在Python命令行环境下以交互方式设置编码…

    python 2023年5月13日
    00
  • 如何安装并使用conda指令管理python环境

    安装conda: 安装Anaconda:可以从官网下载对应系统版本的Anaconda安装包,双击安装包即可安装。安装完成后,在命令行中输入conda –version,可以查看是否安装成功。 安装Miniconda:可以从官网下载对应系统版本的Miniconda安装包,双击安装包即可安装。安装完成后,在命令行中输入conda –version,可以查看是…

    python 2023年5月18日
    00
  • Python标准库之zipfile和tarfile模块的使用

    Python标准库之zipfile和tarfile模块的使用攻略 简介 压缩文件在网页和文件传输中是很常见的,很多时候我们需要用到Python对压缩文件的操作。Python标准库中提供了两个模块zipfile和tarfile,可以用来读取、写入、解压缩、压缩zip、tar和其他常见的压缩格式文件。 本篇攻略将介绍zipfile和tarfile模块的使用方法,…

    python 2023年6月3日
    00
  • 利用python进行接口测试及类型介绍

    我将为你讲解利用python进行接口测试及类型介绍的完整实例教程。首先我们需要明确以下问题: 什么是接口测试? 为什么选择用python进行接口测试? python中有哪些常用的库可以用来进行接口测试? 接口测试是指测试不同的软件系统或模块之间的接口是否正确地协同工作。其目的是验证软件系统或模块是否符合预期的设计目标,是否满足客户的需求,其主要测试内容包括接…

    python 2023年5月13日
    00
  • 从远程 python 脚本捕获数据。

    【问题标题】:Capture data from remote python script .从远程 python 脚本捕获数据。 【发布时间】:2023-04-05 00:14:02 【问题描述】: 我有一个远程 python 脚本,我使用另一个 python 脚本从本地系统调用它。 我想捕获远程脚本返回的dict类型对象,我该怎么做。 遥控器示例: da…

    Python开发 2023年4月6日
    00
  • Android EventBus粘性事件实现机制探究

    Android EventBus粘性事件实现机制探究 什么是EventBus粘性事件? 在使用EventBus时,除了普通的事件外,还有一种特殊的事件——粘性事件。 所谓的粘性事件,是指在post一个事件时,如果当前并没有订阅者,那么这个事件会被保存下来(以队列的形式),等这个订阅者再次订阅时,这个事件会再次被发送出去,这就是EventBus的粘性事件实现机…

    python 2023年6月13日
    00
  • python 爬取小说并下载的示例

    Python 爬取小说并下载的示例 Python 是一种广泛使用的编程语言,被用于数据分析、人工智能等多个领域。其中,爬虫是 Python 最常用的功能之一。本文将介绍使用 Python 爬取小说并下载的示例,帮助你了解 Python 爬虫的基本操作。 爬取网站上的小说 首先,我们需要找到想要爬取的小说网站。例如笔趣阁(https://www.biquge.…

    python 2023年5月14日
    00
  • Python曲线拟合详解

    Python曲线拟合详解 什么是曲线拟合 曲线拟合是一种基于统计学和数学的应用技术,用于寻找一条函数曲线来描绘数据集的关系。这些数据通常是通过实验或观察收集到的,它们的关系可能是曲线、线性或非线性的。 为什么需要曲线拟合 曲线拟合可用于构建模型、预测结果以及优化实验结果。通过曲线拟合,我们可以分析出实验数据之间的关系,推导出对应的函数关系,预测未来的趋势和结…

    python 2023年5月18日
    00
合作推广
合作推广
分享本页
返回顶部