机器学习算法之回归算法

一、回归算法思维导图

在这里插入图片描述

二、算法概念、原理、应用场景和实例代码

1、线性回归

1.1、概念

  ‌‌线性回归算法是一种统计分析方法,用于确定两种或两种以上变量之间的定量关系。‌ 线性回归算法通过建立线性方程来预测因变量(y)和一个或多个自变量(x)之间的关系。其基本形式为 y = wx + e,其中 w 是权重,x 是自变量,e 是误差项。

1.2、算法原理

   线性回归算法的核心在于找到最佳的拟合直线,使得预测值与实际值之间的误差最小。这通常通过最小二乘法来实现,即最小化预测值与实际值之差的平方和。线性回归可以分为一元线性回归和多元线性回归:
(1)一元线性回归‌:只有一个自变量 x 和一个因变量 y。 ‌
(2)多元线性回归‌:有多个自变量 x1, x2, …, xn 和一个因变量 y。

1.3、应用场景

   线性回归算法广泛应用于各个领域,包括但不限于:
(1)‌经济学‌:预测股票价格、经济增长等。 ‌
(2)医学‌:预测疾病发病率、药物效果等。
(3)环境科学‌:预测气候变化、污染水平等。 ‌
(4)市场营销‌:预测销售量、市场份额等。

1.4、公式推导

  线性回归方程的推导过程包括以下几个步骤: ‌
(1)计算平均值‌:分别计算 x 和 y 的平均值。
(2)计算分子和分母‌:使用最小二乘法计算回归系数 b 和 a。 ‌
(3)建立方程‌:最终得到线性回归方程 y = bx + a,其中 b 是斜率,a 是截距。

1.5、实例分析

  假设有一组数据点 (x1, y1), (x2, y2), …, (xn, yn),线性回归的目标是找到一条直线 y = bx + a,使得所有数据点到这条直线的垂直距离的平方和最小。通过最小二乘法,可以求解出最佳的 b 和 a 值,从而得到具体的线性回归方程。

1.6、具体代码
鸢尾花数据集介绍

    该数据集包含了三个品种的鸢尾花(Setosa、Versicolor、Virginica)每个品种各有50个样本,共计150个样本。对于每个样本,测量了4个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度),以及其所属的品种标签。

    数据集包括4个属性,分别为花萼的长、花萼的宽、花瓣的长和花瓣的宽。对花瓣我们可能比较熟悉,花萼是什么呢?花萼是花冠外面的绿色被叶,在花尚未开放时,保护着花蕾。四个属性的单位都是cm,属于数值变量,四个属性均不存在缺失值的情况,字段如下表所示:

在这里插入图片描述

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import matplotlib# 设置字体为SimHei,确保该字体在你的系统中存在
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题# 加载鸢尾花数据集
def LoadIrisDataset():# 1.加载鸢尾花数据集iris = datasets.load_iris()X = iris.data  # 特征数据,包含所有样本的4个特征y = iris.target  # 目标变量,目前我们只使用第一个目标(0-1-2类)# 2.我们选择使用一个特征来进行线性回归,例如花瓣长度X = X[:, [2]]  # 选择第三个特征:花瓣长度# 3.将数据集分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 4.创建线性回归模型model = LinearRegression()# 5.训练模型model.fit(X_train, y_train)# 6.预测测试集的结果y_pred = model.predict(X_test)# 7.评估模型性能mse = mean_squared_error(y_test, y_pred)r2 = r2_score(y_test, y_pred)# 8.模型评估print(f"系数(斜率): {model.coef_[0]}")print(f"截距: {model.intercept_}")print(f"均方误差 (MSE): {mse}")print(f"决定系数 (R²): {r2}")return X_test, y_test, y_pred# 二、绘制回归结果
def PlotResults(X_test, y_test, y_pred):plt.scatter(X_test, y_test, color="black", label="Data")plt.plot(X_test, y_pred, color="blue", linewidth=3, label="Linear Regression")plt.xlabel("花瓣长度 (cm)")plt.ylabel("目标值")plt.title("线性回归模型预测鸢尾花数据集")plt.legend()plt.show()if __name__ == "__main__":X_test, y_test, y_pred = LoadIrisDataset()PlotResults(X_test, y_test, y_pred)

控制台输出结果为:
在这里插入图片描述

在这里插入图片描述

2、岭回归

2.1、概念

岭回归(英文名:ridge regression, Tikhonov regularization)是一种专用于共线性数据分析的有偏估计回归方法,实质上是一种改良的最小二乘估计法,通过放弃最小二乘法的无偏性,以损失部分信息、降低精度为代价获得回归系数更为符合实际、更可靠的回归方法,对病态数据的拟合要强于最小二乘法。

2.2、算法原理

在这里插入图片描述

2.3、应用场景

(1)经济学:用于经济数据建模,以预测经济变量之间的关系。
(2)生物统计学:用于基因表达分析和生物信息学领域,以处理高维数据。
(3)工程学:用于工程建模和控制系统设计,以改善模型的鲁棒性。
(4)金融学:用于资产定价和风险管理,以降低投资组合的风险。

2.4、实例分析

这段代码实现了以下功能:
(1). 创建了一个具有10个特征的示例数据集,其中包含100个样本。
(2).将数据集划分为训练集和测试集,其中80%的数据用于训练,20%用于测试。
(3).使用scikit-learn库中的Ridge类定义了岭回归模型,并指定了岭参数(alpha)为1.0。
(4).在训练集上训练了岭回归模型。
(5).在测试集上进行了预测,并计算了预测结果与真实值之间的均方误差(MSE)。
(6).最后,绘制了预测值与真实值的对比图,以直观地展示模型的性能。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_errordef TrainRidgeModel():# 1.创建示例数据集np.random.seed(0)X = np.random.rand(100, 10)  # 100个样本,10个特征y = 2 * X[:, 0] + 3 * X[:, 1] + np.random.randn(100)  # 构造线性关系,并添加噪声# 2.将数据集划分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 3.定义岭回归模型ridge = Ridge(alpha=1.0)  # alpha为岭参数,默认为1.0# 4.在训练集上训练模型ridge.fit(X_train, y_train)# 5.在测试集上进行预测y_pred = ridge.predict(X_test)# 6.计算均方误差(MSE)作为性能评估指标mse = mean_squared_error(y_test, y_pred)print("岭回归模型的均方误差为:", mse)return y_test, y_preddef PlotPredictions(y_test, y_pred):# 1.绘制预测值与真实值的对比图plt.figure(figsize=(8, 6))plt.scatter(y_test, y_pred, color='blue')plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], linestyle='--', color='red')plt.xlabel('True Values')plt.ylabel('Predictions')plt.title('True vs. Predicted Values (Ridge Regression)')plt.show()if __name__ == '__main__':y_test, y_pred = TrainRidgeModel()PlotPredictions(y_test, y_pred)

控制台输出结果为:
在这里插入图片描述

在这里插入图片描述

3、Lasso回归

3.1、概念

岭回归是一种正则化技术,用于处理多重共线性问题。在标准线性回归中,模型试图找到最小化残差平方和的参数。然而,在存在高度相关特征的情况下,最小二乘估计可能会变得不稳定。为了克服这个问题,岭回归通过向损失函数添加一个惩罚项(即L2正则化项),使得模型系数变得更小,从而降低了过拟合的风险。

岭回归的目标函数是:
在这里插入图片描述
其中,λ 是正则化参数,控制着惩罚的强度。

特点:
(1).正则化类型: 使用L2正则化,也称为权重衰减。
(2).系数收缩: 岭回归通过添加平方项来收缩系数,但不会将它们缩减至零。
(3).多共线性处理: 对于具有多重共线性的数据集非常有效,因为它可以稳定系数估计。
(4).参数调整:正则化参数(λ)的选取对于模型性能至关重要。

3.2、应用场景

当数据集中存在高度相关的特征时。
当特征数量较大,但样本数量相对较少时。
当我们关心模型的解释性,而不是特征选择时。

3.3、实例分析
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt
import matplotlib# 设置字体为SimHei,确保该字体在你的系统中存在
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题def LoadIrisAndPredict():# 1.加载鸢尾花数据集iris = datasets.load_iris()X = iris.data  # 特征数据,包含所有样本的4个特征y = iris.target  # 目标变量,目前我们只使用第一个目标(0-1-2类)# 2.我们选择使用一个特征来进行Lasso回归,例如花瓣长度X = X[:, [2]]  # 选择第三个特征:花瓣长度# 3.将数据集分为训练集和测试集X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 4.创建Lasso回归模型lasso_model = Lasso(alpha=1.0)  # alpha是正则化强度# 5.训练模型lasso_model.fit(X_train, y_train)# 6.预测测试集的结果y_pred = lasso_model.predict(X_test)# 7.评估模型性能mse = mean_squared_error(y_test, y_pred)r2 = r2_score(y_test, y_pred)print(f"系数(斜率): {lasso_model.coef_[0]}")print(f"截距: {lasso_model.intercept_}")print(f"均方误差 (MSE): {mse}")print(f"决定系数 (R²): {r2}")return X_test, y_test, y_pred# 可视化结果
def VisualizeResults(X_test, y_test, y_pred):plt.scatter(X_test, y_test, color="black", label="Data")plt.plot(X_test, y_pred, color="blue", linewidth=3, label="Lasso Regression")plt.xlabel("花瓣长度 (cm)")plt.ylabel("目标值")plt.title("Lasso回归模型预测鸢尾花数据集")plt.legend()plt.show()if __name__ == "__main__":X_test, y_test, y_pred = LoadIrisAndPredict()VisualizeResults(X_test, y_test, y_pred)

运行结果为:
在这里插入图片描述

在这里插入图片描述

4、弹性网回归

4.1、概念

弹性网络回归(Elastic Net Regression)是‌岭回归(Ridge Regression)和‌Lasso回归(Lasso Regression)的结合。它通过引入两个正则化参数来实现特征选择和模型稳定性。弹性网络回归的损失函数结合了L1正则化和L2正则化,解决了Lasso在处理高相关特征时的缺陷,并且在处理高维数据时表现优异。

4.2、算法原理

在这里插入图片描述

4.3、应用场景和优势

弹性网络回归在处理多重共线性和特征选择方面特别有用。它结合了岭回归和Lasso回归的优点,适用于高维数据集,能够自动选择最重要的特征,同时保持模型的稳定性。弹性网络回归在‌生物信息学、‌金融数据分析等领域有广泛应用。

4.4、实例分析
在这里插入代码片

在这里插入图片描述
在这里插入图片描述

5、ARIMA

5.1、概念

ARIMA(AutoRegressive Integrated Moving Average)是一种用于时间序列预测的统计方法。它结合了自回归(Autoregressive, AR)、差分(Integrated,I)和移动平均(Moving Average, MA)三个部分,以建模和预测时间序列数据。

5.2、算法原理

(1)检查平稳性:首先需要确保时间序列数据是平稳的。如果数据不是平稳的,则需要通过差分使其变得平稳。
(2)确定参数 p、d 和 q:
1)选择合适的自回归阶数 ( p )。
2)确定使数据平稳所需的差分阶数 ( d )。
3)选择合适的移动平均阶数 ( q )。
(3)模型拟合:使用确定的参数进行模型拟合,以最小化预测误差。
(4)模型验证和评估:通过残差分析、AIC/BIC准则等方法来评估模型的性能,并进行必要的调整。

5.3、应用场景

(1)金融市场 股票价格预测:利用历史股价数据预测未来的股价走势。 汇率变动预测:通过观察历史汇率数据来预测未来汇率的变化。
(2)宏观经济分析 通货膨胀率预测:根据过去的通胀数据,预测未来的通货膨胀趋势。
GDP增长率预测:利用历史的经济数据来预测国家或地区的经济增长情况。
(3) 供应链管理
库存预测:通过历史销售数据来预测未来的需求量,从而更好地进行库存管理和优化。 生产计划制定:根据历史生产和销售数据来调整未来的生产计划。
(4)气象和环境科学 温度变化预测:利用过去的气温数据来预测未来几天或几周的天气情况。
空气质量预测:通过分析历史空气质量数据,预测未来的空气污染程度。
(5)销售预测
产品销量预测:根据过去的产品销售数据来预测未来的销售额,从而更好地进行库存管理和营销策略制定。

5.4、算法实例

假设我们有一个时间序列数据集,并且经过检验发现该数据是不平稳的。我们可以先应用一阶差分使其变得平稳(即 ( d = 1 )),然后选择合适的( p ) 和 ( q ) 值。假设通过试错法确定了 ( (p, d, q) = (2, 1, 2) ),那么模型可以表示为 ARIMA(2, 1, 2)。

使用Python实现ARIMA 在Python中,你可以使用statsmodels库来实现ARIMA模型。以下是一个简单的示例:

import pandas as pd
from statsmodels.tsa.arima.model import ARIMA
import matplotlib.pyplot as plt
import matplotlib# 设置字体为SimHei,确保该字体在你的系统中存在
matplotlib.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体
matplotlib.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题def LoadIrisData():# 1.假设我们有一个时间序列数据集data = pd.read_csv('time_series_data.csv', parse_dates=['date'], index_col='date')data.index.freq = 'D'  # 设置频率为每天# 2.检查数据平稳性并进行差分diff_data = data.diff().dropna()# 3.确定参数 p, d, qmodel = ARIMA(data, order=(2, 1, 2))results = model.fit()print(results.summary())# 4.预测未来值forecast_steps = 10forecast = results.get_forecast(steps=forecast_steps)mean_forecast = forecast.predicted_meanconf_int = forecast.conf_int()return data, mean_forecast, conf_int# 绘制预测结果
def PlotForecast(data, mean_forecast, conf_int):plt.figure(figsize=(14, 7))plt.plot(data, label='Original Data')plt.plot(mean_forecast.index, mean_forecast.values, color='red', label='Forecast')plt.fill_between(conf_int.index, conf_int.iloc[:, 0], conf_int.iloc[:, 1], color='pink', alpha=0.3)plt.legend()plt.show()if __name__ == '__main__':data, mean_forecast, conf_int = LoadIrisData()PlotForecast(data, mean_forecast, conf_int)

运行结果如下:
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android中同步屏障(Sync Barrier)介绍

在 Android 中,“同步屏障”(Sync Barrier)是 MessageQueue 中的一种机制,允许系统临时忽略同步消息,以便优先处理异步消息。这在需要快速响应的任务(如触摸事件和动画更新)中尤为重要。 在 An…

突破职场瓶颈,实现个人成长

在职场生涯中,我们总会遇到各种各样的瓶颈。这些瓶颈如同成长道路上的荆棘,让我们感到困惑、焦虑甚至恐惧。然而,瓶颈并非无法逾越,只要我们掌握正确的方法,勇敢面对,就能顺利突破,实现个人成长…

ubuntu 24.04中安装 Easyconnect,并解决版本与服务器不匹配问题

下载安装包 下载地址 https://software.openkylin.top/openkylin/yangtze/pool/all/ 页面搜索 easyconnect 选择 easyconnect_7.6.7.3.0_amd64.deb安装 sudo dpkg --install easyconnect_7.6.7.3.0_amd64.deb卸载 sudo dpkg --remove easyconnect出现的问题 安装以后第…

判断是否是变位词

题目:给定两个单词,判断这两个单词是否是变位词。如果两个单词的字母完全相同,只是位置有所不同,则称这两个单词为变位词。例如eat和tea是变位词。 答:问题分析:判断是否为变位词,只需要分别统计…

解决python matplotlib画图无法显示中文的问题

在用matplotlib做一个简单的可视化统计时,由于标签是中文,无法显示,只是显示出来一些方框(如图) 问题在于,当前matplotlib使用的字体不支持中文,我们进行替换就可以了 我想替换为黑体&#xff…

Docker:网络

Docker:网络 Docker 网络架构CNMLibnetwork驱动网络类型 命令docker network lsdocker network inspectdocker network createdocker network connectdocker network disconnectdocker network prunedocker network rm 网络操作bridgehostcontainernone Docker 网络…

力扣排序268题 数字丢失

题目: 丢失的数字 给定一个包含[0,n]中n各数的数组nums,找出[0,n]这个范围 内没有出现在数组中的那个数。 示例1: 输出:n 3,因为有3个数字,所以所有的数字都在范围 [0,3]内。2是丢失的数字,因为它没有出现…

自动化测试类型与持续集成频率的关系

持续集成是敏捷开发的一个重要实践,可是究竟多频繁的集成才算“持续”集成? 一般来说,持续集成有3种常见的集成频率,分别是每分钟集成、每天集成和每迭代集成。项目组应当以怎样的频率进行集成,这取决于测试策略&…

Gitlab-runner running on Kubernetes - hostAliases

*Config like this. *That in your helm values.yaml.

从头开始学PHP之面向对象

首先介绍下最近情况,因为最近入职了且通勤距离较远,导致精力不够了,而且我发现,人一旦上了班,下班之后就不想再进行任何脑力劳动了(对大部分牛马来说,精英除外)。 话不多说进入今天的…

【综合算法学习】(第十五篇)

目录 图像渲染(medium) 题目解析 讲解算法原理 编写代码 岛屿数量(medium) 题目解析 讲解算法原理 编写代码 图像渲染(medium) 题目解析 1.题目链接:. - 力扣(LeetCode&…

教育技术革新:SpringBoot在线试题库系统开发

2 相关技术 2.1 Spring Boot框架简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Sprin…

OTFS延迟多普勒信道模型(信道模型代码)

一、信道模型公式 1、延迟多普勒域信道模型 在一个M*N维的延迟多普勒域中,定义M为子载波数,子载波间隔为 对应倒数时隙长度为,信号总长度为,L-1表示最大径数。 公式中冲激响应延迟域移动的分辨率,如下图中Delay轴的一格也就是即,多…

Failed to search for file: Cannot update read-only repo

今天在读《Linux就该这么学》并上机操作RedHat Linux 8。结果在执行指令时却出现了问题: 我明明已经是root权限了,我于是上网去找,但也没看到合适的解答。为什么会和书上的操作结果不一样。 后来我突然意识到是不是我打了不该打的空格,于是…

Android中SurfaceView与GLSurfaceView 的关系

SurfaceView 与 GLSurfaceView 的关系 在 Android 开发中,SurfaceView 和 GLSurfaceView 是实现自定义渲染效果的关键组件。它们提供了不同的渲染方式,适用于不同的应用场景。我们将通过以下几个方面详细说明 SurfaceView 和 GLSurfaceView 的特点及实现…

游戏引擎中的颜色科学

游戏引擎中的渲染组件的作用是生成一个二维图片,在特定的时间从给定的视点观察的方向看到的一个三维空间的状态。他们的生成每一张图片都会被称为帧,他们生成的速度称为帧率。 像素 在每一帧中,游戏引擎的视觉输出基本上是一大堆彩色像素&a…

计算机网络-以太网小结

前导码与帧开始分界符有什么区别? 前导码--解决帧同步/时钟同步问题 帧开始分界符-解决帧对界问题 集线器 集线器通过双绞线连接终端, 学校机房的里面就有集线器 这种方式仍然属于共享式以太网, 传播方式依然是广播 网桥: 工作特点: 1.如果转发表中存在数据接收方的端口信息…

D56【python 接口自动化学习】- python基础之异常

day56 异常的产生与分类 学习日期:20241102 学习目标:模块与标准库 -- 72 初始异常:异常的产生与分类 学习笔记: 什么是异常 异常的分类 总结 引发异常时,代码会进行中断exception-所有内置的非系统退出类异常都派…

轴承性能对步进电机的影响

步进电机作为一种重要的电动机类型,在工业自动化、机器人技术以及各种机械设备中得到了广泛应用。步进电机的性能直接关系到其控制精度、响应速度和可靠性,而其中一个关键的组成部分——轴承,往往被认为是影响步进电机性能的一个重要因素。 一…

Java项目实战II基于Spring Boot的个人云盘管理系统设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 基于Spring Boot的个人云盘管理系统设计…