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

相关文章

  • PAT甲级真题1020.树的遍历

    翻译和代码思路:Acwing 一个二叉树,树中每个节点的权值互不相同。 现在给出它的后序遍历和中序遍历,请你输出它的层序遍历。 输入格式 第一行包含整数 N,表示二叉树的节点数。 第二行包含 N个整数,表示二叉树的后序遍历。 第三行包含 N 个整数,表示二叉树的中序遍历。 输出格式 输出一行 N个整数,表示二叉树的层序遍历。 数据范围 1<=N<…

    算法与数据结构 2023年4月17日
    00
  • 图文详解感知机算法原理及Python实现

    图文详解感知机算法原理及Python实现 感知机是一种二分类的线性分类模型,是神经网络和深度学习的基础。本文将介绍感知机算法原理和Python实现,并提供两个示例说明。 感知机算法原理 感知机算法的基本原理是通过对特征进行加权求和,然后将结果与阈值进行比较,以确定输入属于哪个类别。具体来说,感知机算法的输入是一个向量x,输出是一个标量y,其中的取值为1或-1…

    python 2023年5月14日
    00
  • Python实现对字典分别按键(key)和值(value)进行排序的方法分析

    Python中可以通过使用sorted函数对字典进行排序操作,该函数能够对字典的键和值进行排序。 对字典按键(key)进行排序 首先,我们需要使用sorted函数对字典的键进行排序。该函数需要传入两个参数,一个是字典本身,另一个是排序规则。其中,我们可以使用lambda表达式来指定排序规则。比如,我们可以按照键的升序或降序排列,如下所示: # 定义一个字典 …

    python 2023年5月13日
    00
  • python批量压缩图像的完整步骤

    下面是使用Python批量压缩图片的完整步骤: 步骤一:安装必要的Python库 在使用Python批量压缩图片前,我们需要安装Python的pillow库和os库。 pip install pillow 安装完成后,使用import语句载入pillow库和os库: import os from PIL import Image 步骤二:定义压缩图片函数 我…

    python 2023年6月3日
    00
  • 使用Python求解带约束的最优化问题详解

    在数学和工程领域中,最优化问题是一类重要的问题,它们的目标是在满足一定的约束条件下,找到一个使得目标函数最小或最大的变量值。在本攻略中,我们将绍如何使用Python求解带约束的最优化问题。 步骤1:导入库 在使用Python求解带约束的最优化问题之前,我们需要导入相关的库。在本攻略中,我们将使用SciPy库中的optimize模块来求解最优化问题。 # 示例…

    python 2023年5月14日
    00
  • python生成并处理uuid的实现方式

    下面是关于“python生成并处理uuid的实现方式”的详细攻略: 什么是UUID UUID是通用唯一标识符(Universally Unique Identifier)的缩写,也称全局唯一标识符(Globally Unique Identifier)。UUID是一个128位的值,它保证在全球范围内是唯一的,并且通常用于标识需要在不同计算机、网络、数据库之间…

    python 2023年6月3日
    00
  • 在Django+Vue3+GraphQL的Blog例子代码中引入Element-Plus UI Framework

    Vue3的UI Framework中有Element-Plus、BalmUI、Quasar、PrimeVue、Ant Design Vue等UI Framework. Element-Plus是Element-UI的Vue3版,Element-UI的使用人数的基数较大,Github上的Star数也较多,就选择了Element-Plus作为这个Blog项目的U…

    python 2023年4月17日
    00
  • 使用PyTorch常见4个错误解决示例详解

    使用PyTorch常见4个错误解决示例详解,以下是攻略: 1. ImportError: No module named ‘torch’错误解决 问题描述: 导入PyTorch时出现以下错误: ImportError: No module named ‘torch’ 原因分析: PyTorch模块未正确安装或未正确导入。 解决方法: 如果您尚未安装PyTor…

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