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

实战说明

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

本次实战的回归模型有:

  • 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']=False

from 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 !

  • 57
    点赞
  • 534
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
机器学习中,线性回归是一常见的实战方法。线性回归的目标是通过拟合一个线性模型来预测一个连续的目标变量。在实际应用中,线性回归可以用于预测房价、销售量等连续变量。 线性回归的基本定义是通过最小化预测值与真实值之间的平方误差来拟合一个线性模型。这可以通过梯度下降算法来实现。梯度下降算法是一迭代优化算法,通过不断调整模型参数来最小化损失函数。 在线性回归中,我们可以使用最小二乘法来计算模型参数。最小二乘法通过求解正规方程来得到模型参数的闭式解。然而,当矩阵为非满秩矩阵时,无法求逆,这时可以采用岭回归来解决这个问题。岭回归通过在矩阵的转置乘以矩阵上加上一个正则化项来使矩阵非奇异,从而能够求逆。 另一方法是使用梯度下降算法来求解线性回归模型的参数。梯度下降算法通过不断迭代调整模型参数来最小化损失函数。在每一次迭代中,算法根据损失函数的梯度方向更新模型参数。通过不断迭代,梯度下降算法可以逐渐接近最优解。 在实际应用中,线性回归可以通过使用不同的特征工程方法来提高模型的性能。特征工程包括选择合适的特征、处理缺失值、进行特征缩放等。此外,线性回归还可以通过引入正则化项来防止过拟合问题。 总结起来,机器学习中的线性回归是一常见的实战方法,可以通过最小化预测值与真实值之间的平方误差来拟合一个线性模型。可以使用最小二乘法或梯度下降算法来求解模型参数。在实际应用中,还可以通过特征工程和正则化来提高模型性能。 #### 引用[.reference_title] - *1* [机器学习实战(一)—— 线性回归](https://blog.csdn.net/qq_44715621/article/details/110449232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [机器学习实战----线性回归](https://blog.csdn.net/zhangyingjie09/article/details/83018072)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [机器学习实战之线性回归](https://blog.csdn.net/luoluopan/article/details/88052806)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值