利用Python实现kNN算法的代码

yizhihongxing

Python实现kNN算法的代码

kNN算法是一种常用的机器学习算法,它可以用于分类和回归问题。本文中,我们将介绍如何使用Python实现kNN算法的代码。我们分为以下几个步骤:

  1. 加载数据集
  2. 数据预处理
  3. 定义kNN算法
  4. 示例说明

步骤1:加载数据集

在实现kNN算法之前,我们需要加载数据集。在这个例子中,我们将使用Iris数据集。我们可以使用以下代码加载数据集:

from sklearn.datasets import load_iris

iris = load_iris()
X = iris.data
y = iris.target

在这个示例中,我们首先导入load_iris函数,它可以加载Iris数据集。然后,我们使用load_iris函数加载数据集,并将特征矩阵存储在X变量中,将标签存储在y变量中。

步骤2:数据预处理

在加载数据集之后,需要对数据进行预处理。在这个例子中,我们将使用标准化来预处理数据。我们可以使用以下代码对数据进行标准化:

from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X = scaler.fit_transform(X)

在这个示例中,我们首先导入StandardScaler类,它可以用于标准化数据。然后,我们创建一个名为scaler的StandardScaler对象,并使用fit_transform方法对特征矩阵X进行标准化。

步骤3:定义kNN算法

在定义数据集和预处理数据之后,我们可以开始实现kNN算法。在这个例子中,我们将使用欧几里得距离来计算样本之间的距离。我们可以使用以下代码定义kNN算法:

import numpy as np

def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2) ** 2))

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

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

    def predict(self, X):
        y_pred = [self._predict(x) for x in X]
        return np.array(y_pred)

    def _predict(self, x):
        distances = [euclidean_distance(x, x_train) for x_train in self.X_train]
        k_indices = np.argsort(distances)[:self.k]
        k_nearest_labels = [self.y_train[i] for i in k_indices]
        most_common = Counter(k_nearest_labels).most_common(1)
        return most_common[0][0]

在这个示例中,我们首先定义了一个名为euclidean_distance的函数,它可以计算两个样本之间的欧几里得距离。然后,我们定义了一个名为KNN的类,它表示kNN算法。我们使用fit方法来训练模型,使用predict方法来预测新样本的标签。在_predict方法中,我们计算新样本与训练集中所有样本之间的距离,并选择k个最近的样本。然后,我们使用Counter类来计算k个最近样本中出现最多的标签,并将其作为预测标签。

步骤4:示例说明

示例1:使用kNN算法进行分类

在这个示例中,我们将使用kNN算法进行分类。我们可以使用以下代码运行kNN算法:

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

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

knn = KNN(k=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

在这个示例中,我们首先使用train_test_split函数将数据集分为训练集和测试集。然后,我们创建一个名为knn的KNN对象,并使用fit方法训练模型。最后,我们使用predict方法预测测试集的标签,并使用accuracy_score函数计算模型的准确率。

示例2:调整kNN算法的k值

在这个示例中,我们将调整kNN算法的k值,并比较不同k值下的性能。我们可以使用以下代码运行kNN算法:

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

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

for k in range(1, 11):
    knn = KNN(k=k)
    knn.fit(X_train, y_train)
    y_pred = knn.predict(X_test)

    accuracy = accuracy_score(y_test, y_pred)
    print("k:", k, "Accuracy:", accuracy)

在这个示例中,我们首先使用train_test_split函数将数据集分为训练集和测试集。然后,我们使用for循环比较不同k值下的性能。在每个k值下,我们创建一个名为knn的KNN对象,并使用fit方法训练模型。最后,我们使用predict方法预测测试集的标签,并使用accuracy_score函数计算模型的准确率。我们在每个k值下打印准确率。

总结

在本文中,我们介绍了如何使用Python实现kNN算法的代码。我们首先加载数据集,然后使用标准化对数据进行预处理。最后,我们定义了kNN算法,并提供了两个例说明,分别演示了如何使用kNN算法进行分类和如何调整kNN算法的k值。

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

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

相关文章

  • python网络爬虫之如何伪装逃过反爬虫程序的方法

    有关“python网络爬虫之如何伪装逃过反爬虫程序的方法”的完整攻略,我将从以下几个方面进行介绍: 反爬虫程序的概念及其原理 爬虫程序被识别的方法 伪装请求头信息的方法 使用代理IP的方法 1. 反爬虫程序的概念及其原理 为防止恶意爬虫对网站造成威胁或数据抓取过多造成服务器压力等问题,许多网站都会设置反爬虫程序。反爬虫程序可以检测到来自程序对服务器发起的请求…

    python 2023年5月14日
    00
  • Python字符串常用方法以及其应用场景详解

    Python字符串常用方法以及其应用场景详解 1. Python字符串常用方法 在Python中,字符串是一种非常重要的数据类型,其提供了很多方法方便我们进行字符串处理。下面就是一些常用的字符串方法: 1.1 len()方法 len()方法用于返回字符串长度。 示例代码: str1 = "hello world" print(len(st…

    python 2023年6月3日
    00
  • Python中如何进行网络编程?

    在Python中进行网络编程可以使用socket库,socket库是Python内置的与网络通信相关的库。 创建一个socket对象 使用socket库,我们需要创建一个socket对象,可以指定使用IPv4或IPv6协议,以及使用TCP或UDP协议。 创建IPv4和TCP socket对象示例: import socket # 创建IPv4 TCP soc…

    python 2023年4月19日
    00
  • Python re.findall中正则表达式(.*?)和参数re.S使用

    当我们在Python中使用re.findall()方法对正则表达式进行匹配时,有时候需要匹配的文本可能存在换行符等特殊字符,这时我们就需要使用正则表达式中的.*?和re.S参数进行匹配。 .*?指的是非贪婪模式的任意字符,其与.*的差别在于后者是贪婪模式,会尽量匹配最长的文本,而前者则是尽量匹配最短的文本,以防止匹配过多的文本而导致的错误结果。 re.S是在…

    python 2023年6月3日
    00
  • python实现公司年会抽奖程序

    Python实现公司年会抽奖程序攻略 简介 本攻略将带你了解如何使用Python实现公司年会抽奖程序。该程序可以生成随机的中奖结果,并输出给参加活动的员工。 程序概述 该程序的实现思路如下: 导入必要的库:random,用于生成随机数 读取参加活动的员工名单,保存到一个列表中 设定中奖数量 使用random库生成中奖名单,并在名单中去重 输出中奖结果给员工 …

    python 2023年5月23日
    00
  • Python正则表达式的小练习分享

    Python正则表达式是一种强大的工具,可以用于匹配、查找和替换文本中的模式。本攻略将分享一些Python正则表达式的小练习,帮助读者更好地掌握正则式的应用。 练习1:配邮箱地址 匹配邮箱地址是正则表达式的一个经典应用。下面是一个例子演示如何使用正则表达式匹配邮箱地址: import re email = ‘example@example.com’ patt…

    python 2023年5月14日
    00
  • Python学习之str 以及常用的命令

    Python学习之str 以及常用的命令 1. str的概念及操作 在Python中,str是一种常用的数据类型,即字符串类型,它用于表示字符序列,可以使用单引号、双引号或三引号定义。以下是一些常用的字符串操作: 1.1 字符串的拼接 使用“+”操作符或字符串的join()方法可以将多个字符串拼接成一个新的字符串,示例如下: s1 = ‘Hello’ s2 …

    python 2023年6月5日
    00
  • Python中zipfile压缩包模块的使用

    使用Python的zipfile模块可以很方便地压缩、解压缩、读取zip文件的内容。本文将详细介绍zipfile模块的使用方法。 压缩文件 使用zipfile模块中的ZipFile类可以创建、添加、修改zip文件。以下是创建一个zip文件的示例代码: import zipfile zipname = "example.zip" with …

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