机器学习-KNN分类算法

1.1 KNN分类

        KNN分类算法(K-Nearest-Neighbors Classification),又叫K近邻算法。它是概念极其简单,而效果又很优秀的分类算法。1967年由Cover T和Hart P提出。

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

        如图,假设已经获取一些动物的特征,且已知这些动物的类别。现在需要识别一只新动物,判断它是哪类动物。首先找到与这个物体最接近的k个动物。假设k=3,则可以找到2只猫和1只狗。由于找到的结果中大多数是猫,则把这个新动物划分为猫类。

KNN方法有三个核心要素:

1.K值

        如果k取值太小,好处是近似误差会减小。但同时预测结果对近邻的样本点非常敏感,仅由非常近的训练样本决定预测结果。使模型变得复杂,容易过拟合。如果k值太大,学习的近似误差会增大,导致分类模糊,即欠拟合。

        下面举例看k值对预测结果的影响。对图5.2中的动物进行分类,当k=3时,分类结果为“猫:狗=2:1”,所以属于猫;当k=5时,表决结果为“猫:狗:熊猫=2:3:1”,所以判断目标动物为狗。

 

        那么K值到底怎么选取呢?涉及到距离的度量问题。

2.距离的度量

        不同的距离所确定的近邻点不同。平面上比较常用的是欧式距离。此外还有曼哈顿距离、余弦距离、球面距离等。

可以得到距离如下所示

3.分类决策规则

        分类结果的确定往往采用多数表决原则,即由输入实例的k个最邻近的训练实例中的多数类决定输入实例的类别。

1.2 初识KNN——鸢尾花分类

1.查看数据

SKlearn中的iris数据集有5个key,分别如下:

  • target_names : 分类名称,包括setosa、versicolor和virginica类。
  • data : 特征数据值。
  • target:分类(150个)。
  • DESCR: 数据集的简介。
  • feature_names: 特征名称。

【例】查看鸢尾花iris数据集。

#【例1.1】对鸢尾花iris数据集进行调用,查看数据的各方面特征。
from sklearn.datasets import load_iris
iris_dataset = load_iris()
#下面是查看数据的各项属性
print("数据集的Keys:\n",iris_dataset.keys())     #查看数据集的keys。
print("特征名:\n",iris_dataset['feature_names'])  #查看数据集的特征名称
print("数据类型:\n",type(iris_dataset['data']))    #查看数据类型
print("数据维度:\n",iris_dataset['data'].shape)    #查看数据的结构
print("前五条数据:\n{}".format(iris_dataset['data'][:5]))  #查看前5条数据
#查看分类信息
print("标记名:\n",iris_dataset['target_names']) 
print("标记类型:\n",type(iris_dataset['target']))
print("标记维度:\n",iris_dataset['target'].shape)
print("标记值:\n",iris_dataset['target'])
#查看数据集的简介
print('数据集简介:\n',iris_dataset['DESCR'][:20] + "\n.......")  #数据集简介前20个字符
运行结果: 
数据集的Keys:dict_keys(['data', 'target', 'target_names', 'DESCR', 'feature_names'])
特征名:['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']
数据类型:<class 'numpy.ndarray'>
数据维度:(150, 4)
前五条数据:
[[5.1 3.5 1.4 0.2][4.9 3.  1.4 0.2][4.7 3.2 1.3 0.2][4.6 3.1 1.5 0.2][5.  3.6 1.4 0.2]]
标记名:['setosa' 'versicolor' 'virginica']
标记类型:<class 'numpy.ndarray'>
标记维度:(150,)
标记值:[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2]
数据集简介:Iris Plants Database
.......
 2.数据集拆分

        使用train_test_split函数。train_test_split函数属于sklearn.model_selection类中的交叉验证功能,能随机地将样本数据集合拆分成训练集和测试集。

【例】对iris数据集进行拆分,并查看拆分结果。

#【例1.2】对iris数据集进行拆分,并查看拆分结果。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris_dataset = load_iris()
X_train, X_test, y_train, y_test = train_test_split( iris_dataset['data'], iris_dataset['target'], random_state=2)
print("X_train",X_train)
print("y_train",y_train)
print("X_test",X_test)
print("y_test",y_test)
print("X_train shape: {}".format(X_train.shape))
print("X_test shape: {}".format(X_test.shape))
运行结果:
X_train [[5.5 2.3 4.  1.3][6.9 3.1 5.1 2.3][6.  2.9 4.5 1.5][6.2 2.9 4.3 1.3][6.8 3.2 5.9 2.3][5.  2.3 3.3 1. ][4.8 3.4 1.6 0.2][6.1 2.6 5.6 1.4][5.2 3.4 1.4 0.2][6.7 3.1 4.4 1.4][5.1 3.5 1.4 0.2][5.2 3.5 1.5 0.2][5.5 3.5 1.3 0.2][4.9 2.5 4.5 1.7][6.2 3.4 5.4 2.3][7.9 3.8 6.4 2. ][5.4 3.4 1.7 0.2][6.7 3.1 5.6 2.4][6.3 3.4 5.6 2.4][7.6 3.  6.6 2.1][6.  2.2 5.  1.5][4.3 3.  1.1 0.1][4.8 3.1 1.6 0.2][5.8 2.7 5.1 1.9][5.7 2.8 4.1 1.3][5.2 2.7 3.9 1.4][7.7 3.  6.1 2.3][6.3 2.7 4.9 1.8][6.1 2.8 4.  1.3][5.1 3.7 1.5 0.4][5.7 2.8 4.5 1.3][5.4 3.9 1.3 0.4][5.8 2.8 5.1 2.4][5.8 2.6 4.  1.2][5.1 2.5 3.  1.1][5.7 3.8 1.7 0.3][5.5 2.4 3.7 1. ][5.9 3.  4.2 1.5][6.7 3.1 4.7 1.5][7.7 2.8 6.7 2. ][4.9 3.  1.4 0.2][6.3 3.3 4.7 1.6][5.1 3.8 1.5 0.3][5.8 2.7 3.9 1.2][6.9 3.2 5.7 2.3][4.9 3.1 1.5 0.1][5.  2.  3.5 1. ][4.9 3.1 1.5 0.1][5.  3.5 1.3 0.3][5.4 3.7 1.5 0.2][6.8 3.  5.5 2.1][6.3 3.3 6.  2.5][5.  3.4 1.6 0.4][5.2 4.1 1.5 0.1][6.3 2.5 5.  1.9][7.7 2.6 6.9 2.3][6.  2.2 4.  1. ][7.2 3.6 6.1 2.5][4.9 2.4 3.3 1. ][6.1 2.8 4.7 1.2][6.5 3.  5.2 2. ][5.1 3.5 1.4 0.3][7.4 2.8 6.1 1.9][5.9 3.  5.1 1.8][6.4 2.7 5.3 1.9][4.4 2.9 1.4 0.2][5.6 2.8 4.9 2. ][5.1 3.4 1.5 0.2][5.  3.3 1.4 0.2][5.7 2.6 3.5 1. ][6.9 3.1 5.4 2.1][5.5 2.6 4.4 1.2][6.3 2.8 5.1 1.5][7.  3.2 4.7 1.4][6.8 2.8 4.8 1.4][6.5 3.2 5.1 2. ][6.9 3.1 4.9 1.5][5.5 2.4 3.8 1.1][5.6 3.  4.5 1.5][6.  3.  4.8 1.8][6.  2.7 5.1 1.6][5.8 2.7 5.1 1.9][5.9 3.2 4.8 1.8][5.1 3.8 1.6 0.2][6.2 2.2 4.5 1.5][5.6 3.  4.1 1.3][5.6 2.5 3.9 1.1][5.8 2.7 4.1 1. ][6.4 3.1 5.5 1.8][6.6 2.9 4.6 1.3][5.5 4.2 1.4 0.2][4.4 3.  1.3 0.2][6.3 2.9 5.6 1.8][6.4 3.2 4.5 1.5][7.3 2.9 6.3 1.8][5.  3.6 1.4 0.2][7.1 3.  5.9 2.1][4.9 3.1 1.5 0.1][6.5 3.  5.5 1.8][6.7 3.3 5.7 2.1][5.4 3.4 1.5 0.4][6.1 2.9 4.7 1.4][4.6 3.2 1.4 0.2][6.7 3.  5.2 2.3][5.7 3.  4.2 1.2][5.  3.4 1.5 0.2][6.5 3.  5.8 2.2][6.6 3.  4.4 1.4][5.  3.5 1.6 0.6][4.6 3.6 1.  0.2][6.3 2.5 4.9 1.5][5.7 4.4 1.5 0.4]]
y_train [1 2 1 1 2 1 0 2 0 1 0 0 0 2 2 2 0 2 2 2 2 0 0 2 1 1 2 2 1 0 1 0 2 1 1 0 11 1 2 0 1 0 1 2 0 1 0 0 0 2 2 0 0 2 2 1 2 1 1 2 0 2 2 2 0 2 0 0 1 2 1 2 11 2 1 1 1 2 1 2 1 0 1 1 1 1 2 1 0 0 2 1 2 0 2 0 2 2 0 1 0 2 1 0 2 1 0 0 10]
X_test [[4.6 3.4 1.4 0.3][4.6 3.1 1.5 0.2][5.7 2.5 5.  2. ][4.8 3.  1.4 0.1][4.8 3.4 1.9 0.2][7.2 3.  5.8 1.6][5.  3.  1.6 0.2][6.7 2.5 5.8 1.8][6.4 2.8 5.6 2.1][4.8 3.  1.4 0.3][5.3 3.7 1.5 0.2][4.4 3.2 1.3 0.2][5.  3.2 1.2 0.2][5.4 3.9 1.7 0.4][6.  3.4 4.5 1.6][6.5 2.8 4.6 1.5][4.5 2.3 1.3 0.3][5.7 2.9 4.2 1.3][6.7 3.3 5.7 2.5][5.5 2.5 4.  1.3][6.7 3.  5.  1.7][6.4 2.9 4.3 1.3][6.4 3.2 5.3 2.3][5.6 2.7 4.2 1.3][6.3 2.3 4.4 1.3][4.7 3.2 1.6 0.2][4.7 3.2 1.3 0.2][6.1 3.  4.9 1.8][5.1 3.8 1.9 0.4][7.2 3.2 6.  1.8][6.2 2.8 4.8 1.8][5.1 3.3 1.7 0.5][5.6 2.9 3.6 1.3][7.7 3.8 6.7 2.2][5.4 3.  4.5 1.5][5.8 4.  1.2 0.2][6.4 2.8 5.6 2.2][6.1 3.  4.6 1.4]]
y_test [0 0 2 0 0 2 0 2 2 0 0 0 0 0 1 1 0 1 2 1 1 1 2 1 1 0 0 2 0 2 2 0 1 2 1 0 21]
X_train shape: (112, 4)
X_test shape: (38, 4)
3.使用散点矩阵查看数据特征关系

        在数据分析中,同时观察一组变量的散点图是很有意义的,这也被称为散点图矩阵(scatter plot matrix)。创建这样的图表工作量巨大,可以使用scatter_matrix函数。scatter_matrix函数是Pandas提供了一个能从DataFrame创建散点图矩阵的函数。

【例】对鸢尾花数据结果,使用scatter_matrix显示训练集与测试集的散点图矩阵。

#【例5.3】使用scatter_matrix显示训练集与测试集。
import pandas as pd
iris_dataframe = pd.DataFrame(X_train, columns=iris_dataset.feature_names)
# 创建一个scatter matrix,颜色值来自y_train
pd.plotting.scatter_matrix(iris_dataframe, c=y_train, figsize=(15, 15), marker='o', hist_kwds={'bins': 20}, s=60, alpha=.8)
运行结果:

4.建立KNN模型

        在Python中,实现KNN方法使用的是KNeighborsClassifier类,KNeighborsClassifier类属于Scikit-learn的neighbors包。

核心操作包括以下三步:

  1. 创建KNeighborsClassifier对象,并进行初始化
  2. 调用fit()方法,对数据集进行训练
  3. 调用predict()函数,对测试集进行预测

使用KNN对鸢尾花iris数据集进行分类的完整代码如下:

from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
#导入鸢尾花数据并查看数据特征
iris = datasets.load_iris()
print('数据集结构:',iris.data.shape)
# 获取属性
iris_X = iris.data
# 获取类别
iris_y = iris.target
# 划分成测试集和训练集
iris_train_X,iris_test_X,iris_train_y,iris_test_y=train_test_split(iris_X,iris_y,test_size=0.2, random_state=0)
#分类器初始化
knn = KNeighborsClassifier()
#对训练集进行训练
knn.fit(iris_train_X, iris_train_y)
#对测试集数据的鸢尾花类型进行预测
predict_result = knn.predict(iris_test_X)
print('测试集大小:',iris_test_X.shape)
print('真实结果:',iris_test_y)
print('预测结果:',predict_result)
#显示预测精确率
print('预测精确率:',knn.score(iris_test_X, iris_test_y))

运行结果:

数据集结构: (150, 4)
测试集大小: (30, 4)
真实结果: [2 1 0 2 0 2 0 1 1 1 2 1 1 1 1 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0]
预测结果: [2 1 0 2 0 2 0 1 1 1 2 1 1 1 2 0 1 1 0 0 2 1 0 0 2 0 0 1 1 0]
预测精确率: 0.9666666666666667

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1547587.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

IIs站点发布ERR_UNSAFE_PORT

换个端口&#xff0c;谢谢&#xff01; nice 浏览器对部分端口有特定的保护机制&#xff0c;如果你的应用使用了这些端口&#xff0c;浏览器在发送请求时会触发保护机制&#xff0c;拒绝发送请求&#xff0c;于是&#xff0c;你的服务器应用自然就收不到请求了。 1, // …

树莓派基础命令

目录 1.树莓派简介 2.树莓派使用命令 3.树莓派包管理 4.关于远程连接树莓派的思路&#xff1a; 5.总结 1.树莓派简介 树莓派&#xff08;Raspberry Pi&#xff09;是一款由英国非营利组织树莓派基金会开发的小型、低成本的单板计算机&#xff0c;最初设计目的是为了让学生…

好看的首页展示

代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>/* RESET…

【BUG】静读天下|静读天下无法设置段间距解决方案

【BUG】静读天下&#xff5c;静读天下无法设置段间距解决方案 文章目录 【BUG】静读天下&#xff5c;静读天下无法设置段间距解决方案前言解决办法 凑质量分静读天下的特点与优势功能布局与使用技巧个人使用心得结语 前言 03-23 求助&#xff5c;关于排版的问题【静读天下吧】_…

数字孪生平台,助力制造设备迈入超感知与智控新时代!

痛点剖析 当前&#xff0c;制造业面临系统分散导致的数据孤岛问题&#xff0c;严重阻碍了有效监管与统计分析&#xff1b;同时&#xff0c;设备多样化且兼容性不足&#xff0c;增加了管理难度&#xff1b;台账记录方式混乱&#xff0c;工单审批流程繁琐且效率低下&#xff1b;…

Stable Diffusion零基础学习

Stable Diffusion学习笔记TOP11 _插件篇之ControlNet功能篇 ControlNet目前支持的10多种预处理器&#xff0c;根据数据检测种类可分为两种类型&#xff1a; 1、功能型&#xff1a;拥有着不同的能力 2、构图型&#xff1a;控制着SD扩散图形的构图规则 Shuffle洗牌/转换&#…

基于Ubuntu 20.04 LTS上部署MicroK8s(最小生产的 Kubernetes)

目录 文章目录 目录简介Kubernetes简介MicroK8s简介Ubuntu系统MicroK8s的优势安装环境基本要求执行安装命令加入群组(使用非 root 用户访问)开启 dashboard 仪表盘查看服务名称查看仪表盘开放的端口打开浏览器检查状态打开你想要的服务(使用附加组件)开始使用 microk8s访问 Kub…

【【通信协议之ICMP协议的FPGA实现】】

通信协议之ICMP协议的FPGA实现 整体的实现框图如下所示 arp_rx.v module arp_rx#(//开发板MAC地址 00-11-22-33-44-55parameter BOARD_MAC 48h00_11_22_33_44_55, //开发板IP地址 192.168.1.10 parameter BOARD_IP {8d192,8d168,8d1,8d10} )(input …

RFID手持机——物联网时代的核心工具

一、行业背景 在当今物联网技术高速发展的时代&#xff0c;RFID技术作为核心的数据采集与识别手段&#xff0c;在物流、仓储、资产管理等众多领域发挥着至关重要的作用。以物流行业为例&#xff0c;利用RFID技术能够对货物进行全程精准跟踪&#xff0c;从入库、存储、搬运到出…

Keepalived+Nginx 高可用集群(双主模式)

1.基础环境配置 [rootlb1 ~]# systemctl stop firewalld # 关闭防火墙 [rootlb1 ~]# sed -i s/^SELINUX.*/SELINUXdisabled/ /etc/sysconfig/selinux # 关闭selinux&#xff0c;重启生效 [rootlb1 ~]# setenforce 0          …

从Elasticsearch到RedisSearch:探索更快的搜索引擎解决方案

文章目录 RedisSearch 的关键功能与 ElasticSearch 对比性能对比产品对比 如何使用 Docker 安装 RedisSearch1. 获取 RedisSearch Docker 镜像2. 启动 RedisSearch 容器3. 验证安装 RedisSearch 使用示例1. 连接到 RedisSearch2. 创建索引3. 添加文档4. 执行搜索搜索所有包含 &…

C++ | Leetcode C++题解之第440题字典序的第K小数字

题目&#xff1a; 题解&#xff1a; class Solution { public:int getSteps(int curr, long n) {int steps 0;long first curr;long last curr;while (first < n) {steps min(last, n) - first 1;first first * 10;last last * 10 9;}return steps;}int findKthNum…

Ubuntu20.04 安装汉语拼音后重启登入黑屏

在虚拟机上装了一个Ubuntu用来学C&#xff0c;默认没有安装中文输入。于是按照网上教程装了几个汉语包。切换输入法的时候突然死机&#xff0c;重启登入直接黑屏。百度后发现有不少老哥和我这个问题一模一样&#xff0c;按照他们的方法也终于整好了&#xff0c;虚惊一场。 解决…

Windows 10 系统安装 FFmpeg 查看、转换、编辑音频文件

1、FFmpeg官网&#xff1a;FFmpeg 点击下载 可以选择下载full版本 下载之后解压到指定目录&#xff0c;在系统环境变量 Path 里面新增环境变量 打开CMD终端运行 ffmpeg -version 查看是否安装成功。 2、基本命令 查看音频基本信息 ffprobe 1.mp3 ##输出 [mp3 000002ab334405…

DataLight(V1.4.5) 版本更新,新增 Ranger、Solr

DataLight&#xff08;V1.4.5&#xff09; 版本更新&#xff0c;新增 Ranger、Solr DataLight 迎来了重大的版本更新&#xff0c;现已发布 V1.4.5 版本。本次更新对平台进行了较多的功能拓展和优化&#xff0c;新增了对 Ranger 和 Solr 服务组件的支持&#xff0c;同时对多项已…

傅里叶级数在机器人中的应用(动力学参数辨识)

B站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清华大学李永乐老师教你如何理解傅里叶变换&#xff0c;辨清美颜和变声原理&#xff0c;&#xff01;&#xff01;_哔哩哔哩_bilibiliB站首发&#xff01;草履虫都能看懂的【傅里叶变换】讲解&#xff0c;清…

macOS安装MySQL以后如何配置环境变量

当安装了MySQL,解决了远程链接的问题以后, 还没有完事大捷, 还需要配置环境变量. 因为我需要使用mysql命令, 以及备份相关的命令. 下面是mysql的默认配置截图: 接着我查看了/usr/local/mysql/bin这个目录. 果然很多命令都在这个里面. 所以我将这个目录加载到了path中. e…

XSS | 反射型 XSS 攻击

关注这个漏洞的其他相关笔记&#xff1a;XSS 漏洞 - 学习手册-CSDN博客 0x01&#xff1a;反射型 XSS — 理论篇 反射型 XSS 又称非持久型 XSS&#xff0c;这种攻击方式往往具有一次性。 常见的攻击方式&#xff1a; 攻击者通过电子邮件等方式将包含 XSS 代码的恶意链接发送给…

Linux标准IO(五)-I/O缓冲详解

1.简介 出于速度和效率的考虑&#xff0c;系统 I/O 调用&#xff08;即文件 I/O&#xff0c;open、read、write 等&#xff09;和标准 C 语言库 I/O 函数&#xff08;即标准 I/O 函数&#xff09;在操作磁盘文件时会对数据进行缓冲&#xff0c;本小节将讨论文件 I/O 和标准 I/…

蓝桥杯--STM32G431RBT6(TIM定时器的输出频率和占空比,含详细原理介绍和使用方法)

目录 一、前言 二、代码 实现功能&#xff1a;​编辑 按如图配置 定义变量 编写执行代码 显示在LCD上 加入按键效果 三、效果展示 四、代码开源 一、前言 ARR 即自动重装载值&#xff08;Auto Reload Register&#xff09;。相当于一个水杯&#xff0c;水杯容量&am…