[Python中常用的回归模型算法大全2:从线性回归到XGBoost]

news2025/7/19 6:41:55

文章目录

    • 概要
    • 多输出K近邻回归
    • 集成算法回归
    • 梯度提升决策树回归
    • 随机森林回归

概要

回归分析在数据科学领域扮演着关键角色,用于预测数值型目标变量。本文深入探讨了几种常用的回归模型,包括多输出K近邻回归,决策树回归,集成算法回归,梯度提升决策树回归,随机森林回归,多输出随机森林回归,人工神经网络。

多输出K近邻回归

多输出K近邻回归:

多输出K近邻回归不需要使用MultiOutputRegressor作为外包装器,直接使用KNeighborsRegressor即可实现多输出回归。这种方法通过输入一个数据集X,其中包含除了目标变量(在这个例子中是’Adj Close’和’Open’)之外的所有特征,和包含两个目标变量的数据集Y。代码示例如下:

X = dataset.drop(['Adj Close', 'Open'], axis=1)
Y = dataset[['Adj Close', 'Open']]
from sklearn.neighbors import KNeighborsRegressor
model = KNeighborsRegressor()
model.fit(X, Y)
data_in = [[23.98, 22.91, 7.00, 7.00, 1.62, 1.62, 4.27, 4.25]]
yhat = model.predict(data_in)
print(yhat[0])  # 输出:[15.64999962, 16.64999962]
print(model.score(X, Y))  # 输出:1

决策树回归:

决策树是一种树状结构,每个叶子结点对应一个分类,非叶子结点对应某个属性上的划分。文章详细介绍了决策树的基本原理和生成过程。在这个例子中,使用DecisionTreeRegressor进行回归分析,代码如下:

X = dataset.drop(['Adj Close', 'Close'], axis=1)  
y = dataset['Adj Close'] 
from sklearn.tree import DecisionTreeRegressor  
regressor = DecisionTreeRegressor()  
regressor.fit(X_train, y_train)  
y_pred = regressor.predict(X_test)
# 输出预测结果
df = pd.DataFrame({'Actual': y_test, 'Predicted': y_pred})  
print(df.head(2))
# 输出模型评价指标
print(metrics.mean_absolute_error(y_test, y_pred))  
print(metrics.mean_squared_error(y_test, y_pred))
print(np.sqrt(metrics.mean_squared_error(y_test, y_pred)))
# 输出交叉验证和R2得分
dt_scores = cross_val_score(regressor, X_train, y_train, cv=5)
print("Mean cross validation score: {}".format(np.mean(dt_scores)))
print("Score without cv: {}".format(regressor.score(X_train, y_train)))
print('r2 score:', r2_score(y_test, regressor.predict(X_test)))

决策树回归是一种机器学习方法,采用树状结构来表示不同决策路径。在决策树中,每个叶子节点代表一个特定的输出值,而非叶子节点则表示对输入特征进行划分的规则。决策树的生成基于递归切割的方法,它通过寻找最佳的属性和切分点,使得在每个子区域内的输出值与实际观测值的差异最小化。在训练过程中,决策树不断地将空间区域划分为两个子区域,并确定每个子区域上的输出值,最终生成一个二叉树结构。

在实际应用中,我们可以使用Python中的DecisionTreeRegressor类来创建并训练决策树回归模型。首先,我们准备了输入特征X和对应的目标值y。模型训练完成后,可以用该模型进行预测,生成实际值和预测值的比较。为了评估模型的性能,我们使用了多个指标,包括平均绝对误差、均方差、均方根误差以及R²分数(决定系数)。此外,为了确保模型的泛化性能,我们还进行了交叉验证,检查模型在不同数据子集上的表现。

通过这些评估指标,我们可以全面了解决策树回归模型的性能,并确认它在预测任务中的准确度和可靠性。

X = dataset.drop(['Adj Close', 'Close'], axis=1)  
y = dataset['Adj Close'] 
# 划分训练集和测试集略 
# 模型实例化
from sklearn.tree import DecisionTreeRegressor  
regressor = DecisionTreeRegressor()  
# 训练模型
regressor.fit(X_train, y_train)
# 回归预测
y_pred = regressor.predict(X_test)
df = pd.DataFrame({'Actual':y_test, 'Predicted':y_pred})  
print(df.head(2))
          Actual  Predicted
Date                         
2017-08-09   12.83      12.63
2017-11-14   11.12      11.20

模型评价

from sklearn import metrics 
# 平均绝对误差
print(metrics.mean_absolute_error(
    y_test, y_pred))  
# 均方差
print(metrics.mean_squared_error(
    y_test, y_pred))
# 均方根误差
print(np.sqrt(
    metrics.mean_squared_error(
      y_test, y_pred)))
0.0924680893617
0.0226966010212
0.1506539114039

交叉验证

from sklearn.model_selection import cross_val_score
dt_fit = regressor.fit(X_train, y_train)
dt_scores = cross_val_score(
    dt_fit, X_train, y_train, cv = 5)

print("Mean cross validation score: {}".format(np.mean(dt_scores)))
print("Score without cv: {}".format(dt_fit.score(X_train, y_train)))
Mean cross validation score: 0.99824909037
Score without cv: 1.0

R2

from sklearn.metrics import r2_score

print('r2 score:', r2_score(y_test, dt_fit.predict(X_test)))
print('Accuracy Score:', dt_fit.score(X_test, y_test))
r2 score: 0.9989593390532074
Accuracy Score: 0.9989593390532074

集成算法回归

集成算法回归是一种通过整合多个独立评估器的方法来提高模型性能的技术。其中,装袋法(Bagging)和提升法(Boosting)是两种常见的集成学习方法。

装袋法(Bagging):

装袋法的核心思想是构建多个相互独立的评估器,然后通过平均或多数表决的原则来决定集成评估器的结果。随机森林是装袋法的代表模型。在随机森林中,多个决策树被并行构建,最终的预测结果是所有决策树预测结果的平均值。

提升法(Boosting):

提升法中,基评估器是相关的,是按顺序一个一个构建的。其核心思想是通过结合多个弱评估器的力量,一次次对难以评估的样本进行预测,从而构成一个强评估器。Adaboost和梯度提升树(GBDT)是提升法的代表模型。在Adaboost中,每个样本的权重根据前一轮模型的错误进行调整,使得之前被错误分类的样本在下一轮中得到更多的关注,从而提高整体模型的准确性。

Adaboost基本性质
能在学习过程中不断减少训练误差,即在训练数据集上的训练误差率。且误差率是以指数数率下降的。

X = dataset[['Open', 'High', 'Low', 'Volume']].values
y = dataset['Buy_Sell'].values
# 划分训练集与测试集略
from sklearn.ensemble import AdaBoostClassifier
ada = AdaBoostClassifier(n_estimators=180, random_state=0)
ada.fit(X_train, y_train)

y_pred_proba = ada.predict_proba(X_test)[:,1]
ada.feature_importances_
array([ 0.18888889,  0.15      ,
        0.26666667,  0.39444444])

模型评价

ada.predict(X_test)
ada.score(X, y)
from sklearn.metrics import roc_auc_score
ada_roc_auc = roc_auc_score(y_test, y_pred_proba)
print('ROC AUC score: {:.2f}'.format(ada_roc_auc))

在给定的示例中,使用了AdaBoostClassifier进行分类任务。首先,通过提供输入特征X和对应的目标标签y,训练了AdaBoost模型。然后,使用测试集进行预测,并计算了模型的ROC AUC分数,该分数用于评估模型在分类任务中的性能。通过不断调整基评估器的权重,AdaBoost模型能够逐渐减少训练误差,提高模型的预测准确性。

梯度提升决策树回归

BDT(Gradient Boosting Decision Tree)简介

GBDT,又称MART(Multiple Additive Regression Tree),是一种迭代的决策树算法。该算法由多棵决策树组成,所有树的结论累加起来作为最终答案。它在提出初期就和SVM一起被认为是泛化能力较强的算法。

在GBDT中,采用平方误差损失函数时,每一棵回归树学习的是之前所有树的结论和残差,拟合得到当前的残差回归树。提升树即是整个迭代过程生成的回归树的累加。

GBDT工作原理

GBDT利用加法模型和前向分步算法实现学习的优化过程。每一步的优化很简单,例如在使用平方损失函数时,学习残差回归树。

简单来说,每一次的计算都是为了减少上一次的残差。GBDT在残差减少(负梯度)的方向上建立一个新的模型。

GBDT的特点

GBDT的优点在于可以相对少的调参时间内得到较高的准确率。它可以灵活处理各种类型的数据,包括连续值和离散值,具有广泛的应用范围。同时,GBDT具有较强的鲁棒性,对异常值的影响较小。

然而,GBDT也有其缺点。它的弱学习器之间存在依赖关系,难以并行训练数据。在使用GBDT前,通常需要先处理好缺失值。

GBDT的应用

在实际应用中,我们可以使用Scikit-Learn库中的GradientBoostingRegressor来构建GBDT模型。例如,在金融领域,我们可以使用GBDT来预测股票价格。以下是一个示例代码:

from sklearn.ensemble import GradientBoostingRegressor

# 准备数据
X = dataset[['Open', 'High', 'Low', 'Volume']].values
y = dataset['Adj Close'].values

# 划分训练集与测试集(略)

# 构建GBDT模型
gb = GradientBoostingRegressor(max_depth=4, n_estimators=200, random_state=2)

# 训练模型
gb.fit(X_train, y_train)

# 预测测试集标签
y_pred = gb.predict(X_test)

# 计算RMSE
from sklearn.metrics import mean_squared_error as MSE
mse_test = MSE(y_test, y_pred)
rmse_test = mse_test**(1/2)
print('Test set RMSE of GBDT: {:.3f}'.format(rmse_test))

随机森林回归

随机森林回归

随机森林是一种集成学习方法,它以决策树为基础构建多个模型,并通过集体智慧做出预测。在随机森林中,样本随机采样(有放回),同时,对于每个树的节点分裂时,特征也是从全部特征中随机选择的子集。这种随机性的引入增加了模型的多样性,提高了模型的泛化性能。

算法流程

样本随机采样:从训练集中有放回地随机选择一定数量的样本,用于构建决策树。
特征随机选择:对于每个树的节点分裂,随机选择一部分特征,再从中选择最优特征进行划分。
多棵决策树构建:重复上述两个步骤,构建多棵决策树,形成随机森林。
预测:对于新数据,每棵决策树都进行预测,分类任务使用简单投票法,回归任务使用简单平均法,得到最终的预测结果。

优点

抗过拟合:样本和特征的随机性减少了模型的过拟合风险。
鲁棒性:随机性使得模型对噪声数据具有很好的鲁棒性,提高了泛化性能。
处理高维数据:不需要特征选择,能够处理高维数据,并展现哪些特征比较重要。
抗缺失值:对缺失值不敏感,即使有大量特征缺失,仍能保持准确度。
并行化训练:树与树之间独立,便于并行化训练,提高了训练速度。

缺点

相似决策树:可能生成很多相似的决策树,降低了模型的多样性。
处理小数据:在小数据或低维数据上表现可能不如其他模型。
计算速度:构建多个决策树可能较慢,尤其是树的数目很大时。

XGBoost回归

XGBoost(Extreme Gradient Boosting)是一种高效的提升树算法,属于集成学习的一部分。它通过将多个树模型集成在一起,形成一个强大的回归模型。这些树模型都是基于CART(Classification and Regression Trees)回归树构建的。
在这里插入图片描述

回归树生成过程

节点分裂:从根节点开始,选择最优特征和切分点进行节点分裂。
分裂条件:选择使平方误差最小的特征和切分点,直到满足停止条件(如节点样本数小于阈值)为止。
树的生长:递归地在子节点上重复上述步骤,生成完整的回归树。

XGBoost的核心思想

XGBoost不断地添加树,每次训练一个新树,该树负责拟合上次预测的残差。预测值是通过将样本落入每棵树的叶子节点,并用叶子节点的权重直接求和得到的。

与GBDT的区别

在XGBoost中,预测值不是由所有弱分类器上的预测结果加权求和得到的,而是直接由叶子节点的权重求和得到。这个权重表示了每个叶子节点上样本的回归取值。XGBoost通过目标函数,同时考虑了模型的偏差和方差,以找到最优的树模型。

优势

高效性:XGBoost具有高效的训练和预测速度,适用于大规模数据集。
灵活性:支持自定义损失函数和正则化项,能够适应不同问题类型。
准确性:通过多轮迭代,逐步改善模型性能,提供高精度的预测。

目标函数

XGBoost的目标函数包含两部分:偏差(模型误差)和方差(模型复杂度)。通过在这两者之间取得平衡,XGBoost能够生成具有良好泛化性能的回归模型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1102713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

告别手动调节!iOS 17让你全自动调节音量大小,那么如何实现个性化音量呢

多亏了iOS 17,你的AirPods Pro 2现在具有个性化音量功能,可以根据周围环境智能调整音频音量。 这很酷,任何喜欢尽可能降低音量以避免听力受损的人都会对此表示赞赏。使用个性化音量,你的iPhone将检测音量何时可以降低&#xff0c…

MyBatisPlus-02

一 查询条件的三种 1.按条件查询 //方式一&#xff1a;按条件查询QueryWrapper qw new QueryWrapper();qw.lt("age",18);List<User> userList userDao.selectList(qw);System.out.println(userList); 2.lambda格式按条件查询 //方式二&#xff1a;lambda格…

【前端学习】—函数节流(九)

【前端学习】—函数节流&#xff08;九&#xff09; 一、什么是函数节流 函数节流&#xff1a;规定在一个单位时间内&#xff0c;事件响应函数只能被触发一次&#xff0c;如果这个单位时间内触发多次函数&#xff0c;只有一次生效。 二、函数节流使用场景 window.onresize事…

pytorch代码实现之动态蛇形卷积模块DySnakeConv

动态蛇形卷积模块DySnakeConv 血管、道路等拓扑管状结构的精确分割在各个领域都至关重要&#xff0c;确保下游任务的准确性和效率。 然而&#xff0c;许多因素使任务变得复杂&#xff0c;包括薄的局部结构和可变的全局形态。在这项工作中&#xff0c;我们注意到管状结构的特殊…

安达发|大多数离散型生产模式适用APS自动排程系统

在离散型生产模式中&#xff0c;智能生产排程软件&#xff08;APS&#xff09;的应用越来越广泛。这是因为APS能够根据实时的生产需求和资源状况&#xff0c;自动进行生产计划的制定和调整&#xff0c;从而提高生产效率&#xff0c;降低生产成本&#xff0c;保证生产的顺利进行…

美国股票和加密货币平台【Alpaca】完成1500万美元融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于美国加利福尼亚州圣马特奥的股票和加密交易经纪平台提供商&#xff0c;近期宣布已从SBI集团获得了1500万美元融资。 该公司打算利用这笔资金加快业务扩张&#xff0c;并将其业务范围扩大到…

iPaaS混合集成平台,打造数字化生态

如今企业分工越来越细&#xff0c;上下游合作越来越紧密、各企业之间的业务系统需要相互协作完成业务、外部API依赖越来越多、同时企业系统运行在多个混合云环境及SaaS中&#xff0c;私有端大量业务系统与云端系统形成了错综复杂的集成关系&#xff0c;企业面临集成技术复杂多样…

Springboot整合taos时序数据库TDengine

1.首先安装TDengine服务端在linux上 TDengine多种安装包的安装和卸载 - TDengine | 涛思数据安装过程直接去官网看,非常详细简单 2.出现的问题 windows连接 invalid app version 版本不对应 版本不对应的问题,需要在linux上安装的版本和windows client版本一致,不然w…

Kubernetes基础(六)-常见 Kubernetes Pod 驱逐场景

Kubernetes Pod 被驱逐是什么意思&#xff1f; 它们被终止&#xff0c;通常是没有足够资源的结果。但是为什么会这样呢&#xff1f; 驱逐是指派给节点的Pod 被终止的过程。 Kubernetes 中最常见的情况之一是Preemption&#xff0c;为了在资源有限的节点中调度新的 Pod&#…

安卓14通过“冻结”缓存应用程序腾出CPU,提高性能和内存效率

本月早些时候&#xff0c;我们听说更新到安卓14似乎提高了谷歌Pixel 7和Pixel 6的效率——提高了电池寿命&#xff0c;并在这个过程中减少了热量的产生。现在看来&#xff0c;安卓14的增效功能细节已经公布。 安卓侦探Mishaal Rahman在X&#xff08;前身为Twitter&#xff09;…

林沛满--快递员的工作策略——TCP窗口

本文整理自&#xff1a;《Wireshark网络分析就这么简单 第1版》 作者&#xff1a;林沛满 著 出版时间&#xff1a;2014-12 假如你是一位勤劳的快递员&#xff0c;要送100个包裹到某公司去&#xff0c;怎样送货才科学? 最简单的方式是每次送1个&#xff0c;总共跑100趟。当然这…

uCOSIII实时操作系统 八 软件定时器

目录 软件定时器概述 使用步骤&#xff1a; 创建软件定时器&#xff1a; 启动软件定时器&#xff1a; 停止软件定时器&#xff1a; 删除软件定时器&#xff1a; 单次定时器&#xff1a; ​编辑周期定时器&#xff1a; 无初始化延时&#xff1a; 有初始化延时&#xff…

LabVIEW中使用Get LV Class Default Value 出现错误1498

LabVIEW中使用Get LV Class Default Value 出现错误1498 在LabVIEW中开发了一个应用程序&#xff0c;其中包含可以在执行时动态配置插件的基类。生成可执行文件后&#xff0c;当应用程序要执行子类时&#xff0c;收到以下错误信息。 Error1498 occurred at Gen LV Class Defa…

Sandboxie+Buster Sandbox Analyzer打造个人沙箱

一、运行环境和需要安装的软件 实验环境&#xff1a;win7_x32或win7_x64 用到的软件&#xff1a;WinPcap_4_1_3.exe、Sandboxie-3-70.exe、Buster Sandbox Analyzer 重点是Sandboxie必须是3.70版本。下载地址&#xff1a;https://github.com/sandboxie-plus/sandboxie-old/blo…

Linux性能优化--使用性能工具发现问题

9.0 概述 本章主要介绍综合运用之前提出的性能工具来缩小性能问题产生原因的范围。阅读本章后&#xff0c;你将能够&#xff1a; 启动行为异常的系统&#xff0c;使用Linux性能工具追踪行为异常的内核函数或应用程序。启动行为异常的应用程序&#xff0c;使用Linux性能工具追…

浪子带你【25天】玩转Python——期中福利

人生苦短&#xff0c;我用Python! 目录 回顾上文 正文 最后的话 回顾上文 浪子带你【25天】玩转Python——5.面向对象编程&#xff08;类和对象&#xff09;-CSDN博客 正文 哈喽&#xff0c;不知不觉中&#xff0c;浪子的【25天】玩转Python已经开播13天啦&#xff01…

【c++智能指针】

目录 一、智能指针的使用及原理二、auto_ptr三、unique_ptr三、shared_ptr四、weak_ptr五、定制删除器 一、智能指针的使用及原理 RAII&#xff08;Resource Acquisition Is Initialization&#xff09;是一种利用对象生命周期来控制程序资源&#xff08;如内存、文件句柄、网…

新型的终端复用器 tmux

以前遇到长时间执行任务时&#xff0c;一般是使用nohup加后台运行&#xff0c;但是涉及到少量代码编写。 同事介绍了一个screen命令&#xff0c;根据文档&#xff0c;此命令已经过时&#xff0c;最新的命令是tmux。 tmux的介绍文档&#xff0c;RedHat的这一篇非常不错。 在文…

vue ref和$refs获取dom元素

vue ref和$refs获取dom元素 **创建 工程&#xff1a; H:\java_work\java_springboot\vue_study ctrl按住不放 右键 悬着 powershell H:\java_work\java_springboot\js_study\Vue2_3入门到实战-配套资料\01-随堂代码素材\day04\准备代码\14-ref和$refs获取dom对象 vue --ve…

Kotlin中的数值类型

在Kotlin中&#xff0c;Byte、Short、Int、Long、Float和Double是基本数据类型&#xff0c;用于表示不同范围和精度的数值。 Byte&#xff08;字节&#xff09;&#xff1a;Byte类型是8位有符号整数类型&#xff0c;取值范围为-128到127。在Kotlin中&#xff0c;可以使用字面值…