利用Python实现kNN算法的代码

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实现KNN分类算法

    基于Python实现KNN分类算法 KNN(K-Nearest Neighbors)算法是一种常用的分类算法,它可以用于多分类和回归问题。在Python中,可以使用scikit-learn库实现KNN分类算法。本文将详细讲解Python实现KNN分类算法的整个攻略,包括算法原理、Python实现过程和示例。 算法原理 KNN算法的基本思想是根据样本的特征值,…

    python 2023年5月14日
    00
  • 一个入门级python爬虫教程详解

    一个入门级Python爬虫教程详解 本教程旨在介绍基本的Python爬虫知识,帮助初学者了解如何使用Python爬取网页内容。在本教程中,我们使用BeautifulSoup、Requests等库来实现。 1. 安装必要的库 为了使用Python爬虫,需要安装以下库: pip install requests pip install beautifulsoup…

    python 2023年5月14日
    00
  • Python使用Appium在移动端抓取微博数据的实现

    我可以为您详细讲解“Python使用Appium在移动端抓取微博数据的实现”的完整攻略。 概述 本攻略主要介绍如何使用Python和Appium在移动端抓取微博数据。通过本文,您将了解如何配置Appium环境、编写Python脚本,并通过两个示例了解如何使用Appium对移动端进行抓取。 前提要求 在开始本攻略之前,您需要具备以下前提要求: 一定的Pytho…

    python 2023年6月3日
    00
  • 如何在 Python 中使用 Selenium 设置动态显式等待?

    【问题标题】:How can I set a dynamic explicit wait using Selenium in Python?如何在 Python 中使用 Selenium 设置动态显式等待? 【发布时间】:2023-04-05 11:02:01 【问题描述】: 我几天前构建的一个程序在这里遇到了一点问题,所以我将非常简单地解释它: 我正在使用…

    Python开发 2023年4月5日
    00
  • Python Ruby 等语言弃用自增运算符原因剖析

    Python、Ruby等语言弃用自增运算符原因剖析 在Python、Ruby等动态语言中,不再支持自增运算符(++)的使用,其原因主要有以下几点: 1. 语法歧义 在C语言中,自增运算符可以放在变量名前或者后面,但是在不同的语法环境下会产生不同的意义。 例如: int a = 1, b = 0; b = a++; // 等价于 b = a; a = a + …

    python 2023年5月13日
    00
  • 如何在NumPy数组上映射一个函数

    在NumPy中,使用vectorize()函数可以在数组上映射函数。使用该函数,可以将一个接受标量输入并返回标量输出的Python函数转换为可用于接受NumPy数组并返回NumPy数组的函数。以下是在NumPy数组上映射函数的步骤: 步骤1:定义一个原始函数 定义一个Python函数,该函数接受标量输入并返回标量输出。例如,我们可以定义一个函数来计算平方。 …

    python-answer 2023年3月25日
    00
  • python定间隔取点(np.linspace)的实现

    Python定间隔取点(np.linspace)的实现 在Python中,我们可以使用NumPy库中的np.linspace函数来实现定间隔取点的操作。本文将详细介绍np.linspace函数的法和用法,并提供一些示例说明。 np.linspace函数的语法 np.linspace函数的语法如下: np.linspace(start, stop, num=5…

    python 2023年5月13日
    00
  • Python 备份程序代码实现

    Python 备份程序代码实现是一个非常常见的需求。例如,在为自己的电脑或服务器备份数据时,通过编写 Python 代码可以快速实现这一功能。以下是我们提供的 Python 备份程序的攻略: 确定备份源和目标 在开始编写 Python 备份程序之前,我们需要明确备份的源和目标。源包含需要备份的文件或文件夹路径,目标则是存储备份文件的文件夹路径。这一步可以通过…

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