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

yizhihongxing

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实现RLE格式分割标注文件的格式转换

    下面我将详细讲解“基于Python实现RLE格式分割标注文件的格式转换”的完整攻略。 一、RLE格式分割标注文件是什么? RLE格式是一种更加高效的图像语义分割数据表示格式,其数据以一串RLE编码的方式进行存储,而不是以像素点的形式存储,有效减少了数据的体积。RLE格式分割标注文件即是使用RLE格式对物体分割区域进行标注的文件。 二、RLE格式分割标注文件的…

    python 2023年5月20日
    00
  • Python实现孤立随机森林算法的示例代码

    欢迎阅读本文,本文将详细讲解如何用 Python 实现孤立随机森林算法,并提供示例代码。 1. 了解孤立森林算法 孤立森林算法是一种用来检测异常值的算法。它基于随机森林的思想,通过构建随机森林进行异常值的检测。孤立森林算法的核心思想是,异常值在随机树中的深度较浅,正常值在随机树中的深度较深。 2. 孤立森林算法的实现步骤 2.1 数据预处理 首先需要对数据进…

    python 2023年6月3日
    00
  • python中urllib.request和requests的使用及区别详解

    以下是关于Python中urllib.request和requests的使用及区别详解的攻略: Python中urllib.request和requests的使用及区别详解 在Python中,urllib.request和requests都是常用的HTTP客户端库。以下是Python中urllib.request和requests的使用及区别详解的攻略。 u…

    python 2023年5月14日
    00
  • python发送邮件接收邮件示例分享

    Python发送邮件接收邮件完整攻略 一、发送邮件 1. 导入模块 首先,在代码中导入所需的模块:smtplib、email.mime.multipart、email.mime.text、email.mime.image。其中,smtplib模块提供SMTP邮件发送功能,email.mime.multipart、email.mime.text及email.m…

    python 2023年5月20日
    00
  • python 如何调用远程接口

    Python如何调用远程接口 在Python中,可以使用requests库调用远程接口。requests库是一个Python第三方库,用于发送HTTP请求。以下是两个示例,分别介绍了如何使用requests库调用远程接口。 GET请求示例 以下是一个示例,可以使用requests库发送GET请求调用远程接口: import requests response…

    python 2023年5月15日
    00
  • python爬虫爬取监控教务系统的思路详解

    下面我将详细讲解如何使用Python爬虫爬取监控教务系统的思路以及具体实现步骤。 1. 思路 爬取教务系统的思路其实很简单,主要分为以下几步: 分析教务系统网页结构,确定需要爬取的数据; 模拟登录教务系统,获取登录后的Cookie; 使用爬虫程序模拟登录并发送GET或POST请求获取数据; 解析HTML页面并抽取需要的数据; 保存数据到本地或数据库。 2. …

    python 2023年5月14日
    00
  • Python两个字典键同值相加的几种方法

    当两个字典中存在相同键但对应的值不同时,可以通过多种方法将它们的值相加。 下面介绍几种实现方法: 方法一:循环遍历 可以循环遍历一个字典,并检查该键是否在另一个字典中。如果两个字典中都包含该键,则将它们的对应值加起来并更新到一个新字典中。 dict1 = {"a": 1, "b": 2, "c": …

    python 2023年5月13日
    00
  • python实现读取excel文件中所有sheet操作示例

    下面是“Python实现读取Excel文件中所有Sheet操作示例”的完整实例教程: 1. 安装依赖库 在使用Python读取Excel文件之前,需要安装一个名为openpyxl的Python库,它可以方便地读取、处理和写入Excel文件。在命令行中输入以下命令来安装: pip install openpyxl 2. 读取Excel文件中所有Sheet 接下…

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