python机器学习之KNN分类算法

yizhihongxing

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日

相关文章

  • python3中关于excel追加写入格式被覆盖问题(实例代码)

    请参考以下完整实例教程: 标题 Python3中关于Excel追加写入格式被覆盖问题解决(实例代码) 问题描述 在使用Python3中的pandas库进行Excel文件的追加写入时,有时候会出现新写入的数据格式被之前的数据格式所覆盖的问题,导致Excel文件的格式混乱。 解决方案 1. 利用openpyxl库进行Excel文件读写 openpyxl是Pyth…

    python 2023年5月13日
    00
  • 使用Python pip怎么升级pip

    当pip工具本身需要升级时,我们可以使用pip自身来完成升级操作。以下是使用Python3的pip升级pip的步骤: 打开终端(Windows cmd或Mac/Linux终端) 确认当前使用的是Python3版本,可以使用以下命令: python –version 或 python3 –version 确认输出信息为Python3版本即可。 执行以下命令…

    python 2023年5月14日
    00
  • Python从csv文件中读取数据及提取数据的方法

    下面是关于“Python从csv文件中读取数据及提取数据的方法”的完整攻略。 1. csv文件简介 CSV即Comma Separated Values,即逗号分隔值,是一种简单易用的通用文件格式,常用于存储或交换不同系统之间的数据。CSV格式的文件一般以纯文本形式存储,可以使用任何文本编辑器打开、查看和编辑。 一个典型的CSV文件包含多行数据,每行数据由若…

    python 2023年6月3日
    00
  • Python必备技巧之字符数据操作详解

    Python必备技巧之字符数据操作详解 字符数据类型 在Python中,字符串是一种常见的数据类型。字符串是一个由字符序列组成的不可变序列。因为字符串不可变,因此不能像列表一样进行就地修改。字符串可以使用单引号或双引号来表示。 字符串连接和重复 字符串可以连接起来形成新的字符串。连接操作可以使用+运算符或通过字符串插值完成。例如: str1 = "…

    python 2023年5月14日
    00
  • 实例讲解Python中整数的最大值输出

    下面是实例讲解Python中整数的最大值输出的完整攻略: 1. 整数的最大值 在Python中,整数类型,即int类型,在不同的机器上有不同的最大值和最小值,但是可以通过sys模块的maxsize属性来获取当前机器上整数的最大值。maxsize属性是一个表示整数的最大值的整数,但它不是Python中所有整数的最大值,只是当前机器上可以表示的整数的最大值。下面…

    python 2023年6月5日
    00
  • python读写二进制文件的方法

    当我们需要读写二进制文件时,常规的读写方式是不能完全满足需要的,此时,我们需要使用Python提供的专门针对二进制文件数据读写的函数。下面将详细介绍Python读写二进制文件的方法。 什么是二进制文件 在计算机存储中,文件是在硬盘等存储设备上保存的,而硬盘上的二进制文件,是由0和1组成的一长串数据。这些文件被称为二进制文件。 在Python中,我们通常称那些…

    python 2023年6月5日
    00
  • Python实现的基于优先等级分配糖果问题算法示例

    以下是关于“Python实现的基于优先等级分配糖果问题算法示例”的完整攻略: 简介 糖果分配问题是一个经典的问题,通常涉及到将一定数量的糖果分配给一组孩子。在这个问题中,每个孩子都有一个优先级,我们需要按照优先级分配糖果,同时确保每个孩子至少分配到一个糖果。本教程将介绍如何使用Python实现基于优先等级分配糖果问题的算法。 步骤 1. 定义函数 首先,我们…

    python 2023年5月14日
    00
  • python的常用模块之collections模块详解

    Python的常用模块之collections模块详解 1. 什么是collections模块 Python提供了一个比较重要的模块:collections,这个模块包含了一些特殊容器类型,比原生的list、dict、tuple、set等容器类型要强大得多。 collections是Python内建的一个集合模块,提供了一系列有用的集合类,是对dict、li…

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