机器学习算法(一)KNN近邻算法

news2024/11/22 10:11:26

一、KNN算法概述

KNN:K-Nearest-Neighbor算法,即K值为邻近。KNN是最简单的分类算法之一,同时,也是最常用的分类算法之一。KNN算法是有监督学习中的分类算法。

二、原理

基于基于iris数据集,具体经历下面四步流程:
        ①载入数据,对数据进行预处理 (缺失值处理、标准化等,其中iris数据集数据全面,无需进行缺失值处理)。
        ②计算待分类点到其他每个样本点的距离。
        ③对每个距离进行排序,然后选择出距离最小的K个点。
        ④对K个点所属的类别进行比较,根据少数服从多数的原则,将待分类点归入在K个点中占比最高的那一类。

三、相关基础知识的扩展

(1)对缺失值补全的方法,此处采用对缺失值填充当列数据的平均值的方法

# 缺失值处理
for i in iris_dataset.columns:
    if not np.all(pd.notnull(iris_dataset[i])):
        iris_dataset[i].fillna(iris_dataset[i].mean())

(2)距离计算公式,包括闵式距离(含欧式距离、曼哈顿距离和切比雪夫距离)、标准化欧式距离(排除数据量纲的影响)、余弦距离、杰卡德距离(求交集、并集间距离)、汉明距离(密码学常用,求字符串间距离)、马氏距离(求分布数据距离)。下面详细介绍闵式距离。

        闵氏距离又叫做闵可夫斯基距离,是欧氏空间中的一种测度,被看做是欧氏距离的一种推广,欧氏距离是闵可夫斯基距离的一种特殊情况。定义式:

                                                            

闵可夫斯基距离公式中:

p=2时,即为欧氏距离:勾股定理计算的点之间的直接距离

                                             

p=1时,即为曼哈顿距离:点在标准坐标系上的绝对轴距之和

                                           

p=\infty时,即为切比雪夫距离:各坐标轴数据差的最大值

                                              

                                  

               

图中绿色代表欧氏距离,红线代表曼哈顿距离,其他三条折线也表示了曼哈顿距离,这三条折线的长度是相等的。

四、使用KNN算法预测iris数据集

import numpy as np
import pandas as pd
from sklearn import preprocessing
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier


# 载入数据
iris = load_iris()

# 创建DF
iris_dataset = pd.DataFrame(data=iris.data, columns=iris.feature_names)
# iris_dataset['target'] = iris['target']
# iris_dataset['species'] = iris.target_names[iris['target']]

# 缺失值处理
for i in iris_dataset.columns:
    if not np.all(pd.notnull(iris_dataset[i])):
        iris_dataset[i].fillna(iris_dataset[i].mean())

# 数据集拆分
x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2)

# 标准化处理
scaler = preprocessing.StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.fit_transform(x_test)


# 模型训练
knn = KNeighborsClassifier(n_neighbors=9, algorithm='auto')
estimator = knn.fit(x_train, y_train)

# 模型评估,预测值
y_predict = estimator.predict(x_test)
print("预测值和目标值对比:\n", y_predict == y_test)

# 准确率
score = estimator.score(x_test, y_test)
print("score:", score)

# 预测
test_pre = estimator.predict([[1, 0.002, 0.00465, 1]])
print("predict result: ", iris.target_names[test_pre])

运行结果:  

 

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

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

相关文章

指南 | OpenAI API对PDF进行总结提炼

前言 本文将针对信息过载阅读搜索难的问题,展示如何利用OpenAI API高效地自动总结PDF,从而提高阅读效率和节省时间。包含详尽的操作教程、实际案例及最佳实践,旨在确保准确且高效地进行文档摘要。另外,本文还将深入探讨运用AI技术…

Cocos Creator3D:发布到 Web 平台

推荐:将 NSDT场景编辑器 加入你的3D工具链 3D工具集: NSDT简石数字孪生 发布到 Web 平台 打开主菜单的 项目 -> 构建发布,打开构建发布面板。 Cocos Creator 3D 提供了两种 Web 平台的页面模板,可以通过 发布平台 的下拉菜单…

非靶代谢组学+肠道菌群测序:改善乳腺癌相关性疲劳——针灸!

文章标题: Acupuncture ameliorates breast cancer-related fatigue by regulating the gut microbiota-gut-brain axis 发表期刊:Frontiers in Endocrinology 影响因子:6.055 作者单位:河南中医药大学第一附属医院 百趣生物提…

新建项目框架详细过程(idea2021.3版本) IoC实例 DI

目录 使用Java Enterprise 一步到位 IOC、IOC容器、Bean、DI 1.IOC(Inversion of Control)控制反转 (1)什么是控制反转呢? (2)Spring和IOC之间的关系是什么呢? (3)IOC容器的作用以及内部存放的是什么? (4)当IOC容器中创建好service和…

【半监督图像分割 2023 CVPR】UniMatch

【半监督图像分割 2023 CVPR】UniMatch 论文题目:Revisiting Weak-to-Strong Consistency in Semi-Supervised Semantic Segmentation 中文题目:重新审视半监督语义分割中的强弱一致性 论文链接:https://arxiv.org/abs/2208.09910 论文代码&a…

ES6 JavaSript

爬虫组件分析 目录概述需求: 设计思路实现思路分析1.最常用的ES6特性2.let, const3.class, extends, super4.arrow function5.template string 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&a…

MTK平台的SWT异常的简单总结(3)——常见SWT/ANR类型

(1)如何查看db文件Log (2)如何确认线程关系 (3)常见类型 (A)等锁 线程状态为"Blocked",通过关键字"held by"进一步确认哪个线程拿住了锁&#xff…

一.《传奇M》装备栏遍历的突破口

寻找突破口 1.首先根据大多数游戏而言,装备栏中一般记录的是装备的对象或者装备ID,那么当我们穿装备或者脱装备肯定会有相应的值在改变 2.我们就从这里入手,当穿或脱装备的时候,使用CE搜索0然后通过改变或者未改变来筛选结果 3.接下来我们操作试一试这个思路可不可以 4.点击首…

Vue中如何进行图片识别与物体检测

Vue中如何进行图片识别与物体检测 随着人工智能技术的发展,图像识别和物体检测已经成为了很多应用场景的必备功能。在Vue中如何使用百度AI或腾讯AI等云服务实现图片识别和物体检测呢?本文将为您介绍一些基本概念和示例代码,帮助您快速入门。…

强化学习PPO:Proximal Policy Optimization Algorithms解读

PPO算法是一类Policy Gradient强化学习方法,经典的Policy Gradient通过一个参数化决策模型来根据状态确定动作,其参数更新是通过下式进行的: 用于衡量决策模型的优劣目标,决策模型的优化目标为寻找最优决策,使得该决策…

电力辅助服务

电力辅助服务 1、电力辅助服务是什么2、电力辅助服务发展历程3、《电力辅助管理办法》主要修订内容4、电力辅助服务品种5、电力辅助服务市场规模6、国外电力辅助服务市场 1、电力辅助服务是什么 《电力辅助服务管理办法》中定义电力辅助服务是由火电、水电、核电、风电、光伏发…

Elastic 推出 Elastic AI 助手

作者:Mike Nichols Elastic 推出了 Elastic AI Assistant,这是一款由 ESRE 提供支持的开放式、生成式 AI 助手,旨在使网络安全民主化并支持各种技能水平的用户。 最近发布的 Elasticsearch Relevance Engine™ (ESRE™) 提供了用于创建高度相…

Spring Boot进阶(49):SpringBoot之集成WebSocket实现前后端通信 | 超级详细,建议收藏

1. 前言 在上一期,我对WebSocket进行了基础及理论知识普及学习,而这一期,我重点是要带着你们进行实战教学,手把手教学如何在springboot架构基础上集成WebSocket及实现前后端通讯功能。具有很好的学习价值,希望大家在学…

Python Selenium基本用法

Selenium 作为一款 Web 自动化测试框架,提供了诸多操作浏览器的方法,本节对其中的常用方法做详细介绍。 定位节点 Selenium 提供了 8 种定位单个节点的方法,如下所示: 定位节点方法 方法 说明 find_element_by_id() 通过 id 属性…

MacOS 高颜值的 数据库客户端工具 Tableplus 简单逆向分析

0x0 navicat 给公司发律师函了, 所以不能白嫖了.. 后来一直在找替代品, 但均感觉略有不足. dbeaver : java 开发的, 依赖 jdk , 而且BUG较多,也不流畅 mysqlworkbench : 官方出品, 功能强大. 但是用着不带劲 Sequel Ace : 开源免费, 但是只支持mysql,功能简单 最后试了下 Tab…

【手撕MyBatis源码】插件体系

文章目录 概述插件的使用插件代理机制自动分页插件拦截目标分页插件原理 概述 Mybatis作为一个应用广泛的优秀的ORM开源框架,这个框架具有强大的灵活性,在四大组件(Executor、StatementHandler、ParameterHandler、ResultSetHandler)处提供了简单易用的插…

​如何高效开发一个OA办公系统​?

如何才能高效开发一个OA办公系统?这篇教你使用零代码工具从0-1搭建一个OA办公系统,无需代码基础,只要你懂业务,只需3步即可搭建! 先来看看效果—— 系统模板>> https://www.jiandaoyun.com/ 整个系统包含物资管…

动态规划经典题型:最小路径和、所有路径

题目1:最小路径和 给定一个包含非负整数的 *m* x *n* 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例: 输入:grid [[1,3,1],[1…

计算机网络之链路层和局域网

六.链路层和局域网 6.1 链路层概述 6.1.1 链路层可能提供的服务 成帧、链路接入、可靠交付、差错检测和纠正 6.1.2 链路层在何处实现 下图是一个典型的主机体系结构,链路层的主体部分是在网络适配器实现的,部分链路层是在运行于主机CPU上的软件实现的…

融云 CTO 岑裕受邀出席亚马逊云科技「出海日」论坛

(点击购买《社交泛娱乐出海作战地图》) 6 月 9 日,亚马逊云科技主办的“潮向新世界”出海日活动在深圳举行,融云作为领军出海服务企业受邀出席。关注【融云全球互联网通信云】了解更多 在现场展位,融云的一站式全生态…