python机器学习之KNN分类算法

Python机器学习之KNN分类算法

KNN(K-Nearest Neighbors)是一种基本的分类算法,它的基本思想是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

KNN算法流程

KNN算法的流程如下:

  1. 计算测试样本与训练样本之间的距离;
  2. 选取距离最近的k个训练样本;
  3. 统计k个训练样本中各个类别出现的次数;
  4. 将测试样本归为出现次数最多的类别。

KNN算法实现

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

import numpy as np

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 = []
        for x in X:
            distances = np.sqrt(np.sum((self.X_train - x) ** 2, axis=1))
            indices = np.argsort(distances)[:self.k]
            labels = self.y_train[indices]
            y_pred.append(np.bincount(labels).argmax())
        return y_pred

上述代码中,定义了一个KNN类,包括k值、训练数据集和训练标签。fit函数接受训练数据集X和训练标签y作为参数,将其保存为类的属性。predict函数接受测试数据集X作为参数,计算测试样本与训练样本之间的距离,选取距离最近的k个训练样本,统计k个训练样本中各个类别出现的次数,将测试样本归为出现次数最多的类别。

示例说明

以下是两个示例,说明如何使用KNN算法进行分类。

示例1

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

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

# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
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(f"准确率:{accuracy}")

输出结果:

准确率:1.0

示例2

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

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

# 加载数据集
digits = load_digits()
X = digits.data
y = digits.target

# 划分训练集和测试集
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(f"准确率:{accuracy}")

输出结果:

准确率:0.9833333333333333

总结

本文介绍了Python实现KNN分类算法的示例代码,包括KNN算法的流程和实现。KNN算法是一种基本的分类算法,适用于小型数据集和简单的分类问题。在实际应用中,需要根据实际情况选择合适的k值和距离度量方法,以获得更好的性能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python机器学习之KNN分类算法 - Python技术站

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

相关文章

  • Python实现读取文件最后n行的方法

    下面就是Python实现读取文件最后n行的方法的完整攻略。 步骤1:打开文件 打开文件需要使用Python内置的 open() 函数。它有两个参数:文件名和打开方式,打开方式通常是 r 表示只读。可以通过以下代码打开要读取的文件: with open(‘file.txt’, ‘r’) as file: # 执行读取文件的操作 步骤2:读取文件最后n行的方法 …

    python 2023年5月19日
    00
  • Python构造自定义方法来美化字典结构输出的示例

    让我们开始讲解“Python构造自定义方法来美化字典结构输出的示例”完整攻略。 1. 什么是美化字典结构输出? 在Python中,字典是一种非常常用的数据类型,常常用于存储大量的键值对数据。然而,Python默认输出字典的方式可能不够清晰明了,而且对于一个包含嵌套字典的复杂结构,Python的默认输出方式会让人无法迅速掌握其结构和关系。因此,我们需要构造自定…

    python 2023年6月5日
    00
  • NameError:未在类本身内部定义的类的名称 – python

    【问题标题】:NameError: name of the class not defined inside the class itself – pythonNameError:未在类本身内部定义的类的名称 – python 【发布时间】:2023-04-05 07:58:01 【问题描述】: 我有以下代码: import numpy as np clas…

    Python开发 2023年4月5日
    00
  • python中把嵌套的列表合并成一个列表方法总结

    以下是“Python中把嵌套的列表合并成一个列表方法总结”的完整攻略。 1. 方法总结 在Python中,可以使用以下三种方法将嵌套的列表合并成一个列表。 1.1 使用推导式 使用列表推导式可以将嵌套的列表合并成一个列表。示例如: nested_list = [[1, 2], [3, 4], [5, 6]] flat_list = [item for sub…

    python 2023年5月13日
    00
  • python画图时设置分辨率和画布大小的实现(plt.figure())

    当使用Python的matplotlib库进行图像绘制时,我们可以通过plt.figure()函数来设置图像的分辨率和画布大小。 设置画布大小 在绘制图像前,我们需要先创建一个画布。创建画布的方法是调用plt.figure()函数,该函数可以设置画布大小、分辨率等参数。下面是一个简单的示例代码: import matplotlib.pyplot as plt…

    python 2023年5月18日
    00
  • Python中的int函数使用

    下面是详细讲解“Python中的int函数使用”的完整攻略。 什么是int函数? int是一个Python内置函数,用于将一个字符串或数字转换为整数。如果该字符串或数字无法转换为整数,则会引发ValueError异常。 int函数的语法如下: int(x, base=10) 其中,x是待转换为整数的字符串或数字,base是进制数,默认值为10(十进制)。 如…

    python 2023年6月5日
    00
  • Python疫情确诊折线图实现数据可视化实例详解

    下面是“Python疫情确诊折线图实现数据可视化实例详解”的完整攻略: Python疫情确诊折线图实现数据可视化实例详解 介绍 本文介绍了如何使用Python实现疫情确诊折线图数据可视化。本文将讲解如何获取数据以及如何设计并绘制折线图。在本文中所使用的数据来自于中国卫生健康委员会公布的实时数据。 数据获取 本文所需数据可以通过访问中国卫生健康委员会官网的实时…

    python 2023年6月3日
    00
  • 同一组中观察的“向前填充”虚拟变量(Python)

    【问题标题】:’Fill forward’ dummy variable for observations in same group (Python)同一组中观察的“向前填充”虚拟变量(Python) 【发布时间】:2023-04-04 07:23:01 【问题描述】: 我创建了一个虚拟变量(在 Python 中)seo,如果另一列的值大于 0,则它取值 …

    Python开发 2023年4月6日
    00
合作推广
合作推广
分享本页
返回顶部