实战说明

本次实战为,使用一些常用的回归模型对数据集做出预测,绘制预测结果是否符合要求。

本次实战的回归模型有:

  • Linear Regression(线性回归)
  • Decision Tree Regressor(决策树回归)
  • SVM Regressor(支持向量机回归)
  • K Neighbors Regressor(K近邻回归)
  • Random Forest Regressor(随机森林回归)
  • Adaboost Regressor(Adaboost 回归)
  • Gradient Boosting Random Forest Regressor(梯度增强随机森林回归)
  • bagging Regressor(bagging 回归)
  • ExtraTree Regressor(ExtraTree 回归)

共9种回归模型

数据集

使用自制的动态血糖监测数据作为数据集,数据维度为(4793,2)。

数据格式为:动态血糖值,检测时间点(时间戳)


目录

开始

载入相关库

数据预处理

使用一元线性回归检验数据集

多元模型定义

开始预测

Linear Regression(线性回归)

Decision Tree Regressor(决策树回归)

SVM Regressor(支持向量机回归)

K Neighbors Regressor(K近邻回归)

Random Forest Regressor(随机森林回归)

Adaboost Regressor(Adaboost 回归)

Gradient Boosting Random Forest Regressor(梯度增强随机森林回归)

Bagging Regressor(Bagging 回归)

ExtraTree Regressor(ExtraTree 回归)

结论

数据集和代码


开始

载入相关库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
# 正常显示中文
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示符号
from matplotlib import rcParams
rcParams['axes.unicode_minus']=Falsefrom sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

载入模型库

#Linear Regression
from sklearn import linear_model
model_LinearRegression = linear_model.LinearRegression()
#Decision Tree Regressor
from sklearn import tree
model_DecisionTreeRegressor = tree.DecisionTreeRegressor()
#SVM Regressor
from sklearn import svm
model_SVR = svm.SVR()
#K Neighbors Regressor
from sklearn import neighbors
model_KNeighborsRegressor = neighbors.KNeighborsRegressor()
#Random Forest Regressor
from sklearn import ensemble
model_RandomForestRegressor = ensemble.RandomForestRegressor(n_estimators=20)
#Adaboost Regressor
from sklearn import ensemble
model_AdaBoostRegressor = ensemble.AdaBoostRegressor(n_estimators=50)
#Gradient Boosting Random Forest Regressor
from sklearn import ensemble
model_GradientBoostingRegressor = ensemble.GradientBoostingRegressor(n_estimators=100)
#bagging Regressor
from sklearn.ensemble import BaggingRegressor
model_BaggingRegressor = BaggingRegressor()
#ExtraTree Regressor
from sklearn.tree import ExtraTreeRegressor
model_ExtraTreeRegressor = ExtraTreeRegressor()

数据预处理

载入数据集

data = pd.read_csv('DynamicBloodGlucoseData.csv',index_col=0)
data.head()

划分数据集,分为特征(X_train)和标签(y_train)。

X_train = data['dateline'].values.reshape(-1, 1)
y_train = data['blood_sugar'].values

由于时间戳的点过多,且时间戳对于血糖预测没有帮助,将时间戳转化为指定时间格式(小时分钟),因为血糖值和每天的时间点有关系。

import time# 时间戳转字符串时间
def  stamp2str(stamp,strTimeFormat="%Y-%m-%d %H:%M:%S"):"""常用的时间格式:"%Y-%m-%d %H:%M:%S"参数:stamp:int 时间戳return:时间字符串"""return time.strftime(strTimeFormat,time.localtime(stamp))for i in range(len(X_train)):X_train[i] = int(stamp2str(X_train[i],strTimeFormat="%H%M"))

数据预处理完毕。

使用一元线性回归检验数据集

model_LinearRegression.fit(X_train,y_train)
y_pred = model_LinearRegression.predict(X_train)
plt.figure(figsize=(14,4))
plt.scatter(X_train, y_train, color='g')
plt.plot(X_train, y_pred, color='r')
plt.xlabel('time(0000-2400)')
plt.ylabel('blood glucose value')

数据集基本没问题,就是一元线性回归不能成功拟合数据集的数据特征,需要使用多元化。

多元模型定义

使用PolynomialFeatures方法对特征数据进行多元化,然后使用np.linspace方法生成测试使用的线性空间进行制做回归图像。

def model_function(regr):pf = PolynomialFeatures(degree=7)regr.fit(pf.fit_transform(X_train),y_train)X_predict = np.linspace(0, 2400, 1440)X_predict_result = regr.predict(pf.transform(X_predict.reshape(X_predict.shape[0], 1)))plt.figure(figsize=(14,4))plt.scatter(X_train, y_train, color='g')plt.plot(X_predict, X_predict_result, 'r-')plt.xlabel('time(0-24)')plt.ylabel('blood glucose value')

这里先使用7元的,这个可以调整,调整到最适合的回归曲线。degree过高容易过拟合,合适即可。

开始预测

Linear Regression(线性回归)

model_function(model_LinearRegression)

Decision Tree Regressor(决策树回归)

model_function(model_DecisionTreeRegressor)

SVM Regressor(支持向量机回归)

model_function(model_SVR)

K Neighbors Regressor(K近邻回归)

model_function(model_KNeighborsRegressor)

Random Forest Regressor(随机森林回归)

model_function(model_RandomForestRegressor)

Adaboost Regressor(Adaboost 回归)

model_function(model_AdaBoostRegressor)

Gradient Boosting Random Forest Regressor(梯度增强随机森林回归)

model_function(model_GradientBoostingRegressor)

Bagging Regressor(Bagging 回归)

model_function(model_BaggingRegressor)

ExtraTree Regressor(ExtraTree 回归)

model_function(model_ExtraTreeRegressor)

结论

从以上的模型拟合程度直观分析得出以下结果:

  • 欠拟合:Linear Regression、SVM Regressor、Adaboost Regressor
  • 过拟合:K Neighbors Regressor、Random Forest Regressor、Bagging Regressor
  • 拟合程度最好的模型:Decision Tree Regressor、Gradient Boosting Random Forest Regressor、ExtraTree Regressor

其中Gradient Boosting Random Forest Regressor拟合程度最为优秀

此次实战测试只使用了degree=7,如有兴趣可以尝试其他值,直到大多数模型拟合度较高时degree为最优值。

数据集和代码

代码和数据集都存在在我的github中

本次实战的github项目地址:https://github.com/935048000/bloodGlucosePredict

有错误欢迎大家指出,Thank you !

【机器学习】一些常用的回归模型实战(9种回归模型)相关推荐

  1. R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数及可视化、lasso回归模型分类评估计算(混淆矩阵、accuracy、Deviance)

    R语言glmnet拟合lasso回归模型实战:lasso回归模型的模型系数(lasso regression coefficients)及可视化.lasso回归模型分类评估计算(混淆矩阵.accura ...

  2. R语言glmnet拟合岭回归模型实战:岭回归模型的模型系数(ridge regression coefficients)及可视化、岭回归模型分类评估计算(混淆矩阵、accuracy、Deviance)

    R语言glmnet拟合岭回归模型(ridge regression)实战:岭回归模型的模型系数(ridge regression coefficients)及可视化.岭回归模型分类评估计算(混淆矩阵. ...

  3. ewiews面板回归模型操作_Eviews3种面板模型的选择-F检验操作详情

    CSDN同步链接-Eviews3种面板模型的选择-F检验操作详情 之前有小伙伴问小编关于三种面板模型(不变系数.变截距.变系数)的选择,具体如何操作,所以今天小编亲自来实操咯. 今天看书又对这三种模型 ...

  4. java io 模型_五种 IO 模型

    IO即为Input.Output,对计算机来说,我们使用键盘鼠标给计算机指令就是一种输入,计算机将我们键盘输入的文字显示到显示器即是一种输出.或者写博客时将计算机从键盘接收到的文字信息发送到平台上即为 ...

  5. mysql的存储模型_一种BIM模型数据的数据库存储格式的制作方法

    本发明涉及建筑BIM技术领域,特别涉及一种BIM模型数据的数据库存储格式. 背景技术: 在Revit文件的数据格式中,有的遗漏数据,如FBX:有的封闭不够开放,如IFC:有的涉及操作比较复杂的数据库, ...

  6. R语言 OLS回归中的几种回归方法

    线性回归:R语言实战 简单线性回归 如果直线形式的线性回归不够准确,可以多加一个二次项,构成多项式回归,变成一条曲线来提高拟合的精度. 多项式回归:R语言实战笔记 多项式回归 如果预测变量不止一个,就 ...

  7. linux各种io模型,Linux五种IO模型

    Linux SendMail服务启动慢总结 在 CentOS release 6.6 上启动sendmail服务时发现服务启动过程非常慢,基本上要耗费3分多钟.有点纳闷:什么原因导致sendmail启 ...

  8. 【机器学习之逻辑回归】sklearn+python逻辑回归详解

    文章目录 一.逻辑回归 二.算法原理介绍 三.代码实现 3.1 sklearn-API介绍 3.2 sklearn-代码实现 3.3 python手写代码实现 四.总结 五.算法系列 一.逻辑回归 逻 ...

  9. 你应该掌握的 7 种回归模型!

    个人网站:红色石头的机器学习之路 CSDN博客:红色石头的专栏 知乎:红色石头 微博:RedstoneWill的微博 GitHub:RedstoneWill的GitHub 微信公众号:AI有道(ID: ...

最新文章

  1. 在线作图|如何绘制一个好看的堆叠柱状图
  2. 世界上将出现一种新职业
  3. kickstart批量安装Linux系统
  4. js选择日期即时把两个日期相差天数显示出来?
  5. 安装部署Exchange Server 2010 CAS NLB MailBox DAG
  6. produces在@requestMapping中的使用方式和作用
  7. Zabbix RCE with API JSON-RPC
  8. B. File List
  9. win10计算器rsh_Win10 内置计算器评测:PowerShell 很靠谱
  10. vue标准时间改为时间戳_2021考研网上确认照片采集新标准公布 网上确认时间表...
  11. 爬虫初窥day1:urllib
  12. android开发酷欧天气,酷欧天气的开发
  13. Layui表单验证lay-verify属性:自定义校验
  14. 【论文阅读】Rethinking the Value of Network Pruning
  15. macOS 安装postman 中文语言包
  16. HFSS、ANSYS Electronics Desktop安装完成后无法启动、无法使用、无法打开问题的解决办法。
  17. 3-23 实对称矩阵知识补充
  18. 微信为什么收不到服务器的红包,收不到别人的微信红包是怎么回事?该怎么办?...
  19. html自动适应屏幕分辨率,css如何设置适配不同分辨率屏幕?
  20. 【模电】0001 实用运放电路分析

热门文章

  1. Linux内核全版本下载地址
  2. 微信小程序60秒倒计时
  3. FlowFormer: Transformer结构光流估计
  4. 卷积与反卷积(转置卷积)关系的公式推导 及其各自的形式
  5. JS_强制类型转换_Number
  6. Xshell7下载、安装、连接linux系统教程(官网)
  7. 动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)
  8. 关于网上很不好找的幼儿识图APP
  9. 字符串右移n位,例如 “hello world“ 右移两位 后ldhello wor 要求写一个方法实现此功能,方法的格式是 String moveToRight(String str,int po
  10. 线上引流压测工具Meteor