【Sklearn】基于K邻近算法的数据分类预测(Excel可直接替换数据)

news/2024/7/9 11:03:53 标签: 算法, sklearn, 分类

【Sklearn】基于K邻近算法的数据分类预测(Excel可直接替换数据)

  • 1.模型原理
      • 模型原理:
      • 数学模型:
  • 2.模型参数
  • 3.文件结构
  • 4.Excel数据
  • 5.下载地址
  • 6.完整代码
  • 7.运行结果

1.模型原理

K最近邻(K-Nearest Neighbors,KNN)是一种基本的监督学习算法,用于分类和回归任务。其模型原理如下:

模型原理:

对于分类任务,KNN的原理可以概括为以下几个步骤:

  1. 训练阶段: 将训练数据集中的每个数据点与其标签一起存储。这些数据点和标签构成了训练样本。

  2. 预测阶段: 当需要对新的数据点进行分类时,KNN算法执行以下步骤:

    • 计算测试数据点与训练数据集中每个点之间的距离,使用所选择的距离度量(如欧氏距离)。

    • 从训练数据集中选择K个与测试数据点距离最近的数据点,这些数据点就是测试数据点的“最近邻居”。

    • 根据这K个最近邻居的标签,预测测试数据点的标签。对于分类任务,可以通过多数表决的方式,即选择K个邻居中出现最多次的标签作为预测标签。

数学模型:

假设我们有一个训练数据集 D D D,包含 N N N 个样本,每个样本有 d d d 个特征。在分类任务中,每个样本都有一个标签。

  • 训练数据集: D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } D = \{(x_1, y_1), (x_2, y_2), ..., (x_N, y_N)\} D={(x1,y1),(x2,y2),...,(xN,yN)},其中 x i x_i xi 是一个 d d d 维特征向量, y i y_i yi 是样本 x i x_i xi 对应的标签。

对于一个新的测试数据点 x x x,KNN的分类过程可以用以下公式表示:

y ^ = argmax y ∑ i = 1 K w i ⋅ I ( y i = y ) \hat{y} = \text{argmax}_y \sum_{i=1}^{K} w_i \cdot I(y_i = y) y^=argmaxyi=1KwiI(yi=y)

其中:

  • y ^ \hat{y} y^ 是测试数据点的预测标签。
  • y i y_i yi 是第 i i i 个最近邻居的标签。
  • w i w_i wi 是第 i i i 个最近邻居的权重(通常为1或距离的倒数)。
  • I ( y i = y ) I(y_i = y) I(yi=y) 是指示函数,如果 y i = y y_i = y yi=y,则为1,否则为0。

KNN算法在预测时需要选择合适的 K K K 值、距离度量、权重等参数。较小的 K K K 值会导致模型更容易受到噪声影响,而较大的 K K K 值可能导致决策边界不够灵活。距离度量的选择和权重的设置也会影响算法的性能。

当需要对新的数据点进行分类时,KNN算法执行以下步骤:

  1. 计算距离: 对于测试数据点 x x x,计算它与训练数据集中每个数据点 x i x_i xi 之间的距离。可以使用欧氏距离(Euclidean distance)等距离度量方法:

    欧氏距离公式: d ( x , x i ) = ∑ j = 1 d ( x j − x i j ) 2 d(x, x_i) = \sqrt{\sum_{j=1}^{d} (x_j - x_{ij})^2} d(x,xi)=j=1d(xjxij)2

    其中, d d d 是数据的维度, x j x_j xj 是测试数据点的第 j j j 个特征值, x i j x_{ij} xij 是训练数据点 x i x_i xi 的第 j j j 个特征值。

  2. 选择最近邻: 从训练数据集中选择距离测试数据点最近的 K K K 个数据点,这些数据点就是测试数据点的最近邻居。

  3. 多数表决: 对于分类任务,根据最近邻居的标签进行多数表决,选择出现次数最多的标签作为测试数据点的预测标签。

  4. 欧氏距离公式:
    d ( x , x i ) = ∑ j = 1 d ( x j − x i j ) 2 d(x, x_i) = \sqrt{\sum_{j=1}^{d} (x_j - x_{ij})^2} d(x,xi)=j=1d(xjxij)2

在这个公式中, d d d 是数据的维度, x j x_j xj 是测试数据点的第 j j j 个特征值, x i j x_{ij} xij 是训练数据点 x i x_i xi 的第 j j j 个特征值。

请注意,上述描述和公式仅概括了KNN算法的基本原理。在实际应用中,还需要根据具体问题选择合适的距离度量、权重等参数,以及处理距离相等的情况等。

2.模型参数

KNeighborsClassifier是Scikit-Learn中用于K最近邻分类的类。以下是部分常用的参数列表:

  1. n_neighbors: K值,表示用于预测的最近邻居的数量。
  2. weights: 用于预测的近邻的权重,可以是’uniform’(均匀权重)或’distance’(根据距离进行加权)。
  3. algorithm: 用于计算最近邻的算法,可以是’auto’(根据数据自动选择),‘ball_tree’,‘kd_tree’,‘brute’。
  4. leaf_size: 在使用’ball_tree’或’kd_tree’算法时,指定叶子节点的大小。
  5. p: 距离度量参数,1表示使用曼哈顿距离,2表示使用欧氏距离,其他值表示使用闵可夫斯基距离。
  6. metric: 距离度量函数,默认为’minkowski’。可以是各种内置度量,或者自定义距离度量函数。
  7. n_jobs: 并行计算的任务数量,-1表示使用所有可用的CPU核心。
  8. algorithm: 用于计算最近邻的算法,可以是’auto’(自动选择),‘ball_tree’,‘kd_tree’,‘brute’。
  9. leaf_size: 在使用’ball_tree’或’kd_tree’算法时,指定叶子节点的大小。
  10. metric_params: 距离度量的附加参数。

以下是使用KNeighborsClassifier的例子:

from sklearn.neighbors import KNeighborsClassifier

# 创建K最近邻模型,设置K值为5,使用欧氏距离,使用均匀权重
model = KNeighborsClassifier(n_neighbors=5, weights='uniform', p=2)

请注意,上述示例只是一部分参数,还有其他可用参数未列出。您可以根据需求在创建模型时调整这些参数。

3.文件结构

在这里插入图片描述

iris.xlsx						% 可替换数据集
Main.py							% 主函数

4.Excel数据

在这里插入图片描述

5.下载地址

- 资源下载地址

6.完整代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score, confusion_matrix
import matplotlib.pyplot as plt
import seaborn as sns

def knn_classification(data_path, test_size=0.2, random_state=42, n_neighbors=3):
    # 加载数据
    data = pd.read_excel(data_path)

    # 分割特征和标签
    X = data.iloc[:, :-1]  # 所有列除了最后一列
    y = data.iloc[:, -1]   # 最后一列

    # 划分训练集和测试集
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=test_size, random_state=random_state)

    # 创建K最近邻模型
    # 1. ** n_neighbors: ** K值,表示用于预测的最近邻居的数量。
    # 2. ** weights: ** 用于预测的近邻的权重,可以是'uniform'(均匀权重)或'distance'(根据距离进行加权)。
    # 3. ** algorithm: ** 用于计算最近邻的算法,可以是'auto'(根据数据自动选择),'ball_tree','kd_tree','brute'。
    # 4. ** leaf_size: ** 在使用'ball_tree'或'kd_tree'算法时,指定叶子节点的大小。
    # 5. ** p: ** 距离度量参数,1表示使用曼哈顿距离,2表示使用欧氏距离,其他值表示使用闵可夫斯基距离。
    # 6. ** metric: ** 距离度量函数,默认为'minkowski'。可以是各种内置度量,或者自定义距离度量函数。
    # 7. ** n_jobs: ** 并行计算的任务数量,-1表示使用所有可用的CPU核心。
    # 8. ** algorithm: ** 用于计算最近邻的算法,可以是'auto'(自动选择),'ball_tree','kd_tree','brute'。
    # 9. ** leaf_size: ** 在使用'ball_tree'或'kd_tree'算法时,指定叶子节点的大小。
    # 10. ** metric_params: ** 距离度量的附加参数。
    # 创建K最近邻模型,设置K值为5,使用欧氏距离,使用均匀权重
    model = KNeighborsClassifier(n_neighbors=5, weights='uniform', p=2)

    # 在训练集上训练模型
    model.fit(X_train, y_train)

    # 在测试集上进行预测
    y_pred = model.predict(X_test)

    # 计算准确率
    accuracy = accuracy_score(y_test, y_pred)
    return confusion_matrix(y_test, y_pred), y_test.values, y_pred, accuracy

if __name__ == "__main__":
    # 使用函数进行分类任务
    data_path = "iris.xlsx"
    confusion_mat, true_labels, predicted_labels, accuracy = knn_classification(data_path, n_neighbors=5)

    print("真实值:", true_labels)
    print("预测值:", predicted_labels)
    print("准确率:{:.2%}".format(accuracy))

    # 绘制混淆矩阵
    plt.figure(figsize=(8, 6))
    sns.heatmap(confusion_mat, annot=True, fmt="d", cmap="Blues")
    plt.title("Confusion Matrix")
    plt.xlabel("Predicted Labels")
    plt.ylabel("True Labels")
    plt.show()

    # 用圆圈表示真实值,用叉叉表示预测值
    # 绘制真实值与预测值的对比结果
    plt.figure(figsize=(10, 6))
    plt.plot(true_labels, 'o', label="True Labels")
    plt.plot(predicted_labels, 'x', label="Predicted Labels")

    plt.title("True Labels vs Predicted Labels")
    plt.xlabel("Sample Index")
    plt.ylabel("Label")
    plt.legend()
    plt.show()


7.运行结果

在这里插入图片描述

在这里插入图片描述


http://www.niftyadmin.cn/n/4938107.html

相关文章

GloVe、子词嵌入、BPE字节对编码、BERT相关知识(第十四次组会)

GloVe、子词嵌入、BPE字节对编码、BERT相关知识(第十四次组会) Glove子词嵌入上游、下游任务监督学习、无监督学习BERTGlove 子词嵌入 上游、下游任务 监督学习、无监督学习 BERT

javaScript:while循环的认识和使用

目录 一前言 适用场景 注意 二.while循环 1.while循环 例: 2.do-while循环 do-while 和while的区别 案例: 辗转相除法,求最大公约数 补充 完整代码 一前言 当执行某段代码需要满足一定的条件时,可以使用 while 循…

Playwright快速上手-1

前言 随着近年来对UI自动化测试的要求越来越高,,功能强大的测试框架也不断的涌现。本系列主讲的Playwright作为一款新兴的端到端测试框架,凭借其独特优势,正在逐渐成为测试工程师的热门选择。 本系列文章将着重通过示例讲解 Playwright python开发环境的搭建 …

对话教授丨中国石油大学(华东)理学院:课赛结合打造有学科特色的数据科学与大数据技术专业

2015 年,教育部公布新增“数据科学与大数据技术”专业,首批本科专业 2016 年入学;此后,32 所、250 所、196 所……迄今为止,全国各地已有 700 余所高校开设此专业。 中国石油大学(华东)&#x…

.netcore grpc双向流方法详解

一、双向流处理概述 简单来讲客户端可以向服务端发送消息流,服务端也可以向客户端传输响应流,即客户端和服务端可以互相通讯客户端无需发送消息即可开始双向流式处理调用 。 客户端可选择使用 RequestStream.WriteAsync 发送消息。 使用 ResponseStream…

微信记录---推荐系统---23/8/14 小总结

推荐系统---23/8/14 小总结 1. ACM推荐系统专题研讨会2.图神经网络推荐系统3.表1 模型效果对标:MovieLens 1M4.爬虫技术5.TF-IDF算法6.图 2 海量学术大数据推荐系统技术架构7.图 4 CADAL 平台推荐系统框架设计8.企业推荐系统发展概述MLR(Mixed Logistic Regression)DIEN(Deep…

海底两万里思维导图怎么绘制?用这几个绘制步骤就可以了

海底两万里思维导图怎么绘制?思维导图可以帮助我们更好地理解和组织信息。它是一种图形化的工具,可以帮助我们将大量的信息整理成有序、易于理解的结构。通过绘制思维导图,我们可以更好地把握《海底两万里》这本书的主题和章节,更…

每日一题——圆圈中最后剩下的数字(约瑟夫环问题)

圆圈中最后剩下的数字(约瑟夫环问题) 题目链接 约瑟夫环 这是一道典型的约瑟夫环问题,而约瑟夫问题的一般形式是这样的: 约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被…