使用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日

相关文章

  • 如何利用pandas将Excel转为html格式

    我将为您提供如何利用 pandas 将 Excel 转为 HTML 格式的完整实例教程。 步骤一:导入必要的库 首先,我们需要导入 pandas 库和 openpyxl 库,它们是用于处理 Excel 文件的必要库。如果您的电脑中尚未安装这两个库,可以使用以下命令进行安装: pip install pandas openpyxl 在导入库后,我们可以像下面这…

    python 2023年5月14日
    00
  • 笔记本电脑选集成显卡好还是独立显卡好

    笔记本电脑选集成显卡好还是独立显卡好 笔记本电脑的显卡可以分为集成显卡和独立显卡两种。那么,选购笔记本电脑时,应该选集成显卡好还是独立显卡好呢?下面详细讲解一下,希望可以对你有所帮助。 集成显卡 集成显卡是内嵌于主板上的显卡,一般使用内存的一部分。集成显卡因为是内置的,所以不占用其他空间,从而令笔记本电脑变得轻薄。相对于独立显卡来讲,集成显卡成本更低,价格更…

    python 2023年6月5日
    00
  • 教你用python实现自动回复QQ消息(不到60行)

    下面是该攻略的详细讲解。 简介 文章“教你用Python实现自动回复QQ消息(不到60行)”讲解了使用python和酷Q机器人框架进行自动回复QQ消息的实现方法,具体步骤如下: 下载并安装酷Q机器人框架 创建python项目,并安装requests、wxpy库 编写python代码实现自动回复 在酷Q机器人框架中配置并测试 安装酷Q机器人框架 酷Q机器人框架…

    python 2023年5月19日
    00
  • 在Python中对具有多维系数的赫米特级数进行微分

    在Python中对多维系数的赫米特级数进行微分可以使用SymPy库来实现,具体攻略如下: 1. 安装SymPy库 在Python环境下安装SymPy库,可以使用pip命令:pip install sympy。 2. 导入并定义符号 导入SymPy库后,需要定义所需要的符号,使用符号可以让计算机知道需要在哪些变量上进行微分。 import sympy as s…

    python-answer 2023年3月25日
    00
  • 在 Python 中绘制直方图的时间序列

    【问题标题】:Plot timeseries of histograms in Python在 Python 中绘制直方图的时间序列 【发布时间】:2023-04-06 09:49:01 【问题描述】: 我正在尝试在 Python 中绘制时间序列的直方图。 There has been a similar question about this, but i…

    Python开发 2023年4月6日
    00
  • Python 字符串使用多个分隔符分割成列表的2种方法

    使用多个分隔符将字符串分割成列表通常是在数据处理和解析文本时非常有用的一种技巧。Python 提供了多种方法实现该功能,本文将介绍两种常用的方法。 方法一:使用 re 模块 Python re 模块提供了丰富的正则表达式支持,可以用来处理字符串的复杂匹配和替换。使用 re.split() 方法可以方便地将字符串按照多个不同的分隔符分割成列表。 import …

    python 2023年5月14日
    00
  • Python open读写文件实现脚本

    当你需要在Python中读取或写入文件时,你需要学会如何使用Python的内置open函数以及一些基本的读写操作。下面是使用Python open读写文件实现脚本的完整攻略: 打开文件 使用Python打开一个文件是通过open函数实现的。open函数的基本语法如下: f = open(filename, mode) 其中,filename是你想要打开的文件…

    python 2023年6月5日
    00
  • Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError

    Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationError 在使用Python发送邮件时,可能会遇到smtplib.SMTPAuthenticationError异常,该异常表示SMTP服务器拒绝了认证。本文将详细讲解如何解决Python使用QQ邮箱发送邮件报错smtplib.SMTPAuthenticationErr…

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