KNN用于回归问题

KNN不仅可以用于分类问题,也可以用回归问题。
主要算法思路就是:使用KNN计算某个数据点的预测值时,模型从训练数据集中选择离该数据点最近的k个数据点,并且把这些数据的y值取均值,把求出的这个均值作为新数据点的预测值。

实验数据集

data.csv:
数据是csv格式的,第一行是标签。

python代码实现

以下代码在dataTransform函数里改一下数据集,可以直接在pycharm中运行

import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
from sklearn.preprocessing import MinMaxScaler, StandardScaler# KNN核心算法
def classify(inX, dataSet, y_train, k):m, n = dataSet.shape  # shape(m, n)测试集中有m个个体和n个特征# 计算测试数据到每个点的欧式距离distances = []for i in range(m):sum = 0for j in range(n):sum += (inX[j] - dataSet[i][j]) ** 2distances.append(sum ** 0.5)sortDist = sorted(distances)  # 得到的是按照distance排序好的# 求k个最近的值的平均值sum = 0  for i in range(k):sum += y_train[distances.index(sortDist[i])]return sum/k# 用于归一化
x_scaler = MinMaxScaler(feature_range=(-1, 1))
y_scaler = MinMaxScaler(feature_range=(-1, 1))# 数据的读取和归一化
def dataTransform():df = pd.read_csv('data.csv', encoding='utf-8')x = df[['AVGACURATE', 'AVGSPEED', 'AVGHEADDIST', 'LIGHTVEH', 'LONGVEH', 'HUGEVEH', 'MIDVEH', 'MINIVEH']]y = df['AVGFLOW']y = y.values.reshape(-1, 1)  # 在sklearn中,所有的数据都应该是二维矩阵,所以需要使用.reshape(1,-1)进行转换# 对数据进行最大最小值归一化x = x_scaler.fit_transform(x)y = y_scaler.fit_transform(y)# 训练集x_train = x[0:1000, :]  # 二维y_train = y[0:1000]# 测试集x_test = x[1001:1292, :]y_test = y[1001:1292]return x_train, y_train, x_test, y_test# 测试算法
def Test():x_train, y_train, x_test, y_test = dataTransform()predict = []  # 记录预测值err = 0for i in range(len(x_test)):  # 对每一个测试数据predict.append(classify(x_test[i], x_train, y_train, 5))  # 返回平均值# print(predict[i], y_test[i])err += np.square(y_test[i]-predict[i])  # 计算误差和mse_err = err/len(x_test)print("the total mse error is: ", mse_err)predict = np.array(predict)  # 转成arraydraw(predict, y_test)# 画图函数
def draw(predict, y_test):# 先转化为实际值predict = predict.reshape(-1, 1)predict = y_scaler.inverse_transform(predict)y_test = y_scaler.inverse_transform(y_test)# 解决中文无法显示的问题plt.rcParams['font.sans-serif'] = [u'SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.figure(figsize=(8, 6))plt.plot(predict, label='pred')plt.plot(y_test, label='actual')plt.title('车流预测_测试集', )plt.legend()plt.show()if __name__ == '__main__':Test()

实验结果

Python实现---用KNN解决回归问题相关推荐

  1. Python实现K临近法(KNN)回归(村里最笨的小鸡都可以学会)阅读预计20分钟

    Python实现K临近法(KNN)回归(村里最笨的小鸡都可以学会)阅读预计20分钟 阅读预计20分钟 K临近法回归介绍 算法(可以跳过) 数据的导入与清洗 简单的例子 复杂的例子 数据以及核心代码 文 ...

  2. Python机器学习:SVM008SVM思想解决回归问题

    怎么定义拟合 比如线性,MSE值最小 SVM margin包含样本数量越多越好~ 取中间的直线为结果 引入超参数ε #SVM思想解决回归问题 import numpy as np import mat ...

  3. 【机器学习】KNN算法及其用KNN解决字体反爬

    KNN算法及其用KNN解决字体反爬 关于KNN算法 概要 简介 原理 KNN算法Python实现 KNN解决字体反爬 web-font介绍 例子 最后 关于KNN算法 概要 K最近邻(kNN,k-Ne ...

  4. 吴恩达机器学习作业Python实现(二):logistic回归

    吴恩达机器学习系列作业目录 1 Logistic regression 在这部分的练习中,你将建立一个逻辑回归模型来预测一个学生是否能进入大学.假设你是一所大学的行政管理人员,你想根据两门考试的结果, ...

  5. python机器学习库sklearn——岭回归(Ridge、RidgeCV)(L2正则化)

    分享一个朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!大家可以看看是否对自己有帮助:点击打开 docker/kubernetes入门视频教程 全栈工程师开发手册 (作者:栾鹏) pyth ...

  6. 核函数(多项式,高斯核)以及svm解决回归问题

    文章目录 一.SVM最优化问题转换 1.多项式核函数 二.高斯核函数 1.引入库 1.多项式特征 2.高斯核函数升维举例 3.高斯核函数超参数gamma 三.svm解决回归问题 总结 一.SVM最优化 ...

  7. 哪个才是解决回归问题的最佳算法?线性回归、神经网络还是随机森林?

    编译 | AI科技大本营 参与 | 王珂凝 编辑 | 明 明 [AI科技大本营导读]现在,不管想解决什么类型的机器学习(ML)问题,都会有各种不同的算法可以供你选择.尽管在一定程度上,一种算法并不能总 ...

  8. ACMNO.27 Python的两行代码解决 C语言-字符逆序 写一函数。使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串。 输入 一行字符 输出 逆序后的字符串

    题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入输出反序后的字符串. 输入 一行字符 输出 逆序后的字符串 样例输入 123456abcdef 样例输出 fedcba654321 来源 ...

  9. Python底层实现KNN

    今天给大家带来的是关于Python机器学习的相关知识,文章围绕着Python底层实现KNN展开,文中有非常详细的解释及代码示例,需要的朋友可以参考下 一.导入数据 借助python自带的pandas库 ...

最新文章

  1. 递归查询树状结构某个确定的节点
  2. MYsql 查询 查询当前月份的数据
  3. CGI方式获取RTX中用户的电话和邮箱
  4. Mac 技术篇-pip下载速度慢解决办法,pip秒速下载,阿里云镜像配置
  5. 8个实用的Python内置函数
  6. 视觉SLAM回环检测、词袋模型和视觉位置识别--论文记录和实验简析
  7. tomcat源码阅读之StandardHost和StandardEngine
  8. Python高级——协程
  9. 7-2 天梯地图 (30分)_「月夜枫YYF」不会吧不会吧,枫哥失守8000分阵地!
  10. mysql 事务操作入门
  11. python字符串方法总结_python字符串函数总结
  12. [usOJ5677]御神渡
  13. 如何在华为交换机上查询光模块DDM信息?
  14. 生物信息学反卷积论文阅读
  15. c语言程序框图示范,C语言程序框图courseware.ppt
  16. Wordpress 4.6 任意命令执行漏洞
  17. 基于Java Web考生评分系统设计实现毕业设计源码071114
  18. Android利用贝塞尔曲线实现翻书效果(适配AndroidX)
  19. HTTP、FTP状态码 (share)
  20. C#内存释放(垃圾回收)

热门文章

  1. 图像的深度和颜色类型
  2. 好家伙,MacOS新版本终于删掉自带Python2,连Python死忠粉都叫好!
  3. 基于PyQt5和Pywinauto自动化测试客户端
  4. JAVA 实现数据对比
  5. DMIPS DMIPS/MHZ
  6. 1、登录云服务器(Linux_Ubuntu)
  7. 美财长耶伦:加密市场动荡不会对美国金融稳定构成“真正威胁”
  8. Windows下ASLR机制(地址随机化)- 概念、PE操作、VS相关选项
  9. 焦虑真的好吗 过度的焦虑存在哪些影响
  10. 基于motoharw平台的电机控制策略模型simulink仿真实现