机器学习--K近邻算法,以及python中通过Scikit-learn库实现K近邻算法API使用技巧

news2024/11/17 21:20:25

文章目录

  • 1.K-近邻算法思想
  • 2.K-近邻算法(KNN)概念
  • 3.电影类型分析
  • 4.KNN算法流程总结
  • 5.k近邻算法api初步使用
    • 机器学习库scikit-learn
      • 1 Scikit-learn工具介绍
      • 2.安装
      • 3.Scikit-learn包含的内容
      • 4.K-近邻算法API
      • 5.案例
        • 5.1 步骤分析
        • 5.2 代码过程

1.K-近邻算法思想

假如你有一天来到北京,你有一些朋友也在北京居住,你来到北京之后,你也不知道你在北京的哪个区,假如你来到了北京南站。
分别问朋友在哪个区,距离多远。
根据最近朋友所在区比如丰台区,来判断自己是不是也在丰台区。
这就是K近邻算法的思想,根据最近距离来判断你属于哪个类别。

在这里插入图片描述

根据你的“邻居”来推断出你的类别

2.K-近邻算法(KNN)概念

K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法

定义
如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。

来源:KNN算法最早是由Cover和Hart提出的一种分类算法

距离公式
两个样本的距离可以通过如下公式计算,又叫欧式距离 ,关于距离公式会在后面进行讨论
在这里插入图片描述
在这里插入图片描述

3.电影类型分析

假设我们现在有几部电影
在这里插入图片描述

其中? 号电影不知道类别,如何去预测?我们可以利用K近邻算法的思想
我们这里时三列数据,属于三维数据的求解过程
比如我们求唐人街探案与二次曝光的距离,根据欧氏距离计算如下
在这里插入图片描述

分别计算每个电影和被预测电影的距离,然后求解
在这里插入图片描述

然后根据最小距离,或最小的几个距离的众数得到唐人街探案属于哪种片子
K=5表示,根据5部最小距离的电影来判断,从这8个样本里面拿其中的5个
在距离最小的5部电影里面,3部属于喜剧片,2部属于爱情片,由众数得知,唐人街探案属于喜剧片

4.KNN算法流程总结

1)计算已知类别数据集中的点与当前点之间的距离

2)按距离递增次序排序

3)选取与当前点距离最小的k个点

4)统计前k个点所在的类别出现的频率

5)返回前k个点出现频率最高的类别作为当前点的预测分类

5.k近邻算法api初步使用

机器学习流程:
在这里插入图片描述

1.获取数据集
2.数据基本处理
3.特征工程
4.机器学习
5.模型评估

机器学习库scikit-learn

1 Scikit-learn工具介绍

在这里插入图片描述

机器学习有很多库,为什么我们要选这个scikit-learn库呢?
1.它是Python语言的机器学习工具
2.Scikit-learn包括许多知名的机器学习算法的实现
3.Scikit-learn文档完善,容易上手,有丰富的API

2.安装

pip install scikit-learn
在这里插入图片描述

安装好之后可以通过以下命令查看是否安装成功
import sklearn

注:安装scikit-learn需要Numpy, Scipy等库

3.Scikit-learn包含的内容

在这里插入图片描述

分类、聚类、回归
特征工程
模型选择、调优

4.K-近邻算法API

sklearn.neighbors.KNeighborsClassifier(n_neighbors=5)
在这里插入图片描述

参数解析:
n_neighbors:所选用的近邻数(默认= 5),相当于K.

weights:预测的权函数,概率值。

     weights的参数设置

        ‘uniform’:同一的权重,即每个邻域中的所有点都是平均加权的。

        ‘distance’ :这种情况下,距离越近权重越大,反之,距离越远其权重越小。

         [callable](可调用):用户定义的函数,它接受一个距离数组,并返回一个包含权重的相同形状的数组

algorithm :用于计算最近邻居的算法,。有{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}

         ‘auto’      :根据样本数据自动刷选合适的算法。

         ‘ball_tree’:构建“球树”算法模型。

         ‘kd_tree’ :‘’kd树‘’算法。

         ‘brute’     :使用蛮力搜索,即或相当于Knn算法,需遍历所有样本数据与目标数据的距离,进而按升序排序从而选取最近的K个值,采用投票得出结果。

leaf_size:叶的大小,针对算法为球树或KD树而言。这个设置会影响构造和查询的速度,以及存储树所需的内存。最优值取决于问题的性质。

metric:用于树的距离度量。默认度量是Minkowski,p=2等价于标准的欧几里德度量。有关可用度量的列表,可以查阅距离度量类的文档。如果度量是“预先计算的”,则假定X是距离矩阵,在拟合期间必须是平方。

p:Minkowski度量参数的参数来自sklearn.emeics.pairwise.pairwise_距离。当p=1时,这等价于使用曼哈顿距离(L1),欧几里得距离(L2)等价于p=2时,对于任意的p,则使用Minkowski_距离(L_P)。

metric_params:度量函数的附加关键字参数,设置应为dict(字典)形式。

n_jobs:要为邻居搜索的并行作业的数量。None指1,除非在 joblib.parallel_backend背景。-1意味着使用所有处理器,若要了解相关的知识应该具体查找一下。
拥有的方法:
fit(self, X[, y])
 : 以X为训练数据,y为目标值拟合模型

get_params(self[, deep])
: 获取此估计器的参数。

kneighbors(self[, X, n_neighbors, …])
: 找到点的K邻域。

kneighbors_graph(self[, X, n_neighbors, mode])
: 计算X中点的k-邻域(加权)图

predict(self, X)
: 预测提供的数据的类标签

predict_proba(self, X)
: 返回测试数据X的概率估计。

score(self, X, y[, sample_weight])
: 返回给定测试数据和标签的平均精度。

set_params(self, \*\*params)
: 设置此估计器的参数。

5.案例

5.1 步骤分析

1.获取数据集
2.数据基本处理(该案例中省略)
3.特征工程(该案例中省略)
4.机器学习
5.模型评估(该案例中省略)

5.2 代码过程

导入模块

from sklearn.neighbors import KNeighborsClassifier

#构造数据集
#x是原始数据,特征。y是类别标签,目标

x = [[0], [1], [2], [3]]   #x是二维数据,dataframe数据结构
y = [0, 0, 1, 1]           #y是series数据结构


#机器学习 -- 模型训练
# 实例化API
estimator = KNeighborsClassifier(n_neighbors=2)
# 使用fit方法进行训练,这行代码执行了,模型就训练好了


estimator.fit(x, y)

res = estimator.predict([[1]])
print(res)


res2 = estimator.predict([[50]])
print(res2)

根据训练好的模型,预测未知数据所属类别:
在这里插入图片描述
由上可知,达到预期效果。大家觉得机器学习有了python库的加持,是不是不太难呢,大家一起加油,继续后面的机器学习之路,欢迎大家点赞评论。

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

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

相关文章

Django前后端分离之后端实践2

小实践:实现用户登录、注销及ORM管理功能、事务开启小实践 models.py class Books(models.Model):id models.CharField(primary_keyTrue,max_length20,verbose_name"图书ID")name models.CharField(max_length20,verbose_name图书名称)status models…

Spring如何扫描自定义的注解?

目录 一、Spring框架介绍 二、什么是自定义注解 三、如何扫描自定义的注解 一、Spring框架介绍 Spring框架是一个开源的Java应用程序框架,它提供了一种全面的编程和配置模型,用于构建现代化的企业级应用程序。Spring框架的核心原则是依赖注入&#x…

零基础学Python之面向对象

1.面向对象编程简介 (1)什么是面向对象 面向对象程序设计(Object Oriented Programming)作为一种新方法,其本质是以建立模型体现出来的抽象思维过程和面向对象的方法。模型是用来反映现实世界中事物特征的。任何一个模型都不可能反映客观事…

Java实现批量视频抽帧2.0

继上个版本 对其进行略微升级 &#x1f913; 上个版本仅对一个视频进行抽帧处理 此版本可对一个文件夹内的全部视频进行抽帧并对应的文件夹进行帧图片的保存 1️⃣配置pom.xml &#xff08;保持上次不变&#xff09; <dependencies><dependency><grou…

推理系统学习笔记

一些学习资料 最近对MLsys比较感兴趣&#xff0c;遂找些资料开始学习一下 https://fazzie-key.cool/2023/02/21/MLsys/https://qiankunli.github.io/2023/12/16/llm_inference.htmlhttps://dlsyscourse.orghttps://github.com/chenzomi12/DeepLearningSystem/tree/main/04Infe…

数智文旅:智慧文旅中的数字化转型

在数字化浪潮席卷全球的今天&#xff0c;旅游业作为传统服务业的代表&#xff0c;正面临着前所未有的转型压力与机遇。智慧文旅&#xff0c;作为旅游业与数字技术深度融合的产物&#xff0c;不仅标志着旅游业进入了全新的发展阶段&#xff0c;更预示着未来旅游业将朝着更加智能…

QAnything之BCEmbedding技术路线

QAnything和BCEmbedding简介 QAnything[github]是网易有道开源的检索增强生成式应用&#xff08;RAG&#xff09;项目&#xff0c;在有道许多商业产品实践中已经积累丰富的经验&#xff0c;比如有道速读和有道翻译。QAnything是一个支持任意格式文件或数据库的本地知识库问答系…

【开源】JAVA+Vue+SpringBoot实现公司货物订单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 客户管理模块2.2 商品维护模块2.3 供应商管理模块2.4 订单管理模块 三、系统展示四、核心代码4.1 查询供应商信息4.2 新增商品信息4.3 查询客户信息4.4 新增订单信息4.5 添加跟进子订单 五、免责说明 一、摘要 1.1 项目…

Tauri 的基本使用笔记

文章目录 前言如何将 Tauri 集成到前端项目?进程间通信&#xff08;命令&#xff09;const invoke window.__TAURI__.invoke; 进程间通信&#xff08;事件&#xff09;前端 ⇒ RustRust ⇒ 前端我的疑问 开发时的一些技巧用代码打开前端的开发者工具让 Tauri 不要监听文件Rus…

Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组

两数之和 —— 无序数组 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现…

数据结构(C语言)代码实现(七)——一元多项式的表示与相加

目录 前言 参考资料格式 头文件LinkList.h LocateElem函数&#xff0c;定位查找 有序插入&#xff08;没测试&#xff09; 完整代码 头文件polynomial.h 测试函数&#xff08;主函数&#xff09; 测试结果 前言 寒假在家&#xff0c;有点学不下去&#xff0c;写文章的…

java中ArrayList类常用API

前言&#xff1a;在学习java的ArrayList类的时候&#xff0c;有很多的API需要了解&#xff0c;下面我将举出其中在新手学习时使用频率较大的几个API。 先大体看一下有哪几个&#xff1a;&#xff08;如图&#xff09; 目录 1.add&#xff08;&#xff09; 解释&#xff1a; …

CSS太极动态图

CSS太极动态图 1. 案例效果 我们今天学习用HTML和CSS实现动态的太极&#xff0c;看一下效果。 2. 分析思路 太极图是由两个旋转的圆组成&#xff0c;一个是黑圆&#xff0c;一个是白圆。实现现原理是使用CSS的动画和渐变背景属性。 首先&#xff0c;为所有元素设置默认值为0…

非精线搜索步长规则Armijo规则Goldstein规则Wolfe规则

文章目录 非精确线搜索步长规则Armijo规则Goldstein规则Wolfe规则C示例代码参考链接 非精确线搜索步长规则 在数值优化中&#xff0c;线搜索是一种寻找合适步长的策略&#xff0c;以确保在目标函数上获得足够的下降。如最速下降法&#xff0c;拟牛顿法这些常用的优化算法等&am…

异步解耦之RabbitMQ(三)_RabbitMQ队列

异步解耦之RabbitMQ(一) 异步解耦之RabbitMQ(二)_RabbitMQ架构及交换机 RabbitMQ提供了许多功能和选项&#xff0c;包括队列和消息的 TTL&#xff08;Time-To-Live&#xff0c;生存时间&#xff09;。在本篇博客中&#xff0c;我们将深入探讨 RabbitMQ 队列和消息的 TTL&…

Laykefu客服系统 任意文件上传

【产品介绍】 Laykefu 是一款基于workermangatawayworkerthinkphp5搭建的全功能webim客服系统&#xff0c;旨在帮助企业有效管理和提供优质的客户服务 【漏洞介绍】 Laykefu客服系统/admin/users/upavatar.html接口处存在文件上传漏洞 【资产测绘Query】 fofa语法&#xf…

IS-IS weight影响路由加表

拓扑图 配置 nexthop weight影响路由加入路由表 weight默认为255&#xff0c;取值1~255&#xff0c;值越小越优先 sysname R1 # isis 1is-level level-1cost-style widenetwork-entity 49.1234.0000.0000.0001.00log-peer-change topology # interface GigabitEthernet0/0/0…

freeRTOS总结(十四)任务通知

1、任务通知 任务通知&#xff1a; 用来通知任务的&#xff0c;任务控制块中的结构体成员变量ulNotifiedValue就是这个通知值 使用队列、信号量、事件标志组时都需另外创建一个结构体&#xff0c;通过中间的结构体进行间接通信&#xff01; 使用任务通知时&#xff0c;任务结…

C#上位机与三菱PLC的通信02--MC协议介绍

1、协议介绍 三菱 PLC MC 协议是一种用于三菱 PLC 与上位机之间进行数据通信的协议&#xff0c;也称为 Mitsubishi Communication Protocol。该协议支持串口、以太网等多种通讯方式&#xff0c;可实现实时数据的采集和交换。三菱PLC的MC协议是一种数据通信协议&#xff0c;它用…

跟着pink老师前端入门教程-day21

5.4 常见flex布局思路 5.5 背景线性渐变 语法&#xff1a; background: linear-gradient( 起始方向 , 颜色 1, 颜色 2, ...); background: -webkit-linear-gradient(left, red , blue); background: -webkit-linear-gradient(left top, red , blue); 背景渐变必须添加浏览…