目录

一.机器学习概述

二.人工智能的两大方向

三.KNN算法介绍

1.核心思想:“物以类聚,人以群分”

2.算法步骤

四.KNN算法实现

1.安装scikit-learn库

2.导入knn用于分类的类KNeighborsClassifier

3.设置KNeighborsClassifier的相关参数

4.训练模型

5.进行预测

6.计算准确率

五.鸢尾花案例实现

1.准备训练集和测试集数据

2.读取数据

3.划分训练集

4.调用KNN,完成训练过程

5.用训练集中的数据预测,并计算结果的正确率

6.划分测试集

7.将测试集中的数据进行预测,计算准确率

8.完整代码呈现


一.机器学习概述

  • 机器学习是人工智能的核心技术之一,涉及利用数学公式从数据中总结规律。
  • 经典算法(如KNN、线性回归、决策树等)是学习重点,掌握后可轻松扩展至衍生算法。
  • 机器学习流程分为三个阶段:
    • 数据收集:需大量高质量数据(如GPT训练数据达45TB)。
    • 模型训练:通过数学公式求解未知参数(如抛物线公式中的ABC)。
    • 预测:将新数据代入训练好的模型得出结果。

二.人工智能的两大方向

  • 回归:预测连续型数值(如房价、股票价格、温度)。
  • 分类:划分离散类别(如人脸识别、指纹识别、动物分类)。

三.KNN算法介绍

1.核心思想:“物以类聚,人以群分”

KNN 分类的核心逻辑是:一个样本的类别,由它周围距离最近的 K 个邻居的类别决定

  • 如果一个样本周围的多数邻居属于某一类,则该样本也被判定为该类。
  • 这是一种 “懒惰学习”(Lazy Learning)算法,训练阶段不进行模型拟合,仅存储所有训练数据;直到预测时,才通过计算新样本与训练样本的距离来确定类别。

2.算法步骤

  1. 确定参数 K:选择一个正整数 K(例如 K=3、5、7),表示要参考的 “邻居数量”。

    • K 值过小:容易受噪声影响,模型过拟合(泛化能力差)。
    • K 值过大:可能包含过多其他类别的样本,模型欠拟合(分类模糊)。
  2. 计算距离:对于待预测的新样本,计算它与所有训练样本之间的距离(衡量样本间的 “相似性”)。 常用距离度量方式:

    • 欧氏距离(最常用,适用于连续特征):
    • 二维空间公式:√[(x₁-x₂)² + (y₁-y₂)²]。
    • 三维空间公式:√[(x₁-x₂)² + (y₁-y₂)² + (z₁-z₂)²]。
    • N维空间扩展:对每个维度差值平方求和后开根号。
    • 曼哈顿距离(适用于高维数据,抗噪声):\(\text{距离} = |x_1-y_1| + |x_2-y_2| + ... + |x_d-y_d|\)
    • 余弦相似度(适用于文本、向量等,衡量方向相似性)。
  3. 筛选 K 个最近邻:根据距离从小到大排序,选取与新样本距离最近的 K 个训练样本(即 “K 个邻居”)。

  4. 投票决定类别:统计 K 个邻居的类别,出现次数最多的类别即为新样本的预测类别(“少数服从多数”)。

四.KNN算法实现

1.安装scikit-learn库

KNN算法已封装于Scikit-learn(SKL)库中,无需手动实现距离公式和训练过程,所以我们要先安装好scikit-learn库(可以自己指定版本号),命令如下:

 pip install scikit-learn==1.0.2 -i Https://pypi.tuna.tsinghua.edu.cn/simple 

2.导入knn用于分类的类KNeighborsClassifier

from sklearn.neighbors import KNeighborsClassifier

3.设置KNeighborsClassifier的相关参数

源码如下:

class KNeighborsClassifier(KNeighborsMixin, ClassifierMixin, NeighborsBase):"""Classifier implementing the k-nearest neighbors vote.def __init__(self,n_neighbors=5,*,weights="uniform",algorithm="auto",leaf_size=30,p=2,metric="minkowski",metric_params=None,n_jobs=None,):super().__init__(n_neighbors=n_neighbors,algorithm=algorithm,leaf_size=leaf_size,metric=metric,p=p,metric_params=metric_params,n_jobs=n_jobs,)self.weights = weights
  • 关键参数:
    • n_neighborsK值,默认5):控制邻居数量。
    • weights(权重):可调整不同类别的优先级(如偏好红色数据)。
    • algorithm(计算算法):优化排序速度(如暴力搜索、KD树、球树或自动选择)。

4.训练模型

KNeighborsClassifier中已经封装过fit()方法,所以我们只用调用方法即可完成训练过程

knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(train_x,train_y)

train_x为训练集中的特征数据

train_y为根据特征而得到的分类类别数据

5.进行预测

可以直接通过KNeighborsClassifier中的predict()方法完成对数据的预测

train_predicted = knn.predict(要预测的数据)

6.计算准确率

可以直接通过KNeighborsClassifier中的score()方法完成对预测数据结果的准确率的计算

train_score = knn.score(train_x,train_y)

五.鸢尾花案例实现

1.准备训练集和测试集数据

鸢尾花训练数据.xlsx 如下:

鸢尾花测试数据.xlsx 如下:

2.读取数据

train_data=pd.read_excel('鸢尾花训练数据.xlsx')
test_data=pd.read_excel('鸢尾花测试数据.xlsx')

3.划分训练集

将训练集的特征列划分到train_x数据,分类类型则划分到train_y中

train_x=train_data[['萼片长(cm)','萼片宽(cm)','花瓣长(cm)','花瓣宽(cm)']]
train_y=train_data['类型_num']

4.调用KNN,完成训练过程

knn=KNeighborsClassifier(n_neighbors=5)
knn.fit(train_x,train_y)

5.用训练集中的数据预测,并计算结果的正确率

train_predicted = knn.predict(train_x)
train_score = knn.score(train_x,train_y)
print('train_score={}'.format(train_score))train_score=0.9696969696969697

可以看到,即使使用训练集中的数据进行预测,也达不到百分百的正确率

6.划分测试集

test_x=test_data[['萼片长(cm)','萼片宽(cm)','花瓣长(cm)','花瓣宽(cm)']]
test_y=test_data['类型_num']

7.将测试集中的数据进行预测,计算准确率

test_predicted=knn.predict(test_x)
test_score = knn.score(test_x,test_y)
print('test_score={}'.format(test_score))test_score=1.0

由于测试集中数据比较少,所以正确率达到了百分百

8.完整代码呈现

from  sklearn.neighbors import KNeighborsClassifier
import pandas as pd
train_data=pd.read_excel('鸢尾花训练数据.xlsx')
test_data=pd.read_excel('鸢尾花测试数据.xlsx')train_x=train_data[['萼片长(cm)','萼片宽(cm)','花瓣长(cm)','花瓣宽(cm)']]
train_y=train_data['类型_num']knn=KNeighborsClassifier(n_neighbors=5)
knn.fit(train_x,train_y)
train_predicted = knn.predict(train_x)
train_score = knn.score(train_x,train_y)
print('train_score={}'.format(train_score))test_x=test_data[['萼片长(cm)','萼片宽(cm)','花瓣长(cm)','花瓣宽(cm)']]
test_y=test_data['类型_num']
test_predicted=knn.predict(test_x)
test_score = knn.score(test_x,test_y)
print('test_score={}'.format(test_score))

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强化学习(第三课第三周)

文章目录强化学习(第三课第三周)一、以火星探测器为例说明强化学习的形式化表示二、强化学习中的回报三、强化学习算法的目标(一)马尔可夫决策过程(二)状态动作价值函数(四)使用Bell…

星痕共鸣数据分析2

今天实验内容是攻击力部分 1.思路 由于昨天数据分析出了一个函数 这个函数可以把奇怪的字节变成正常的数字 int parse_varint(unsigned const char* data, int count) {int value 0;int shift 0;for (int i 0; i < count; i) {unsigned char byte data[i];value | ((byt…

强化学习新发现:仅需更新5%参数的稀疏子网络可达到全模型更新效果

摘要&#xff1a;强化学习&#xff08;RL&#xff09;已成为大语言模型&#xff08;LLM&#xff09;在完成预训练后与复杂任务及人类偏好对齐的关键步骤。人们通常认为&#xff0c;要通过 RL 微调获得新的行为&#xff0c;就必须更新模型的大部分参数。本研究对这一假设提出了挑…

electron 使用记录

目录 代理设置以打包成功 参考文档 代理设置以打包成功 参考文档 使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用 |电子 --- Build cross-platform desktop apps with JavaScript, HTML, and CSS | Electron

Spring boot Grafana优秀的监控模板

JVM (Micrometer) | Grafana Labs 1 SLS JVM监控大盘 | Grafana Labs Spring Boot 2.1 Statistics | Grafana Labs springboot granfana 监控接口指定接口响应的 在Spring Boot应用中&#xff0c;使用Grafana进行监控通常涉及以下几个步骤&#xff1a; 设置Prometheus作…

LeetCode11~30题解

LeetCode11.盛水最多的容器&#xff1a; 题目描述&#xff1a; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器…

计算机结构-逻辑门、存储器、内存、加法器、锁存器、程序计数器

逻辑门 逻辑门简单地理解即通过特定的条件实现与、或、非、异或等相关逻辑二极管 这些最基础的逻辑门都是通过电路元器件进行搭建的&#xff0c;即半导体材料搭建的二极管二极管有个特点&#xff0c;一定条件下才可以导通&#xff0c;即得接对正负极&#xff0c;具体的原理可以…

连锁店铺巡查二维码的应用

在连锁店铺的运营管理中&#xff0c;巡查工作是保障各门店规范运作、提升服务质量的关键环节。巡查二维码的出现&#xff0c;为这一环节带来了高效、便捷且规范的解决方案&#xff0c;其应用场景广泛&#xff0c;优势显著。在如今的繁杂且效果参差不齐电子二维码市场中&#xf…

各种前端框架界面

前端技术更新迭代很快&#xff0c;已经有不少新的前端框架问世&#xff0c;而且像geeker-admin风格的界面设计也挺不错的。 今天去面试了前端开发岗位&#xff0c;感觉希望不大。毕竟中间空了一段时间没接触&#xff0c;得赶紧把新的知识点补上&#xff0c;这样哪怕是居家办公也…

DApp 开发者 学习路线和规划

目录 🚀 一、学习路线图 阶段 1:基础知识(1~2 周) 阶段 2:智能合约开发(3~4 周) 阶段 3:前端与区块链交互(2~3 周) 阶段 4:进阶与生态系统(持续学习) 📅 二、学习规划建议(3~4 个月) 🧰 三、工具推荐 💡 四、附加建议 🚀 一、学习路线图 阶段 …

数据结构 二叉树(3)---层序遍历二叉树

在上篇文章中我们主要讲了关于实现二叉树的内容&#xff0c;包括遍历二叉树&#xff0c;以及统计二叉树等内容。而在这篇文章中我们将详细讲解一下利用队列的知识实现层序遍历二叉树。那么层序遍历是什么&#xff1f;以及利用队列遍历二叉树又是怎么遍历的&#xff1f;下面让我…

【橘子分布式】gRPC(番外篇-拦截器)

一、简介 我们之前其实已经完成了关于grpc的一些基础用法&#xff0c;实际上还有一些比较相对进阶的使用方式。比如&#xff1a; 拦截器&#xff1a;包括客户端和服务端的拦截器&#xff0c;进而在每一端都可以划分为流式的拦截器和非流式的拦截器。和以前我们在spring web中的…

深入探索嵌入式仿真教学:以酒精测试仪实验为例的高效学习实践

引言&#xff1a;嵌入式技术普及下的教学革新 嵌入式系统作为现代科技的核心驱动力&#xff0c;其教学重要性日益凸显。然而&#xff0c;传统硬件实验面临设备成本高、维护难、时空受限等挑战。如何突破这些瓶颈&#xff0c;实现高效、灵活、专业的嵌入式教学&#xff1f;本文将…

三种深度学习模型(GRU、CNN-GRU、贝叶斯优化的CNN-GRU/BO-CNN-GRU)对北半球光伏数据进行时间序列预测

代码功能 该代码实现了一个光伏发电量预测系统&#xff0c;采用三种深度学习模型&#xff08;GRU、CNN-GRU、贝叶斯优化的CNN-GRU/BO-CNN-GRU&#xff09;对北半球光伏数据进行时间序列预测对北半球光伏数据进行时间序列预测&#xff0c;并通过多维度评估指标和可视化对比模型性…

PostgreSQL对象权限管理

本文记述在postgreSQL中对用户/角色操作库、模式、表、序列、函数、存储过程的权限管理针对数据库的授权 授权&#xff1a;grant 权限 on database 数据库 to 用户/角色; 撤权&#xff1a;revoke 权限 on database 数据库 from 用户/角色; 针对模式的授权 授权&#xff1a;gran…

Wordpress主题配置

一、下载主题 主题下载地址&#xff1a;https://www.iztwp.com/tag/blog-theme 二、主题安装 三、上传主题安装即可 四、安装完成启动主题

lock 和 synchronized 区别

1. 引言 在多线程编程中&#xff0c;我们经常需要确保某些代码在同一时刻只由一个线程执行。这种机制通常叫做“互斥锁”或“同步”。Java 提供了两种主要的同步机制&#xff1a;synchronized 关键字和 Lock 接口。尽管它们的作用相似&#xff0c;都用于实现线程的同步&#xf…

Tkinter - Python图形界面开发指南

作者&#xff1a;唐叔在学习 专栏&#xff1a;唐叔学python 标签&#xff1a;Python GUI编程 Tkinter教程 图形界面开发 Python实战 界面设计 事件监听 Python入门 唐叔Python 编程学习 软件开发 文章目录一、Tkinter是什么&#xff1f;为什么选择它&#xff1f;二、Tkinter基础…

Java基础day15

目录 一、Java集合简介 1.什么是集合&#xff1f; 2.集合接口 3.小结 二、List集合 1.List集合简介 三、ArrayList容器类 1.初始化 1.1无参初始化 1.2有参初始化 2.数据结构 3.常用方法 3.1增加元素 3.2查找元素 3.3 修改元素 3.4 删除元素 3.5 其他方法 4.扩…

React Three Fiber 实现昼夜循环:从光照过渡到日月联动的技术拆解

在 3D 场景中用 React Three Fiber 实现自然的昼夜循环&#xff0c;核心难点在于光照的平滑过渡、日月运动的联动逻辑、昼夜状态下的光影差异处理&#xff0c;以及性能与视觉效果的平衡。本文以一个 ReactThree.js 的实现为例&#xff0c;详细解析如何通过三角函数计算日月位置…