回归模型 第5篇:knn回归

2023-11-11

基于最邻近算法的分类,本质上是对离散的数据标签进行预测,实际上,最邻近算法也可以用于对连续的数据标签进行预测,这种方法叫做基于最邻近数据的回归,预测的值(即数据的标签)是连续值,通过计算数据点最临近数据点平均值而获得预测值。

一,sklearn的knn回归

scikit-learn实现了两个不同的最邻近回归模型:

  • KNeighborsRegressor:根据每个查询点的最邻近的k个数据点的均值作为预测值,其中,k是用户指定的整数。
  • RadiusNeighborsRegressor:基于查询点的固定半径内的数据点的均值作为预测值,其中r是用户指定的浮点值。

回归模拟器的定义如下,该定义只列出最重要的参数,详细参数请参考sicikit-learn 官网:

sklearn.neighbors.KNeighborsRegressor(n_neighbors=5, weights='uniform', algorithm='auto', metric='minkowski',...)
sklearn.neighbors.RadiusNeighborsRegressor(radius=1.0, weights='uniform', algorithm='auto', metric='minkowski',...)

参数注释:

  • radius:寻找最邻近数据点的半径
  • n_neighbors:最邻近的邻居数量
  • algorithm:寻找最邻近的数据点的算法,有效值是['auto','ball_tree','kd_tree','brute']
  • metric:计算距离的度量,详细信息请查看:DistanceMetric 
  • weights:权重,默认值weights ='uniform',为每个邻居分配统一的权重。 weights ='distance'分配的权重与距查询点的距离成反比。用于也可以提供定义函数来计算权重。在某些情况下,最好对邻居加权,以使较近的邻居对拟合的贡献更大,这可以通过weights关键字完成。

最基本的最邻近回归使用统一的权重,也就是说,在特定范围中的每个数据点对查询点的分类(回归)的作用是相同的。在某些情况下,对权重点进行加权可能会比较有利,以使邻近的点比远离的点对回归的贡献更大,这可以通过weights关键字完成。默认值weights ='uniform',为所有点分配相等的权重。 weights ='distance'分配的权重与距查询点的距离成反比。

二,基于最邻近的数据点的数量来预测

当使用knn计算某个数据点的预测值时,模型会从训练数据集中选择离该数据点最近的k个数据点,并且把它们的y值取均值,把该均值作为新数据点的预测值:

from sklearn.neighbors import KNeighborsRegressor

对于knn分类,使用score方法评估模型,对于回归的问题,返回的是R^2分数,R^2分数也叫做决定系数,是回归模型预测的优度度量,位于0到1之间,R^2等于1对应完美预测,R^2等于0对应于常数模型,即总是预测训练集响应(y_train)的均值。

from sklearn.datasets import make_regression
from sklearn.neighbors import KNeighborsRegressor
from sklearn.model_selection import train_test_split

kng=KNeighborsRegressor(n_neighbors=5)

x_data,y_data=make_regression(n_features=1,n_informative=1,noise=50,random_state=1)
x_train,x_test,y_train,y_test=train_test_split(x_data,y_data,random_state=1)

kng.fit(x_train,y_train)
prediction=kng.predict(x_test)

kng_test_score=kng.score(x_test,y_test)
kng_train_score=kng.score(x_train,y_train)
print('test data score:{:.2f}'.format(kng_test_score))

三,knn回归模型的优缺点

knn回归有两个重要的参数:最邻近数据点的数量k,数据点之间距离的度量方法。

在实践中,通常使用较小的k值,在knn分类中通常把k值设置为奇数,便于找到多数邻居的标签。默认的距离度量是欧式距离,它在多数情况下的效果都很好,除此之外,还有曼哈顿距离等,详细信息,请阅读《Scipy 学习第3篇:数字向量的距离计算》。

在确定knn回归或knn分类的k值时,可以通过折叠交叉验证来寻找最佳的k值,示例代码如下:

from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import GridSearchCV  #通过网络方式来获取参数

# 导入iris数据集
iris2=datasets.load_iris()
X2=iris2.data
y2=iris2.target
print(X2.shape,y2.shape)

# 设置需要搜索的K值,'n_neightbors'是sklearn中KNN的参数
parameters={'n_neightbors':[1,3,5,7,9,11,13,15]}
knn=KNeighborsClassifier()#注意:这里不用指定参数

# 通过GridSearchCV来搜索最好的K值。这个模块的内部其实就是对每一个K值进行评估
clf=GridSearchCV(knn,parameters,cv=5)  #5折
clf.fit(X2,y2)

# 输出最好的参数以及对应的准确率
print("最终最佳准确率:%.2f"%clf.best_score_,"最终的最佳K值",clf.best_params_)

knn回归模型的优点之一是模型很容易理解,通常不需要过多的调参就可以得到不错的性能,并且构建模型的速度通常很快。但是使用knn算法时,对数据进行预处理是很重要的,对特征很多的数据集、对于大多数特征值都为0的数据集,效果往往不是很好。

虽然k邻近算法很容易理解,但是由于预测速度慢,且不能处理具有很多特征的数据集,所以,在实践中往往不会用到。

参考文档:

sklearn.neighbors.KNeighborsRegressor

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

回归模型 第5篇:knn回归 的相关文章

  • Scapy:如何将新层(802.1q)插入现有数据包?

    我有一个数据包转储 想要将 VLAN 标记 802 1q 标头 注入到数据包中 怎么做 为了找到答案 我查看了Scapy 插入新层和记录问题 https stackoverflow com q 17259592 1381638 这确实很有帮
  • 在 Android 上解析 RSS

    我有几个 RSS 源需要为我的应用程序进行解析 我按照这里的优秀教程进行操作 http w2davids wordpress com android rssatom feeds parsing with rome http w2davids
  • Spring 在 AuthenticationSuccessHandler 中自动装配会话范围 bean 不起作用

    我正在使用 spring security 我想初始化一个对象User在用户成功登录后的会话中 安全配置如下 Configuration EnableWebSecurity PropertySource classpath configs
  • java代码的等效vb代码

    谁能告诉我这段Java代码到底做了什么 SecureRandom random SecureRandom getInstance SHA1PRNG byte bytes new byte 20 synchronized random ran
  • 公交车公共交通算法

    我正在开发一个可以查找公交路线的离线 C 应用程序 我可以提取时间表 巴士 路线数据 我正在寻找适用于基本数据的最简单的解决方案 可以使用什么算法来查找从巴士站 A 到巴士站 B 的路线 是否有适用于 C Java 的开源解决方案 数据库的
  • 使用 Python 导入包含文本和数字数据的文件

    I have a txt file which has text data and numerical data The first two rows of the file have essential information in te
  • 在 Python 中将嵌套字典位置作为参数传递

    如果我有一个嵌套字典 我可以通过索引来获取键 如下所示 gt gt gt d a b c gt gt gt d a b c 我可以将该索引作为函数参数传递吗 def get nested value d path a b return d
  • 使用 conda 安装额外功能

    With pip我们可以使用方括号安装子包 例如与阿帕奇气流 https pythonhosted org airflow installation html pip install airflow all 有类似的东西吗conda或者我必
  • 选择活动时运行时崩溃

    首先我想说我几乎没有 Android 经验 这是我在 Android 中的第一个项目 而且我的老师不太擅长教学 所以我对任何过度的无知表示歉意 在进一步讨论之前先解释一下 我的应用程序的目标本质上是能够记录您在某些活动上花费了多少时间 记录
  • 如何列出所有已加载的 Spring bean 定义文件

    在大型企业系统中 并不总是清楚在 ApplicationContext 构建期间导入了哪些文件 有没有办法列出过程中加载的所有文件 我知道如何列出加载的属性文件 但不知道导入的 bean 文件 更新示例 文件 1 applicationCo
  • 列表中的“u”是什么意思?

    这是我第一次遇到这种情况 刚刚打印了一个列表 每个元素似乎都有一个u在它前面 即 u hello u hi u hey 它是什么意思 为什么列表的每个元素前面都会有这个 由于我不知道这种情况有多常见 如果您想了解我是如何遇到它的 我会很乐意
  • 找不到满足版本限制的“com.google.code.findbugs:jsr305”版本

    当生成签名的 APK 进行发布时 我收到此错误消息 Cannot find a version of com google code findbugs jsr305 that satisfies the version constraint
  • SQL准备语句如何通过多个可能的菜单选择进行选择?

    所以我有 4 个菜单选择 产品 位置 课程类型和类别 所有这些都可以为空 使用 JSF 编程 但这应该与这个问题无关 因为它是一个 SQL 问题 菜单选择将向托管 bean 发送用户选择的变量 并使用准备好的语句使用用户选择的菜单中的信息
  • datetime strftime 不输出正确的时间戳

    下列 gt gt gt from dateutil parser import parse gt gt gt parse 2013 07 02 00 00 00 0000 datetime datetime 2013 7 2 0 0 tzi
  • python:xml.etree.ElementTree,删除“命名空间”

    我喜欢 ElementTree 解析 xml 的方式 特别是 Xpath 功能 我有一个带有嵌套标签的应用程序的 xml 输出 我想按名称访问此标签而不指定名称空间 这可能吗 例如 root findall molpro job 代替 ro
  • 访问影子 DOM 中的元素

    是否有可能查找 Shadow DOM 中的元素与蟒蛇硒 示例用例 我有这个input with type date
  • 具有行业级约束的 SciPy 投资组合优化

    尝试在这里优化投资组合权重分配 通过限制风险来最大化我的回报函数 我可以毫无问题地通过简单的约束 所有权重之和等于 1 找到产生我的回报函数的优化权重 并做出另一个约束 即我的总风险低于目标风险 我的问题是 如何为每个组添加行业权重界限 我
  • scikit-learn kmeans 聚类的初始质心

    如果我已经有一个可以作为初始质心的 numpy 数组 我该如何正确初始化 kmeans 算法 我正在使用 scikit learn Kmeans 类 这个帖子 具有选定初始中心的 k 均值 https stackoverflow com q
  • AES 在 cryptojs 中加密并在 python Crypto.Cipher 中解密

    使用 js CryptoJS 加密并使用 python crypto Cipher 解密时出现问题 这是我在js中的实现 附加 iv 与加密消息并使用 base64 进行编码
  • 应用服务器如何注入私有字段?

    我看到这个问题 注入私有 包或公共字段或提供 setter https stackoverflow com questions 2021716 inject into private package or public field or p

随机推荐

  • Python——发送邮件

    一 smtplib模块 主要通过SMTP类与邮件系统进行交互 使用方法如下 1 实例化一个SMTP对象 s smtplib SMTP 邮件服务地址 端口号 s smtplib SMTP SSL 邮件服务地址 端口号 2 登陆邮件 权限验证
  • Linux:全志H3图像codec使用笔记

    1 前言 限于作者能力水平 本文可能存在谬误 因此而给读者带来的损失 作者不做任何承诺 2 图像 codec 概述 图像编解码器 codec 包含 Encoder 和 Decoder 两部分功能 我们用下列分别说明 Encoder 和 De
  • 解决window平台下cocos creator 构建发布面板打开后无法显示问题

    项目场景 creator构建发布界面 问题描述 window平台下cocos creator 构建发布面板打开后无法显示 原因分析 项目的配置文件目录setting和local目录内容混乱可能会导致该问题 这时候后重装creator也是没用
  • 设计模式全解析(一)——带你搞懂设计模式

    各位朋友 一提到 设计模式 四个字 是不是有一种若隐若现的朦胧感 我知道设计模式 我知道单例 工厂 观察者 策略 但是设计模式到底是什么呢 解决了什么问题呢 接下来我会一步一步解析一下设计模式 以及各个不同的设计模式到底要做的是什么 我们先
  • Octave的一些基本操作和语法,快速上手Octave,用实例解释

    基本语法 1 直接计算 gt gt 1 2 ans 3 2 变量计算 在最后加上分号 可以不输出结果 gt gt a 1 gt gt b 2 gt gt a b ans 3 3 矩阵赋值 gt gt a 1 2 3 4 5 6 a 1 2
  • Java实现五子棋小游戏(附源码)

    一 效果展示 二 游戏介绍 五子棋 是一种两人对弈的纯策略型棋类游戏 棋具与围棋通用 是起源于中国古代的传统黑白棋种之一 发展于日本 流行于欧美 容易上手 老少皆宜 而且趣味横生 引人入胜 不仅能增强思维能力 提高智力 而且富含哲理 有助于
  • [ Linux ] 静态代码检测工具 —— Cppcheck工具

    文章目录 cppcheck工具介绍 Linux安装 linux使用示例 在makefile中添加cppcheck工具实例 cppcheck工具介绍 什么是静态代码检查 静态代码检查是指在不运行程序的条件下 进行程序分析的方法 有些程序分析需
  • Git 分支管理策略汇总

    原文链接 Git 分支管理策略 最近 团队新入职了一些小伙伴 在开发过程中 他们问我 Git 分支是如何管理的 以及应该怎么提交代码 我大概说了一些规则 但仔细想来 好像也并没有形成一个清晰规范的流程 所以查了一些资料 总结出下面这篇文章
  • 企业如何制定实施MES管理系统的预算方案

    随着制造业的不断发展 MES生产管理系统逐渐成为制造企业提高生产效率 优化资源利用和提升质量水平的重要工具 制定实施MES管理系统的预算方案是企业在进行MES选型和实施时必须考虑的问题 本文将介绍制定实施MES管理系统预算方案的关键步骤 包
  • Nginx常用功能(配置静态资源)

    Nginx配置静态资源 背景 现场业务系统域名均由nginx转发 需求 通过nginx设置静态访问页面 操作如下 1 将静态文件存放在 opt nginx html 下 2 修改nginx conf文件 引用此静态文件 server lis
  • python爬虫爬取使用Ajax请求的网站数据解析——以梅老板微博为例(m.weibo.cn)

    文章目录 前言 什么是Ajax Ajax基本原理 发送请求 解析内容 渲染网页 Ajax分析方法 查看请求 过滤请求 Ajax结果提取 1 分析请求 since id解析 2 分析响应 3 爬取微博数据 后记 前言 前面学习了使用正则表达式
  • 客户服务器显示例子,WebSocket实现数据库更新前台实时显示(示例代码)

    通过一个小实例来实现数据库更新后 推送消息给前台 让前台进行相应操作 需求 数据库更新之后服务器推送消息给前台 让前台做操作 数据库的数据不是由服务器写入的 实现的话说到底都是用轮询 因为数据库的数据不是通过后台插入更新的 所以无论用什么办
  • [解决方法]PermissionError: [Errno 13] Permission denied:

    写Python工程代码 花了我5个小时排错 最后发现是写入文件的时候 权限不够 我做个测试 向C盘根目录写入文件 a C 日志 test txt with open a w encoding utf 8 as file object fil
  • VScode+Keil搭建STM32开发环境

    一 下载MinGW VScode 这是一款编译器 Visual Studio Code中不自带编译器 在没有安装visual studio的前提下 如果没有的话会报错 链接 https pan baidu com s 1oOT9wzFcSS
  • 根据经纬度计算距离的公式

    private const double EARTH RADIUS 6378 137 private static double rad double d return d Math PI 180 0 public static doubl
  • 百度AI平台人脸动漫化python测试

    文章目录 获取百度API 获取token 使用 获取百度API 百度转换风格网址 获取API Key AK 和Secret Key SK 获取token import requests import base64 client id 为官网
  • ACE日志系统

    ACE中日志系统 一 简介 以前曾介绍过一个开源日志系统log4cplus ACE也有自己的Logging Facility 与log4cplus相似 ACE日志系统也具有线程安全 灵活 分级显示等特点 可以面向程序调试 运行 测试 和维护
  • 图解 HTTP 常见问题

    一 HTTP 基本概念HTTP 是什么 描述一下HTTP 是超文本传输协议 也就是HyperText Transfer Protocol 能否详细解释 超文本传输协议 HTTP的名字 超文本协议传输 它可以拆成三个部分 超文本 传输 协议
  • shell tr 命令

    tr是translate的简写 亦即翻译 但是遗憾的是 它不能翻译句子 只能翻译单个字符 1 tr的工作原理是什么 先记住一点 tr命令不接受指定的文件参数 而只是对标准输入进行翻译 tr的命令格式是tr SET1 SET2 凡是在SET1
  • 回归模型 第5篇:knn回归

    基于最邻近算法的分类 本质上是对离散的数据标签进行预测 实际上 最邻近算法也可以用于对连续的数据标签进行预测 这种方法叫做基于最邻近数据的回归 预测的值 即数据的标签 是连续值 通过计算数据点最临近数据点平均值而获得预测值 一 sklear