机器学习——KNN算法流程详解(以iris为例)

news2024/11/16 3:49:14

目  录

前情说明

问题陈述

数据说明

KNN算法流程概述

代码实现


前情说明

本书基于《特征工程入门与入门与实践》庄家盛 译版P53也K最近邻(KNN)算法进行讲解

问题陈述

Iris 鸢尾花数据集内包含 3 类分别为山鸢尾(Iris-setosa)、变色鸢尾(Iris-versicolor)和维吉尼亚鸢尾(Iris-virginica),共 150 条记录,每类各 50 个数据,每条记录都有 4 项特征:花萼长度、花萼宽度、花瓣长度、花瓣宽度。

sepallength:萼片长度
sepalwidth:萼片宽度
petallength:花瓣长度
petalwidth:花瓣宽度

我们的任务就是:给定一组记录(包含sepallength,sepalwidth,petallength,petalwidth),使用KNN算法给出该组记录的分类 

数据说明

本文使用数据源从机器学习库sklearn的datasets包中获取

# 导入iris数据
iris = datasets.load_iris()

可支持的数据集如下:

    "load_digits",
    "load_files",
    "load_iris",
    "load_breast_cancer",
    "load_linnerud",
    "load_sample_image",
    "load_sample_images",
    "load_svmlight_file",
    "load_svmlight_files",
    "load_wine",
#不知道为什么我的机器学习库只有这些数据集

参考链接: sklearn中的datasets数据集 - 知乎 (zhihu.com)

KNN算法流程概述

1.数据获取。要进行KNN,我们需要样本的部分属性完整数据以及在各种属性不同值的组合情况下的对应分类结果

2.数据清洗。获取数据后使用numpy整理缺失值,可视化查看是否有异常值(比如偏正态分布样本出现的极端值或者空值)

3.数据切分。将数据按照一定比例,从特定位置切分成训练集和测试集,必要情况还需要切割分一部分数据作为验证集

4.选取k个近邻点。使用某种数据结构或者库函数,获取逻辑距离最近的k个点位

5.获取结果。对k个点位进行统计,获取票数最多的结果进行分类。但是存在票数一致的情况,可以使用某种排序方式对数据进行排序,隐式的赋予某些特定的数据具有更高的优先级(即返回首位即可)

代码实现

from sklearn import datasets
from collections import Counter  # 为了做投票计数
from sklearn.model_selection import train_test_split
import random
import numpy as np

###############数据定义区
# 数据集划分随机数种子
randomNums=random.randint(1,9999)
print("随机数{}".format(randomNums))
# 最短投票对象数量
k=3
###############数据定义区END
# 计算同类属性的欧氏距离 假设能这样计算欧式距离代表样本之间的差距
def calcDistance(toBeMeasuredDataSet,DataSet):
    # print("打印欧氏距离")
    # print(toBeMeasuredDataSet,'\n',DataSet)
    # **2的妙用
    result=np.sqrt(np.sum((toBeMeasuredDataSet - DataSet)**2 ))
    # print("打印欧氏距离",result)
    return result

# 原始特征数据集 原始分类数据集 选取个数 待分类对象(一条记录)
def KNNSelect(X,Y,k,testObject):
    # 获取欧氏距离列表 计算待测数据与特征数据集的欧数据集
    distanceList=[calcDistance(testObject,singleData) for singleData in X ]
    # 排序后 切片获取逻辑距离最短的k个对记录的下标(维护前k个最值)
    theShortestIndex=np.argsort(distanceList)[:k]
    # 获取这k个结果
    resultList=Y[theShortestIndex]
    # 返回频率最高的结果 作为样本的类别
    return Counter(resultList).most_common(1)[0][0]

def printTopLineA():
    print(r"/\/\/\/\/\/\/\/\/\/\/\/\/")

def printTopLineB():
    print(r"\/\/\/\/\/\/\/\/\/\/\/\/\ ")

# 导入鸾尾花数据集
irisDataSet=datasets.load_iris()

#获取特征数据集
characteristicData=irisDataSet.data
# 获取分类数据集
categoricalData=irisDataSet.target
# 训练用特征数据集
# 测试用特征数据集
# 训练用分类数据集
# 测试用分类数据集
trainCharDataSet,testCharDataSet,trainCateDataSet,testCateDaSet\
    =train_test_split(characteristicData,categoricalData,random_state=randomNums)

for index,i in enumerate(testCharDataSet):
    print("第{}个数据\n特征数据是:{}\n数据的类别是:{}".format(index+1,i,KNNSelect(trainCharDataSet,trainCateDataSet,k,i)))
    if (index&1):
        printTopLineA()
    else:
        printTopLineB()

运行结果:

部分参考链接:

1.sklearn数据集——iris鸢尾花数据集_iris 数据_lyb06的博客-CSDN博客

2.【机器学习实战】科学处理鸢尾花数据集_鸢尾花数据标准化处理-CSDN博客

3.数据分析——鸢尾花数据集-CSDN博客

4.Python collections模块之Counter()详解_python counter-CSDN博客

5.Python基本函数:np.argsort()-CSDN博客

6.Python中的Counter.most_common()方法-CSDN博客

7.史上最全面K近邻算法/KNN算法详解+python实现 - 知乎 (zhihu.com)

8.什么是KNN算法? - 知乎 (zhihu.com)

9.sklearn中的datasets数据集 - 知乎 (zhihu.com)

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

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

相关文章

99%的亚马逊运营都不知道爆单小技巧——社媒促销代码

社交媒体促销代码是促进产品在亚马逊上销售的最有效推广方式之一,有了这个营销工具,卖家可以在社交媒体上宣传您的产品,并通过社交媒体和网红营销内容将促销代码分享给买家,进行更具针对性的促销。 一、什么是社交媒体促销代码 社…

BoxUVMap处理参考

该Shader的目标是让物体的位置作为UV,在物体自身UV没有正确展开的情况下保证物体各个面能够避免贴图拉伸,比较适合Box型的物体。本来Position节点和Normal Vector节点应该选择Object选项,但是当时选择了World选项,主要是应对项目的…

在亚马逊云科技Amazon SageMaker上部署构建聊天机器人的开源大语言模型

开源大型语言模型(LLM)已经变得流行起来,研究人员、开发人员和组织都可以使用这些模型来促进创新和实验。这促进了开源社区开展合作,从而为LLM的开发和改进做出贡献。开源LLM提供了模型架构、训练过程和训练数据的透明度&#xff…

超大表格组件滚动渲染优化

引用自 摸鱼wiki 背景 业务中需要渲染一个最多有100列的表格,由于表格使用原生dom实现,因此会出现同屏有近1000个单元格同时绘制,在快速滑动时页面会产生卡顿,影响用户体验。 方案 如下图所示,由于用户显示屏区域有…

LeetCode算法二叉树—222. 完全二叉树的节点个数

目录 222. 完全二叉树的节点个数 - 力扣(LeetCode) 代码: 运行结果: 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能…

opencv开发环境配置

一、下载安装 打开opencv官方网站,opencv管网地址,选择下载的版本 双击安装包,选择安装路径,进行安装 安装完毕后,打开 注意:环境变量配置的bin路径不是build/bin,而是build/x64/vc16/bin …

chrome扩展程序开发请求接口报错

解决HTTPS站点请求HTTP接口服务后报错&#xff1a;the content must be served over HTTPS Mixed Content: The page at <URL> was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint <URL>. This content should also be served over HTTPS…

网络知识:内网、外网、宽带、带宽、流量、网速之间的联系?

相信很多人都不知道内网、外网、宽带、带宽、流量、网速之间的区别与联系&#xff0c;今天小编给大家介绍一下&#xff0c;希望对大家能有所帮助&#xff01; 一.带宽与宽带的区别是什么&#xff1f; 带宽是量词&#xff0c;指的是网速的大小&#xff0c;比如1Mbps的意思是一兆…

数据库系统课设——基于python+pyqt5+mysql的酒店管理系统(可直接运行)--GUI编程(2)

几个月之前写的一个项目&#xff0c;通过这个项目&#xff0c;你能学到关于数据库的触发器知识&#xff0c;python的基本语法&#xff0c;python一些第三方库的使用&#xff0c;包括python如何将前后端连接起来&#xff08;界面和数据&#xff09;&#xff0c;还有界面的设计等…

Guava限流器原理浅析

文章目录 基本知识限流器的类图使用示例 原理解析限流整体流程问题驱动1、限流器创建的时候会初始化令牌吗&#xff1f;2、令牌是如何放到桶里的&#xff1f;3、如果要获取的令牌数大于桶里的令牌数会怎么样4、令牌数量的更新会有并发问题吗 总结 实际工作中难免有限流的场景。…

振弦采集仪结合无线中继扩展应用岩土工程监测的解决方案

振弦采集仪结合无线中继扩展应用岩土工程监测的解决方案 岩土工程监测是现代工程建设不可或缺的一部分&#xff0c;其目的是确保工程安全和稳定。然而&#xff0c;在进行监测时常常面临许多挑战。传统的岩土工程监测方法需要大量的人力、物力和时间&#xff0c;而且往往难以采…

顽固污渍一键去除,还有紫外线除菌功能,希亦超声波清洗机体验

日常生活中&#xff0c; 眼镜、牙刷等小物件的清洗该怎么清洗呢&#xff1f;如果使用肥皂水或者专业清洁剂来处理&#xff0c;还需要使用一些小工具来帮助清洁&#xff0c;比如清洁布、棉签等&#xff0c;不仅会很麻烦&#xff0c;而且需要频繁擦拭&#xff0c;镜片等物品光滑的…

601-体育馆的人流量

文章目录 601-体育馆的人流量1. 题目2. 思路3. 解决4. 运行结果 601-体育馆的人流量 1. 题目 2. 思路 思路&#xff1a;查询Stadium表中人流量超过100的记录&#xff0c;将查询结果与自身的临时表连接&#xff0c;再使用where获得满足条件的记录 查询Stadium表中人流量超过10…

现代数据中心发明人Luiz André Barroso去世,享年59岁,Jeff Dean、劈柴发推悼念

Luiz Andr Barroso因故去世&#xff0c;享年59岁。他作为现代云计算行业的奠基人&#xff0c;为谷歌的发展做出了不可磨灭的贡献。 数据中心发明人&#xff0c;云计算的奠基人&#xff0c;谷歌22年老兵Luiz Andr Barroso于9月16日意外去世&#xff0c;享年59岁。 谷歌CEO 劈柴…

NVM的下载安装和使用

node包管理工具NVM让我们更加方便在各个node版本之间切换来适配不同的项目 一、下载安装 下载地址&#xff1a;github下载地址 https://github.com/coreybutler/nvm-windows/releases安装一直点下一步就行&#xff0c;可以安装在D、E盘都行&#xff0c;安装后检查是否安装成功…

“身份验证失败” authentication failed报错的原因

问题描述 问题出在target “send_emai” 的password属性&#xff0c;我们认为输入的是邮箱的密码&#xff0c;即使是给出正确的密码仍报错的情况下&#xff0c;还是让大家输入正确的密码。结果呢&#xff1f; 这里的“password”输入的并不是密码&#xff0c;而是一种授权码&…

Servlet开发-session和cookie理解案例-登录页面

项目展示 进入登录页面&#xff0c;输入正确的用户名和密码以后会自动跳到主页 登录成功以后打印用户名以及上次登录的时间&#xff0c;如果浏览器和客户端都保存有上次登录的信息&#xff0c;则不需要登录就可以进入主页 编码思路 1.首先提供一个登录的前端页面&…

使用MySQL聚合函数来聚合数据,结果发现有刺客...

问题&#xff1a; 使用MySQL聚合函数 group_concat 的坑&#xff01; 现象&#xff1a; 我有个业务&#xff0c;需要将表中符合条件的数据行的id聚合成一个字符串&#xff0c;以供另外一张表的查询过滤。 SELECTx FROMt_A WHEREFIND_IN_SET(guan_lian,(SELECTgroup_concat( i…

毫米波V2I网络的链路层仿真研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

工时管理系统,一款灵活性强、轻量级工时记录和管理工具

一、开源项目简介 无鱼工时管理系统&#xff0c;是一款轻量级工时记录和管理工具&#xff0c;包括项目管理&#xff0c;工时上报&#xff0c;工时日报&#xff0c;工时统计等功能。 无鱼工时管理系统可通过员工工时上报的方式&#xff0c;来记录项目所花费的工时&#xff0c;…