python k-近邻算法实例分享

yizhihongxing

Python k-近邻算法实例分享

什么是 k-近邻算法

k-近邻算法(k-Nearest Neighbor,简称KNN)是一种基于实例的学习(instance-based learning)或者称为懒惰学习(lazy learning)的非参数化的分类和回归算法。

KNN分类算法的实现过程如下:

  1. 读取训练集数据
  2. 计算待分类实例与训练集中各个实例的相似度或距离
  3. 确定k值,选出与待分类实例距离前k个实例
  4. 统计k个实例的分类数量,并把待分类实例归为数量最多的那类

KNN回归算法在第三步选出的k个实例中计算回归值,可以为这k个实例的值的平均数。

k-近邻算法的优点:简单、易于理解和实现、需要的计算资源较少。

k-近邻算法的缺点:对于高维数据,计算相似度或距离会变得困难;对于特征值较多的数据,需要考虑特征权值问题和降维或特征选择等问题。

k-近邻算法实例1:Iris鸢尾花数据集分类

Iris鸢尾花数据集是机器学习领域中非常常用的一个数据集,包含了150朵三种不同鸢尾花的测量数据。

数据准备

从sklearn提供的datasets模块中读取并划分训练集和测试集

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
data = iris.data
target = iris.target
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.3, random_state=42)

k-近邻算法实现

模型的训练和预测

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=3)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

模型性能评估

使用混淆矩阵评估模型性能

from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, y_pred)

输出结果

array([[19,  0,  0],
       [ 0, 13,  1],
       [ 0,  1, 11]])

对角线上的值表示正确分类的样本数,非对角线的值表示错误分类的样本数,可以看到该模型在三个类别上均取得了很好的分类效果。

k-近邻算法实例2:手写数字识别

手写数字识别是一个非常常见的图像识别问题,我们可以将数字图片转化为向量来训练k-近邻分类器。

数据准备

从sklearn提供的datasets模块中读取手写数字数据集,并划分训练集和测试集。

from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
digits = load_digits()
data = digits.data
target = digits.target
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.3, random_state=42)

k-近邻算法实现

模型的训练和预测

from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)

模型性能评估

使用混淆矩阵和分类准确率评估模型的性能

from sklearn.metrics import confusion_matrix, accuracy_score
confusion_matrix(y_test, y_pred)
accuracy_score(y_test, y_pred)

输出结果

array([[54,  0,  0,  0,  0,  0,  0,  0,  0,  0],
       [ 0, 58,  0,  0,  0,  0,  0,  1,  0,  1],
       [ 0,  0, 58,  0,  0,  0,  0,  0,  0,  0],
       [ 0,  0,  1, 52,  0,  0,  0,  0,  3,  0],
       [ 0,  0,  0,  0, 56,  0,  0,  1,  0,  0],
       [ 0,  0,  0,  1,  0, 62,  1,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0, 65,  0,  0,  0],
       [ 0,  0,  0,  0,  0,  0,  0, 48,  0,  0],
       [ 0,  1,  0,  1,  0,  0,  0,  0, 57,  1],
       [ 0,  0,  0,  1,  0,  1,  0,  0,  1, 62]])
0.9703703703703703

除了通过混淆矩阵的对角线上的值可以看出每个类别的分类效果外,模型的整体分类准确率也可以看出模型在测试集上的分类效果,这里取得了很不错的预测结果。

总结

k-近邻算法是一种简单易用、性能表现良好的分类和回归算法,对于一些简单的数据集,可以快速进行分类和预测。但对于较复杂的数据集,还需结合一些数据预处理和模型优化技术来提高预测效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python k-近邻算法实例分享 - Python技术站

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

相关文章

  • Python使用定时调度任务的方式

    Python使用定时调度任务,可以使用第三方模块schedule或者是系统原生的cron。 下面先介绍一下schedule模块的使用。 安装 在命令行中输入以下命令进行安装: pip install schedule 定时任务的基本用法 使用schedule模块,我们可以很方便地编写一些需要定时执行的任务。以下是一个简单的例子: import schedul…

    python 2023年5月19日
    00
  • Python中eval带来的潜在风险代码分析

    Python中eval带来的潜在风险代码分析 什么是eval eval() 是 Python 中一个内置函数,它的作用是将字符串形式的表达式转换成对应的数学计算并返回结果。 下面是 eval() 函数的语法: eval(expression, globals=None, locals=None) 其中, expression 表示需要执行的字符串, glob…

    python 2023年6月3日
    00
  • Python命令行解析工具argparse模块

    下面是针对Python命令行解析工具argparse模块的完整攻略。 什么是argparse模块 argparse是Python标准库中用于命令行解析的模块,它可以帮助我们定义和解析命令行参数,并提供了丰富的功能和选项。 argparse模块的基本用法 引入argparse模块 python import argparse 创建ArgumentParser对…

    python 2023年6月3日
    00
  • 详解Python time库的使用

    详解Python time库的使用 time库是Python内置的库,用于处理时间和日期相关的函数和方法。在本篇攻略中,我们将详细讲解time库的使用,包括时间的格式化、时间戳等相关操作。 时间的表示方式 在Python中,时间有两种常见的表示方式: 时间元组(struct_time),包含年、月、日、时、分、秒等时间信息 时间戳(timestamp),表示…

    python 2023年6月2日
    00
  • python生成requirements.txt的两种方法

    下面是对于“python生成requirements.txt的两种方法”的详细讲解。 生成requirements.txt的两种方法 在Python项目中,我们通常需要记录下项目中使用到的依赖包及其版本号,并且这些依赖包的版本可能会随时更新,这时我们就需要使用 requirements.txt 文件来记录依赖包的详细信息。下面介绍两种方法来生成 requir…

    python 2023年5月13日
    00
  • Python 自动化修改word的案例

    下面是我对“Python 自动化修改word的案例”的完整攻略。整个攻略包括以下步骤: 步骤一:安装必要的 Python 库 在使用 Python 进行自动化修改 Word 文档之前,我们需要先安装必要的 Python 库。其中,关键的库包括 python-docx 和 docx2pdf。 可以通过以下命令在终端或命令行中安装这两个库: pip instal…

    python 2023年6月3日
    00
  • Python的Django应用程序解决AJAX跨域访问问题的方法

    下面为您提供“Python的Django应用程序解决AJAX跨域访问问题的方法”的攻略。 什么是AJAX跨域访问问题 AJAX是一种可以异步刷新局部页面的技术,其中“AJAX”代表“Asynchronous JavaScript and XML”(异步JavaScript和XML)。然而,当AJAX请求来自一个与当前加载页面不同的域时,就会出现跨域访问问题。…

    python 2023年6月3日
    00
  • 谷歌应用引擎:将javascript变量(客户端)获取到python字符串(服务器端)

    【问题标题】:Google app engine: getting javascript variable(client side) to python string(server side)谷歌应用引擎:将javascript变量(客户端)获取到python字符串(服务器端) 【发布时间】:2023-04-06 14:42:01 【问题描述】: 1)我在屏…

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