Python实现KNN(K-近邻)算法的示例代码

下面是详细讲解“Python实现KNN(K-近邻)算法的示例代码”的完整攻略,包括算法原理、Python实现和两个示例。

算法原理

KNN(K近邻)算法是一种基于实例的学习算法,其主要思想是通过计算样本间的距离,找到与目标样本最近的K个样本,然后根据这K个样本的类别,来预测目标样本的类别。

KNN算法的实现过程如下:

  1. 计算目标样本与每个样本之间的距离。
  2. 选取与目标样本距离最近的K个样本。
  3. 根据这K个样本的类别,来预测目标样本的类别。

KNN算法的核心在于如何计算样本之间的距离,常见的距离计算方法包括欧氏距离、曼哈顿距离和余弦距离等。

Python实现

以下是Python实现KNN算法的示例代码:

import numpy as np
from collections import Counter

class KNN:
    def __init__(self, k=3, distance='euclidean'):
        self.k = k
        self.distance = distance

    def fit(self, X, y):
        self.X_train = X
        self.y_train = y

    def predict(self, X):
        y_pred = []
        for x in X:
            distances = []
            for x_train in self.X_train:
                if self.distance == 'euclidean':
                    dist = np.sqrt(np.sum((x - x_train) ** 2))
                elif self.distance == 'manhattan':
                    dist = np.sum(np.abs(x - x_train))
                elif self.distance == 'cosine':
                    dist = np.dot(x, x_train) / (np.linalg.norm(x) * np.linalg.norm(x_train))
                distances.append(dist)
            k_nearest = np.argsort(distances)[:self.k]
            k_nearest_labels = [self.y_train[i] for i in k_nearest]
            most_common = Counter(k_nearest_labels).most_common(1)
            y_pred.append(most_common[0][0])
        return y_pred

上述代码中,使用Python实现了KNN算法。首先定义了一个KNN类,表示KNN算法,包括K值和距离计算方法。在KNN类中,定义了拟合函数fit和预测函数predict。然后使用KNN算法进行分类,返回预测结果。

示例说明

以下两个示例,说明如何使用上述代码进行KNN算法。

示例1

使用KNN算法鸢尾花数据集进行分类。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)

knn = KNN(k=3, distance='euclidean')
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(accuracy_score(y_test, y_pred))

运行上述代码,输出结果如下:

1.0

上述代码,使用KNN算法对鸢尾花数据集进行分类。首先使用train_test_split函数将数据集分为训练集和测试集,然后使用KNN算法进行分类,最后使用accuracy_score函数计算分类准确率。运行结果为分类确率。

示例2

使用KNN算法对手写数字数据集进行分类。

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2, random_state=42)

knn = KNN(k=3, distance='euclidean')
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(accuracy_score(y_test, y_pred))

运行上述代码,输出结果如下:

0.9861111111111112

上述代码中,使用KNN算对手写数字数据集进行分类。首先使用train_test_split函数将数据集分为训练集和测试集,然后使用KNN算法进行分类,最后使用accuracy_score函数计算分类准确率。运行结果为分类准确率。

结语

本文介绍了如何使用Python实现KNN算法,包括算法原理、Python实现和两个示例说明。KNN算法是一种常用的分类算法,其主要思想是通过计算样本之间的距离,找到与目标样本最近的K个样本,然后根据这K个样本的类别,预测目标样本的类别。在实现中,需要注意选择合适的K值和距离计算方法,并根据具体情况进行调整。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现KNN(K-近邻)算法的示例代码 - Python技术站

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

相关文章

  • 使用python实现strcmp函数功能示例

    下面就是使用python实现strcmp函数的完整攻略: 1. strcmp函数的介绍 strcmp函数是一种用于比较两个字符串的函数,其功能是比较两个字符串的大小。这个函数用于定位两个字符串中第一个不同点的位置。在比较过程中,一旦存在不同的点,则返回两个点的ASCII码之差。否则,如果两个字符串长度相等,返回0,如过长度不等,则返回差值。 2. 基本思路 …

    python 2023年6月5日
    00
  • Python这样操作能存储100多万行的xlsx文件

    下面是Python操作存储100多万行xlsx文件的完整实例教程。 环境要求 Python3.x pandas库 实现步骤 读取数据 使用pandas库的read_excel方法读取xlsx文件,将数据存储到DataFame中,例如: import pandas as pd df = pd.read_excel(‘data.xlsx’) 拆分数据 我们将数据…

    python 2023年5月13日
    00
  • 小米5s微信跳一跳小程序python源码

    首先,解析“小米5s微信跳一跳小程序python源码”需要了解以下三个方面:微信小程序的工作原理、跳一跳小程序的游戏机制、Python程序的编写。 微信小程序与传统的应用程序不同,它是基于微信平台提供的API服务开发的。因此,在开发微信小程序时,需要使用微信公众平台开发者工具进行代码编写、调试、预览、上传等操作。 跳一跳小程序的游戏机制是,通过点击屏幕让小人…

    python 2023年5月23日
    00
  • python Selenium爬取内容并存储至MySQL数据库的实现代码

    Python Selenium爬取内容并存储至MySQL数据库的实现代码 Python Selenium是一个自动化测试工具,可以模拟用户在浏览器中的操作,如点击、输入、滚动等。我们可以使用Python Selenium来爬取网页内容,并将其存储至MySQL数据库中。本文将详细讲解Python Selenium爬取内容并存储至MySQL数据库的实现代码,包括…

    python 2023年5月15日
    00
  • Python使用random.shuffle()打乱列表顺序的方法

    使用Python的random模块,可以很方便地对列表进行打乱顺序的操作。打乱列表的方法是使用random.shuffle()函数,该函数可以在原地将列表中的元素打乱。 下面是使用random.shuffle()函数打乱列表顺序的示例代码: import random # 定义一个列表 lst = [1, 2, 3, 4, 5] # 打乱顺序 random.…

    python 2023年6月3日
    00
  • 用来将对象持久化的python pickle模块

    Python的pickle模块用于将Python对象序列化为二进制流,以便保存在文件中或通过网络传输。反之亦然,将序列化的二进制流反序列化为Python对象。 下面是pickle模块的完整攻略: 序列化 在将Python对象序列化为二进制流之前,需要将对象打包。使用pickle模块的dump或dumps函数,可以将对象序列化为二进制流。 使用dump函数序列…

    python 2023年6月2日
    00
  • python opencv 图像拼接的实现方法

    我将为您详细讲解“python opencv图像拼接的实现方法”的完整攻略。 一、背景知识 在讲解图像拼接的实现方法之前,我们需要了解一些背景知识。 1. 像素 图像是由像素组成的,像素是图像的最基本单位。每个像素都有自己的坐标和颜色值。 2. 通道 一个像素的颜色值通常由三种基本颜色(RGB)来表示。对于彩色图像,每个像素都有一个红色通道、一个绿色通道和一…

    python 2023年5月18日
    00
  • Python利用正则表达式实现计算器算法思路解析

    以下是关于“Python利用正则表达式实现计算器算法思路解析”的完整攻略: 简介 计算器是一种常用的工具,用于进行数学运算。在本教程中,我们将介绍如何使用Python和正则表达式实现一个简单的计算器,包括解析表达式、计算结果等步骤。 原理 计算器的实现原理包括解析表达式、转换为逆波兰表达式、计算结果等步骤。在本教程中,我们将使用正则表达式实现表达式的解析,将…

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