利用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的嵌套循环中嵌套打印

    【问题标题】:Nested print in a nested loop in python在python的嵌套循环中嵌套打印 【发布时间】:2023-04-06 20:25:02 【问题描述】: 如何创建在两个 for 循环中创建的输出? 我想要什么: Name1 Adress1 Name2 Adress2 .. 我得到了什么: Name1 Name2 A…

    Python开发 2023年4月7日
    00
  • python3 http提交json参数并获取返回值的方法

    Python具有良好的Http请求库,可以轻松进行http请求,本文将详细讲解如何使用Python3进行HTTP的POST请求并提交JSON参数,以及如何获取返回值的方法。 发送HTTP POST请求 使用Python3进行HTTP POST请求很简单,只需以下几步: 导入必要的库 import requests import json 指定请求参数 在HT…

    python 2023年6月3日
    00
  • 在Python的Django框架中用流响应生成CSV文件的教程

    下面是详细讲解在Python的Django框架中用流响应生成CSV文件的教程,包括两个示例。 1. 先介绍一下什么是CSV文件 CSV(Comma-Separated Values)是一种常见的文件格式,用于将表格数据导出为文本文件,以便在不同的程序和平台上进行处理。CSV文件通常由逗号、制表符或其他特定字符分隔单元格,每行表示一个记录或数据。 2. 用Dj…

    python 2023年5月20日
    00
  • Python中第三方库Requests库的高级用法详解

    以下是关于Python中第三方库Requests库的高级用法详解: Python中第三方库Requests库的高级用法详解 requests是Python中一个流行的HTTP库,可以用于向Web服务器发送HTTP请求和接响应。除了基本的GET和POST请求之外,requests库还提供了许多高级用法,以下是Python中第三方库Requests库的高级用法详…

    python 2023年5月14日
    00
  • Python中max函数用法实例分析

    Python中max函数用法实例分析 在Python中,max()函数是一个非常常用的内置函数。它用于获取给定参数中的最大值。本文将详细讲解Python中max函数的用法,及其实例分析。 max函数的语法 max()函数的语法格式如下: max(iterable, *iterables[, key, default]) iterable: iterable是…

    python 2023年6月3日
    00
  • python自然语言处理之字典树知识总结

    Python自然语言处理之字典树知识总结 什么是字典树 字典树(Trie树)是一种哈希树的变种,也称为单词查找树或键树。字典树是一棵树,每个节点包含若干字符,而不是单个字符。在实现自然语言处理中,字典树常用来处理字符串匹配、拼写检查、词频统计等任务。 字典树的优势在于它可以在$O(k)$的时间复杂度($k$为字符串长度)内完成字符串的查找操作,而且还可以较方…

    python 2023年5月13日
    00
  • python3读取csv和xlsx文件的实例

    当然,我很乐意为您提供“Python3读取CSV和XLSX文件的实例”的完整教程和两个示例说明。让我们开始吧! Python3读取CSV和XLSX文件的实例 在Python中读取CSV和XLSX文件是一项广泛使用的任务,因为CSV和XLSX文件广泛用于存储数据,包括数据的输出和输入。Python标准库中的csv和openpyxl模块为读取这些文件提供了内置功…

    python 2023年5月13日
    00
  • Python中打包和解包(*和**)的使用详解

    Python中打包和解包(和*)的使用详解 打包 在Python中,打包指的是将多个值打包成一个序列,在函数调用中传递多个参数时比较常用。在打包时,可以使用“*”符号来将多个值打包成一个元组类型的值。 示例1 # 定义一个方法来计算数值的平均数,并使用打包的方式传入参数 def average(*nums): return sum(nums) / len(n…

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