kNN做回归任务

2023-10-27

kNN回归

kNN常用作分类任务,但是也可以做回归任务。

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


代码

此次代码演示使用数据库中的鸢尾花数据集,通过前三个的特征值,预测第四个特征值。

根据前三个特征找出新数据的k个最近邻,将这些邻居的第四个特征的平均值赋给该数据,就可以得到该数据对应第四个特征的值。

分为两个部分讲解,数据处理部分相同

# 导包
from numpy import *
import numpy as np
import pandas as pd
from sklearn import datasets
import matplotlib as mpl
import matplotlib.pyplot as plt

# 防止画图出现中文乱码
mpl.rcParams['font.family'] = 'simHei'
mpl.rcParams['axes.unicode_minus'] = False

# 加载数据
iris = datasets.load_iris()
data = pd.DataFrame(iris.data)
data = data.sample(len(data),random_state=20)
#print(len(data)) # 150

train_x = np.asarray(data.iloc[:120,:-1])
train_y = np.asarray(data.iloc[:120,-1])

test_x = data.iloc[120:,:-1]
test_y = data.iloc[120:,-1]

#print(len(test_x))

plt.figure(figsize=(10,10))
plt.plot(test_y.values,'go--',label='真实值')
plt.title('kNN连续值预测')
plt.xlabel('节点序号')
plt.ylabel('花瓣宽度')
plt.legend()
plt.show()

一、手写kNN回归

# 手写kNN回归代码

def predict(test_X,train_X,train_y,k):
    result = []
    dataSetSize = train_X.shape[0]#查看矩阵的维度
    test_X = np.asarray(test_X)
    for x in test_X:
        '''
        diffMat = tile(x,(dataSetSize,1)) - train_X
        #tile(数组,(在行上重复次数,在列上重复次数))
        sqDiffMat = diffMat**2
        sqDistances = sqDiffMat.sum(axis=1)
        #sum默认axis=0,是普通的相加,axis=1是将一个矩阵的每一行向量相加
        distances = sqDistances**0.5
        '''
        distances = np.sqrt(np.sum((x-train_X)**2,axis=1))
        sortedDistIndicies = distances.argsort()
        index = sortedDistIndicies[:k]
        #sort函数按照数组值从小到大排序
        #argsort函数返回的是数组值从小到大的索引值
        result.append(np.mean(train_y[index]))
    
    return np.asarray(result)

# 进行预测
result = predict(test_x,train_x,train_y,4)
print(result)

# 第四个属性的真实值
plt.figure(figsize=(10,10))
plt.plot(result,'ro--',label='预测值')
plt.plot(test_y.values,'go--',label='真实值')
plt.title('kNN连续值预测')
plt.xlabel('节点序号')
plt.ylabel('花瓣宽度')
plt.legend()
plt.show()

二、调用sklearn库函数

sklearn库中实现kNN回归的模型有两个:

KNeighborsRegressor(n_neighbors):根据每个查询点的最近邻的k个数据点的均值作为预测值。

RadiusNeighborsRegressor(radius):基于查询点的固定半径内的数据点的均值作为预测值,radius一般指定浮点数。

from sklearn.neighbors import KNeighborsRegressor

kng = KNeighborsRegressor(n_neighbors=4)

kng.fit(train_x,train_y)
prediction = kng.predict(test_x)

plt.figure(figsize=(10,10))
plt.plot(result,'ro--',label='预测值1')
plt.plot(prediction,'bo--',label='预测值2')
plt.plot(test_y.values,'go--',label='真实值')
plt.title('kNN连续值预测')
plt.xlabel('节点序号')
plt.ylabel('花瓣宽度')
plt.legend()
plt.show()

 

from sklearn.neighbors import RadiusNeighborsRegressor

kng1 = RadiusNeighborsRegressor(radius=1.0)
kng1.fit(train_x,train_y)
prediction1 = kng1.predict(test_x)

plt.figure(figsize=(10,10))
plt.plot(result,'ro--',label='预测值1')
plt.plot(prediction,'bo--',label='预测值2')
plt.plot(prediction1,'yo--',label='预测值3')
plt.plot(test_y.values,'go--',label='真实值')
plt.title('kNN连续值预测')
plt.xlabel('节点序号')
plt.ylabel('花瓣宽度')
plt.legend()
plt.show()


总结

kNN不仅可以用于分类算法,还可以用于回归,这节以后可以认真思考分类和回归的区别。

参考 https://blog.csdn.net/xzy53719/article/details/83185253

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

kNN做回归任务 的相关文章

  • ElasticSearch学习

    连接2 https mbd baidu com ug share mbox 4a83aa9e65 share product smartapp tk c708d7370bedbd0d7beded8c305e61c4 share url ht

随机推荐

  • 【JAVA集合框架相关接口和常见的实现类】

    文章目录 一 什么是集合框架 1 1类和接口总览 1 2Java 集合框架的优点及作用 二 接口 interfaces 2 1基本关系说明 2 2Collection接口 重点 2 2 1Collection 接口说明 2 2 2Colle
  • 测试cpu是否有问题的软件,cpu测试软件

    1 CPU Z CPU Z是一款家喻户晓的CPU检测软件 是检测CPU使用程度最高的一款软件 除了使用Intel或AMD自己的检测软件之外 我们平时使用最多的此类软件就数它了 它支持的CPU种类相当全面 软件的启动速度及检测速度都很快 另外
  • excel填充序列_Excel中快速填充序号的3种技巧一次性都教你

    在Excel中填充序号可能是最基础的操作 但是今天我们要分享的并不是简单的1 2 3的填充 而是可以让你录入速度快10倍的excel技巧 其中一些操作90 的人都不知道 一 按数字顺序快速填充 当我们在Excel中输入1 2 3这种顺序的序
  • 【yarn】yarn Task 状态机正常执行流程

    1 概述 上一篇文章 Yarn Yarn Service端如何处理客户端提交的任务 在上一篇文章中 我们知道服务器接收到客户端提交的任务之后 会启动多个状态机进行联合操作 最终来解决任务提交之后的全流程 多个状态机合作完成任务 然后我们看了
  • 若依框架 路由带参数跳转有缓存的解决方法

    若依框架的话 直接打开src api router index js路由配置项 path storage component Layout hidden true redirect noredirect children path orde
  • 关于SpringCloudAlibaba,看阿里这篇笔记真香

    Spring Cloud Alibaba 是国产的微服务开发一站式解决方案 与原有 Spring Cloud 兼容的同时对微服务生态进行扩展 通过添加少量的配置注解 便可实现更符合国情的微服务架构 相比 Spring Cloud 官方标准
  • C++中"endl"和"\n"的区别

    换行符 endl 该符号与 n 的区别 endl 除了具备 n 的功能外 还调用输出流flush函数 刷新缓冲区 让数据直接写入文件或者屏幕上 这两种都可以用的 不过如果需要立即显示 比如输入到显示器的场合 最好用 endl 如果不需要立即
  • 《蓝桥杯真题》:2020年单片机省赛(第十一 / 11届第一场)

    2020年单片机省赛 有关题目 实现代码 main c 写法一 写法二 iic h iic c 有关题目 实现代码 注意 代码实现方面 从eeprom读出数据的过程中要注意不跟和从pcf8591读取数据一样 不需要rd eeprom 0x0
  • go之构建简单的web服务器3.0

    引入etcd模块 实现对etcd的增删改 目录架构如下 etcd go代码 package storage import context time fmt errors clientv3 go etcd io etcd client v3
  • C与PHP的联系与区别

    联系 1 PHP是C语言实现的一个应用软件 PHP的程序执行 最终也是调用C函数 很多时候 一些要优化性能的工作可以通过对PHP进行C扩展来实现 区别 0 PHP是面向对象语言 C是面向过程的函数过程式语言 1 PHP是弱类型语言 使用变量
  • 【Inno Setup】Inno Setup覆盖安装前执行卸载、获取原安装路径

    Inno Setup Inno Setup覆盖安装前执行卸载 获取原安装路径 分享下目前用到的一个简单的 Inno Setup 安装包制作脚本 主要功能有3个 安装前检测是否已安装 如果是覆盖安装则提示是否先进行卸载 程序卸载时不会自动卸载
  • Navicat Premium下sql导入中文乱码解决方案

    最近帮客户导数据比较多 用阿里云感觉不方便 Navicat Premium还是好用 但是数据稻城excel就会乱码 解决方案 1 看图说话 右键选中 2 三条SQL完成 mysql gt show databases Database in
  • 「Python 面试」第六次面试

    1 说一说 Redis 是什么 Redis 是一种 Key Value 的内存型 非关系型数据库 属于 NoSQL 的一种 Redis 的读写速度特别快 特别适合读写频繁的场景 Redis 支持主从复制 支持数据持久化 2 知道 Redis
  • MMD相关制作

    1 导入可转换mmd和vmd 动作数据 的插件 导入后unity中为 2 导入模型和vmd和音频 3 在unity中点击模型右边弹出的协议全打勾并应用 4 其中的mmd动作数据转换成功 点击人物把rig下第一个选择Huamoid点击应用 再
  • Vue中nextTick使用

    1 语法 this nextTick 回调函数 2 作用 在下一次Dom更新结束后执行其指定的回调函数 3 使用场景 当数据改变后 要基于更新后的新Dom进行某些操作时 要在nextTick所指定的回调函数中执行
  • 查询oracle所用用户,查询所有用户(oracle查询所有用户)

    查询所有用户 oracle查询所有用户 2020 07 24 11 10 05 共10个回答 1 查询oracle中所有用户信息select fromdba users 2 只查询用户和密码selectusername passwordfr
  • 数据结构---桶排序

    桶排序 第一步 第二步 第三步 第四步 JAVA实现 时间复杂度 空间复杂度总结 每一个桶 bucket 代表一个区间范围 里面可以承载一个或多个元素 第一步 就是创建这些桶 并确定每一个桶的区间范围 我们这里创建的桶数量等于原始数列的元素
  • python Matplotlib库基础

    目录 Matplotlib 数据可视化入门 Pyplot 绘图 自定义配置文件 rcParams 创建绘图窗口 绘制子图 绘制饼图 绘制折线图 绘制条形图 绘制散点图 绘制热点图 绘制箱型图 绘制分类图背景 显示绘图窗口 DataFrame
  • FATFS文件系统f_mkfs函数详解

    1 f mkfs参数 参数path 要挂载 卸载的逻辑驱动器号 使用设备根路径表示 参数opt 系统的格式 如图所示 若需要格式化为FAT32文件系统 则选择FM FAT32即可 若需要格式化为exFAT文件系统 则应该开将宏定义 defi
  • kNN做回归任务

    kNN回归 kNN常用作分类任务 但是也可以做回归任务 做法 使用kNN计算某个数据点的预测值时 模型会从训练数据集中选择离该数据点最近的k个数据点 并且把他们的y值取均值 把该均值作为新数据点的预测值 代码 此次代码演示使用数据库中的鸢尾