热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

AI炼金术:KNN分类器的构建与应用

本文介绍了如何使用Python及其相关库(如NumPy、scikit-learn和matplotlib)构建KNN分类器模型。通过详细的数据准备、模型训练及新样本预测的过程,展示KNN算法的实际操作步骤。

在本文中,我们将使用Python 3.6、NumPy 1.14、scikit-learn 0.19以及matplotlib 2.2等库来构建一个K近邻(K-Nearest Neighbors, KNN)分类器。KNN是一种基于实例的学习方法,用于解决分类问题,其核心思想是在特征空间中找到与待分类样本最近的K个训练样本,并根据这K个样本的多数类别来决定待分类样本的类别。


1. 数据准备


数据准备阶段包括数据的加载与可视化。这一部分相对直观,主要目的是通过图表展示数据的分布情况,以便于后续分析。以下是数据分布的示例图:



AI炼金术:KNN分类器的构建与应用

2. KNN分类器的构建与训练


2.1 模型构建与训练


构建KNN分类器的过程类似于其他机器学习模型,如支持向量机(SVM)和随机森林(Random Forest)。下面是使用scikit-learn构建KNN分类器的代码示例:


# 导入必要的库
from sklearn.neighbors import KNeighborsClassifier

# 定义K值
K = 10

# 创建KNN分类器实例
knn = KNeighborsClassifier(n_neighbors=K, weights='distance')

# 使用数据集训练模型
knn.fit(dataset_X, dataset_y)

上述代码展示了如何利用给定的数据集训练KNN模型。接下来,我们可以通过绘制分类模型在训练数据集上的决策边界来评估模型的性能。从下图可以看出,KNN分类器能够有效地将数据集中的不同类别区分开来:



AI炼金术:KNN分类器的构建与应用

2.2 预测新样本


使用训练好的KNN模型进行新样本的预测也非常简单。以下是预测新样本的代码示例:


# 新样本数据
new_sample = np.array([[4.5, 3.6]])

# 预测新样本的类别
predicted = knn.predict(new_sample)[0]
print("KNN Predicted: {}".format(predicted))

预测结果显示,新样本被归类为第二类。为了更好地理解这一分类结果,我们可以将新样本及其最近的K个邻居在图中标出。为此,我们对绘图函数进行了调整,以显示新样本的具体位置及其周围的K个邻居。调整后的绘图函数如下所示:


# 定义绘图函数
import matplotlib.pyplot as plt
import numpy as np

def plot_classifier(knn_classifier, X, y, new_sample, K):
x_min, x_max = X[:, 0].min() - 1.0, X[:, 0].max() + 1.0
y_min, y_max = X[:, 1].min() - 1.0, X[:, 1].max() + 1.0
step_size = 0.01
x_values, y_values = np.meshgrid(np.arange(x_min, x_max, step_size),
np.arange(y_min, y_max, step_size))
mesh_output = knn_classifier.predict(np.c_[x_values.ravel(), y_values.ravel()])
mesh_output = mesh_output.reshape(x_values.shape)
plt.figure()
plt.pcolormesh(x_values, y_values, mesh_output, cmap=plt.cm.gray)
plt.scatter(X[:, 0], X[:, 1], c=y, s=80, edgecolors='black', linewidth=1, cmap=plt.cm.Paired)
plt.scatter(new_sample[:, 0], new_sample[:, 1], marker='*', color='red')
dist, indices = knn_classifier.kneighbors(new_sample)
plt.scatter(X[indices][0][:, 0], X[indices][0][:, 1], marker='x', s=80, color='r')
plt.xlim(x_values.min(), x_values.max())
plt.ylim(y_values.min(), y_values.max())
plt.xticks(np.arange(int(X[:, 0].min()), int(X[:, 0].max()), 1.0))
plt.yticks(np.arange(int(X[:, 1].min()), int(X[:, 1].max()), 1.0))
plt.show()

执行上述绘图函数后,得到的结果图如下所示:



AI炼金术:KNN分类器的构建与应用

从图中可以看到,红色五角星代表新样本,而红色叉号则表示与新样本最近的K个邻居。大多数邻居属于第二类,因此新样本也被分类为第二类,这与predict函数返回的结果一致。


总结



  • 构建和训练KNN分类器非常简便,只需通过scikit-learn库调用相应的函数即可。

  • KNN分类器通过计算新数据点与训练集中所有数据点的距离,选择最近的K个数据点,并根据这些数据点的多数类别来确定新数据点的类别。通常推荐K值为奇数,以避免平局情况。

  • 选择最优K值是KNN分类器的一个挑战,可以通过交叉验证、网格搜索或随机搜索等方法来实现。


注:本文中涉及的所有代码已上传至我的GitHub仓库,欢迎下载并参考使用。参考资料包括《Python机器学习经典实例》一书,由Prateek Joshi撰写,陶俊杰和陈小莉翻译。


推荐阅读
  • Python 工具推荐 | PyHubWeekly 第二十一期:提升命令行体验的五大工具
    本期 PyHubWeekly 为大家精选了 GitHub 上五个优秀的 Python 工具,涵盖金融数据可视化、终端美化、国际化支持、图像增强和远程 Shell 环境配置。欢迎关注并参与项目。 ... [详细]
  • 随着技术的发展,黑客开始利用AI技术在暗网中创建用户的‘数字孪生’,这一现象引起了安全专家的高度关注。 ... [详细]
  • 在Ubuntu 16.04中使用Anaconda安装TensorFlow
    本文详细介绍了如何在Ubuntu 16.04系统上通过Anaconda环境管理工具安装TensorFlow。首先,需要下载并安装Anaconda,然后配置环境变量以确保系统能够识别Anaconda命令。接着,创建一个特定的Python环境用于安装TensorFlow,并通过指定的镜像源加速安装过程。最后,通过一个简单的线性回归示例验证TensorFlow的安装是否成功。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 本文将探讨2015年RCTF竞赛中的一道PWN题目——shaxian,重点分析其利用Fastbin和堆溢出的技巧。通过详细解析代码流程和漏洞利用过程,帮助读者理解此类题目的破解方法。 ... [详细]
  • yikesnews第11期:微软Office两个0day和一个提权0day
    点击阅读原文可点击链接根据法国大选被黑客干扰,发送了带漏洞的文档Trumps_Attack_on_Syria_English.docx而此漏洞与ESET&FireEy ... [详细]
  • 为了解决不同服务器间共享图片的需求,我们最初考虑建立一个FTP图片服务器。然而,考虑到项目是一个简单的CMS系统,为了简化流程,团队决定探索七牛云存储的解决方案。本文将详细介绍使用七牛云存储的过程和心得。 ... [详细]
  • 本文详细介绍了 Python 中的条件语句和循环结构。主要内容包括:1. 分支语句(if...elif...else);2. 循环语句(for, while 及嵌套循环);3. 控制循环的语句(break, continue, else)。通过具体示例,帮助读者更好地理解和应用这些语句。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 本文档介绍了如何在Visual Studio 2010环境下,利用C#语言连接SQL Server 2008数据库,并实现基本的数据操作,如增删改查等功能。通过构建一个面向对象的数据库工具类,简化了数据库操作流程。 ... [详细]
  • 本文详细介绍了虚拟专用网(Virtual Private Network, VPN)的概念及其通过公共网络(如互联网)构建临时且安全连接的技术特点。文章探讨了不同类型的隧道协议,包括第二层和第三层隧道协议,并提供了针对IPSec、GRE以及MPLS VPN的具体配置指导。 ... [详细]
  • 本文旨在探讨如何利用决策树算法实现对男女性别的分类。通过引入信息熵和信息增益的概念,结合具体的数据集,详细介绍了决策树的构建过程,并展示了其在实际应用中的效果。 ... [详细]
  • 在互联网信息爆炸的时代,当用户需求模糊或难以通过精确查询表达时,推荐系统成为解决信息过载的有效手段。美团作为国内领先的O2O平台,通过深入分析用户行为,运用先进的机器学习技术优化推荐算法,提升用户体验。 ... [详细]
  • 全能终端工具推荐:高效、免费、易用
    介绍一款备受好评的全能型终端工具——MobaXterm,它不仅功能强大,而且完全免费,适合各类用户使用。 ... [详细]
  • 智慧城市建设现状及未来趋势
    随着新基建政策的推进及‘十四五’规划的实施,我国正步入以5G、人工智能等先进技术引领的智慧经济新时代。规划强调加速数字化转型,促进数字政府建设,新基建政策亦倡导城市基础设施的全面数字化。本文探讨了智慧城市的发展背景、全球及国内进展、市场规模、架构设计,以及百度、阿里、腾讯、华为等领军企业在该领域的布局策略。 ... [详细]
author-avatar
四川盛地地产顾问有限公司_255
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有