python可视化实现KNN算法

yizhihongxing

以下是关于“Python可视化实现KNN算法”的完整攻略:

简介

K最近邻(K-Nearest Neighbors,KNN)是一种基于实例的学习算法,它可以用于分类和回归任务。在本教程中,我们将介绍如何使用Python实现KNN算法,并使用可视化工具展示算法的分类效果。

KNN算法原理

KNN法的基本思想是:对于一个新的数据点,找到与其最近的K个数据点,然后根据这K个数据点的标签来预测新数据点的标签。KNN算法的步骤如下:

  1. 计算新数据点与所有训练数据点之间的距离。
  2. 选择距离最近的K个数据点。
  3. 根据这K个数据点的标签来预测新数据点的标签。

KNN算法中的距离可以使用欧几里得距离、曼哈顿距离等。

KNN算法Python实现

以下是使用Python实现KNN算法的代码:

import numpy as np
from collections import Counter

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

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

    def predict(self, X):
        y_pred = []
        for x in X:
            distances = [np.sqrt(np.sum((x - x_train)**2)) for x_train in self.X_train]
            k_indices = np.argsort(distances)[:self.k]
            k_labels = [self.y_train[i] for i in k_indices]
            most_common = Counter(k_labels).most_common(1)
            y_pred.append(most_common[0][0])
        return y_pred

其中,KNN类实现了KNN算法。在初始化方法中,我们定义了K值。在fit方法中,我们将训练数据集的特征和标签保存在X_train和y_train中。在predict方法中,我们使用欧几里得距离计算新数据点与所有训练数据点之间的距离,选择距离最近的K个数据点,并根据这K个数据点的标签来预测新数据点的标签。

可视化KNN算法

以下是使用Python可视化KNN算法的代码:

import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Generate dataset
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, n_informative=2, random_state=42)

# Split dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Create KNN classifier
knn = KNN(k=5)

# Train KNN classifier
knn.fit(X_train, y_train)

# Predict labels of the test data
y_pred = knn.predict(X_test)

# Calculate the accuracy of the classifier
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

# Visualize the decision boundary
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = np.array(Z).reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('KNN Classifier')
plt.show()

在这个示例中,我们使用make_classification函数生成一个二维分类数据集,将数据集分为训练集和测试集,使用KNN类创建了一个KNN分类器,并使用fit方法来训练KNN分类器。最后,我们使用predict方法来预测测试数据的标签,并使用accuracy_score函数计算分类器准确性。我们还使用matplotlib库可视化了分类器的决策边界。

示例说明

以下是两个示例说明,展示了如何使用Python可视化KNN算法。

示例1

假设我们要使用KNN算法对Iris数据集进行分类:

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Load Iris dataset
iris = load_iris()
X = iris.data[:, :2]
y = iris.target

# Split dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Create KNN classifier
knn = KNN(k=5)

# Train KNN classifier
knn.fit(X_train, y_train)

# Predict labels of the test data
y_pred = knn.predict(X_test)

# Calculate the accuracy of the classifier
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

# Visualize the decision boundary
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = np.array(Z).reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.title('KNN Classifier')
plt.show()

在这个示例中,我们使用load_iris函数加载Iris数据集,将数据集的前两个特征作为输入特征,将数据集分为训练集和测试集,使用KNN类创建了一个KNN分类器,并使用fit方法来训练KNN分类器。最后,我们使用predict方法来预测测试数据的标签,并使用accuracy_score函数计算分类器准确性。我们还使用matplotlib库可视化了分类器的决策边界。

示例2

假设我们要使用KNN算法对digits数据集进行分类:

import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# Load digits dataset
digits = load_digits()
X = digits.data[:, :2]
y = digits.target

# Split dataset into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Create KNN classifier
knn = KNN(k=5)

# Train KNN classifier
knn.fit(X_train, y_train)

# Predict labels of the test data
y_pred = knn.predict(X_test)

# Calculate the accuracy of the classifier
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

# Visualize the decision boundary
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1), np.arange(y_min, y_max, 0.1))
Z = knn.predict(np.c_[xx.ravel(), yy.ravel()])
Z = np.array(Z).reshape(xx.shape)
plt.contourf(xx, yy, Z, alpha=0.4)
plt.scatter(X[:, 0], X[:, 1], c=y, alpha=0.8)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('KNN Classifier')
plt.show()

在这个示例中,我们使用load_digits函数加载digits数据集,将数据集的前两个特征作为输入特征,将数据集分为训练集和测试集,使用KNN类创建了一个KNN分类器,并使用fit方法来训练KNN分类器。最后,我们使用predict方法来预测测试数据的标签,并使用accuracy_score函数计算分类器准确性。我们还使用matplotlib库可视化了分类器的决策边界。

结论

本教程介绍了如何使用Python实现KNN算法,并使用可视化工具展示算法的分类效果。我们使用KNN类实现了KNN算法,并在predict方法中使用欧几里得距离计算新数据点与所有训练数据点之间的距离,选择距离最近的K个数据点,并根据这K个数据点的标签来预测新数据点的标签。我们还使用matplotlib库可视化了分类器的决策边界。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python可视化实现KNN算法 - Python技术站

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

相关文章

  • 分享几道和「滑动窗口」有关的算法面试题

    作为一个算法面试题,滑动窗口通常用于解决字符串相关的问题。下面将为大家介绍两道和「滑动窗口」有关的算法面试题,分别是「最小覆盖子串」和「长度最小的子数组」,希望能够对大家有所帮助。 最小覆盖子串 该题中给定两个字符串 S 和 T,要求在字符串 S 中找到最小的覆盖子串,使得这个子串中包含了字符串 T 中的所有字符。 为了方便解题,我们可以使用两个哈希表来记录…

    python 2023年5月14日
    00
  • python计算分段函数值的方法

    要计算分段函数的值,可以通过 if 语句实现。首先需要定义该分段函数,然后通过输入 x (自变量)的值,判断 x 属于哪个区间,计算对应的函数值。 下面是一个例子,计算分段函数 y = f(x),其定义如下: 当 x < 0 时,f(x) = x当 x >=0 且 x <10 时,f(x) = x^2当 x >= 10 时,f(x) …

    python 2023年6月5日
    00
  • Python实现日期判断和加减操作详解

    下面是关于“Python实现日期判断和加减操作详解”的完整攻略。 1. 背景介绍 在日常开发工作中,我们经常会与日期数据打交道。对于日期数据的判断和计算,是开发过程中常出现的需求。Python是一门优秀的解释型语言,拥有极其丰富的日期处理能力。通过Python的内置日期处理类、第三方日期处理库、自定义日期处理函数等方式,我们可以实现对日期的判断和加减操作。本…

    python 2023年6月2日
    00
  • pip报错“ValueError: invalid literal for int() with base 10: ‘3.6.9’”怎么处理?

    当使用 pip 安装 Python 包时,可能会遇到 “ValueError: invalid literal for int() with base 10: ‘3.6.9’” 错误。这个错误通常是由于 Python 版本号格式不正确导致的。以下是详细讲解 pip 报错 “ValueError: invalid literal for int() with …

    python 2023年5月4日
    00
  • python可视化plotly 图例(legend)设置

    Python可视化库plotly是一个功能强大的数据可视化工具,支持各种常见图表类型和交互式可视化。在绘制数据图表时,图例(legend)是一个非常重要的部分,它可以使读者更好地理解数据图表中不同系列的含义。在这里,我们将详细讲解如何在plotly中设置图例。 设置图例(legend) 图例是一种视觉元素,它与绘图联系在一起。在plotly中,图例默认是开启…

    python 2023年5月18日
    00
  • Cython 三分钟入门教程

    Cython 三分钟入门教程 什么是Cython Cython是一种基于Python语言的编译器,它可以将Python代码转换为C/C++代码,从而提高Python代码的执行效率。Cython可以使用Python的大部分语法,同时支持静态类型定义和C语言扩展,可以将Python代码转化为可以编译和执行的C语言代码。Cython通常与C的库或C++的库进行配合…

    python 2023年6月3日
    00
  • Python math库 ln(x)运算的实现及原理

    Python math库 ln(x)运算的实现及原理 在Python的math库中,ln(x)函数用于计算一个数的自然对数,即以e(自然常数)为底的对数。本文将介绍Python math库中ln(x)函数的实现及原理。 实现 在Python中,我们可以使用math库中的log函数来计算自然对数。当我们在使用log函数时,如果仅提供一个参数,那么就表示以e为底…

    python 2023年6月3日
    00
  • 如何使用Python获取MySQL中表中最大值和最小值?

    以下是如何使用Python获取MySQL中表中最大值和最小值的完整使用攻略,包括导入模块、连接数据库、执行查询操作等步骤。同时,提供两个示例以便更好理解如何使用Python获取MySQL中表中最大值和最小值。 步骤1:导入模块 在Python中,我们需要导入相应的模块来获取MySQL中表中最大值和最小值。以下是导入pymysql模块的基本语法: import…

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