KNN回归算法

KNN回归算法就是给定数据集与结果,预测后面新出的数据集的结果。与前面KNN最邻近算法比较类似,最临近算法是求出预测数据集与训练数据集的每个点之间的距离,取前k个数据集的结果集,把结果集中占比大的结果作为预测结果。但是KNN回归算法,就是将前k个数据集的结果进行求平均作为预测的数据集。

图文演示

去除Id列和对应的Species列,将其他的4列特征集的前三列作为数据集,后一列作为结果集

案例演示

写KNN回归算法前的数据准备

# 导入jar包
import numpy as np
import pandas as pd
# 获取数据
data = pd.read_csv("iris.csv")
# 随机去前10条数据
data.sample(10)
# 删除两列
data.drop(["Id","Species"],axis=1,inplace=True)
data
# 去重,排除线性相关
data.drop_duplicates(inplace=True)
len(data)

KNN回归算法编写

class KNN:"""KNN 回归算法使用鸢尾花的四个特征进行训练    花瓣长度、宽度   花萼长度、宽度算法的目标是  根据鸢尾花的三个特征,预测最后一个特征的  度量 (预测值)"""def __init__(self,k):"""初始化方法k:int设置k的值,找出相邻数据的个数"""self.k = kdef fit(self,X,y):"""根据参数传递过来的X,对样本数据进行预测-------返回一个数组类型,预测结果"""self.X = np.asarray(X)self.y = np.asarray(y)result = []def predict(self,V):V = np.asarray(V)result = []for v in V:# 计算距离 测试几种某一个数据到训练集中没一个点的距离# 数学模型就是 计算空间中某一点(含 x,y,z坐标) 到空间中一个含有多个点的集合中()dis = np.sqrt(np.sum((v - self.X)**2,axis=1))index = dis.argsort()index = index[:self.k]# 计算训练的平均值作为预测结果#disavg = np.mean(self.y[index])# 将disavg的最大下标的数据添加到result数组中#result.append(disavg.argmax())result.append(np.mean(self.y[index]))return np.asarray(result)def predict2(self,V):""" 加权重 """V = np.asarray(V)result = []for v in V:# 计算距离 测试几种某一个数据到训练集中没一个点的距离# 数学模型就是 计算空间中某一点(含 x,y,z坐标) 到空间中一个含有多个点的集合中()dis = np.sqrt(np.sum((v - self.X)**2,axis=1))index = dis.argsort()index = index[:self.k]# 求k个距离的倒数和he = np.sum(1/(dis[index]+0.0001))# 计算权重(倒数/倒数和)weight = (1/(dis[index]+0.0001)) / he# 计算训练的平均值作为预测结果#disavg = np.mean(self.y[index])# 将disavg的最大下标的数据添加到result数组中#result.append(disavg.argmax())# 将前面K的计算结果(计算结果要与该店所占的权重比相乘)求均值后放入result数组中result.append(np.mean(self.y[index] * weight))return np.asarray(result)

准备KNN回归算法的训练数据集与预测数据集

X = data.sample(len(data),random_state=0)
len(X)
train_X = X.iloc[:120, :-1]
train_y = X.iloc[:120, -1]
test_X = X.iloc[120:, :-1]
test_y = X.iloc[120:, -1]# 创建KNN对象
knn = KNN(k = 3)
knn.fit(train_X,train_y)
result = knn.predict(test_X)
display(result)
display(test_y.values)
np.mean((result-test_y)**2)

进行折线图展示预测结果

import matplotlib as mpl
import matplotlib.pyplot as plt
# matplotlib 不支持中文,需要配置一下,设置一个中文字体
mpl.rcParams["font.family"] = "SimHei"
# 能够显示 中文 ,正常显示 "-"
mpl.rcParams["axes.unicode_minus"] = False
plt.figure(figsize=(10,10))
plt.plot(result,"ro-",label="预测值")
plt.plot(test_y.values,"bo--",label="真实值")
plt.title("KNN回归算法预测展示")
plt.xlabel("序号")
plt.ylabel("度量值")
plt.legend()
plt.show()

KNN回归算法【配有案例演示】相关推荐

  1. 机器学习 逻辑回归算法应用案例

    机器学习 逻辑回归算法应用案例 时间:2020.09.12 出处:https://www.kesci.com/home/project/5bfe39b3954d6e0010681cd1 注明:初学逻辑 ...

  2. 回归算法 经典案例 波士顿房价预测

    回归是统计学中最有力的工具之一.机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型.连续性而定义的.回归算法用于连续型分布预测,针对的是数值型的样本,使用回归,可以在 ...

  3. 机器学习-有监督学习-分类算法:k-近邻(KNN)算法【多分类】

    一.K-近邻算法简介 1.K-近邻算法(KNN)概念 k-近邻算法:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别. 相似的样本,同一 ...

  4. TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(matplotlib动态演示)—daiding

    TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(matplotlib动态演示)-daiding 目录 输出结果 代码设计 输出结果 代码设计 impo ...

  5. TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(matplotlib动态演示)

    TF之LSTM:利用基于顺序的LSTM回归算法对DIY数据集sin曲线(蓝虚)预测cos(红实)(matplotlib动态演示) 目录 输出结果 代码设计 输出结果 更新-- 代码设计 import ...

  6. KNN模型算法研究与案例分析

    KNN模型算法研究与案例分析( 白宁超 2018年8月29日15:39:13 ) 导读:机器学习算法中KNN属于比较简单的典型算法,既可以做聚类又可以做分类使用.本文通过一个模拟的实际案例进行讲解.整 ...

  7. 机器学习回归算法—岭回归及案例分析

    一.回归算法之岭回归 具有L2正则化的线性最小二乘法.岭回归是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息.降低精度为代价获 ...

  8. spark 逻辑回归算法案例_黄美灵的Spark ML机器学习实战

    原标题:黄美灵的Spark ML机器学习实战 本课程主要讲解基于Spark 2.x的ML,ML是相比MLlib更高级的机器学习库,相比MLlib更加高效.快捷:ML实现了常用的机器学习,如:聚类.分类 ...

  9. 几种常用回归算法——线性回归、支持向量机回归和KNN回归

    欢迎关注,敬请点赞! 台湾何时归--几种常用回归算法 线性回归LR(Linear Regression) 代码展示(加噪声的正旋函数,狭义线性回归) 支持向量机回归SVR(Support Vector ...

最新文章

  1. This Jenkins instance appears to be offline
  2. vue 点击弹出文字_vue事件点击穿透解决大法,看这篇文章就够了
  3. 统计学习方法的三要素
  4. raid重构原理_5个重构原理示例
  5. iOS正则表达式(亲测,持续更新)
  6. 实验五 类和对象-3
  7. 加分进了字节,MySQL真yyds!
  8. 1107班12月第5周 班级计划 为s1结业答辩做准备
  9. idea 启动tomcat 工程_如何在IDEA中创建web项目并且部署到Tomcat中
  10. 太阳时角、太阳高度角、天顶角、太阳方位角和剖面角计算的Python程序
  11. JavaScript使用手册
  12. 80端口和443端口的主要区别
  13. 读jquery 权威指南[3]-动画
  14. CF 285 E Positions in Permutations 题解
  15. 在c语言中pwm的作用,PWM调速的C语言程序编写(非常简单);
  16. 计算机用户登录界面壁纸,怎么修改电脑开机的登陆界面的壁纸
  17. 精挑细选100+技术公众号优秀文章
  18. 没有模拟器是JavaScript做不到的~
  19. Qt on Android : Hello World开发
  20. uniapp解决折叠屏手机适配问题

热门文章

  1. div 隐藏 ,表单内容清除
  2. 虚拟机网络设置---保姆级教学
  3. 【论文笔记】基于Control Barrier Function的二次规划(QP)控制
  4. vscode修改默认扩展和用户文件夹目录到D盘
  5. 当今大学生创业的冷门路线
  6. jquery 选择兄弟节点
  7. Linux入门之配置网桥
  8. iOS 2020APP提交审核加急流程
  9. Fel表达式使用过程中需要注意的问题
  10. iOS 虚拟机 和mac间互相拷贝