人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解

大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程4-sklearn机器学习之回归问题与代码详解。回归分析是统计学和机器学习中的一种重要方法,用于研究因变量和自变量之间的关系。在机器学习中,回归算法被广泛应用于预测分析、趋势分析等领域。本文将介绍sklearn机器学习库中的一些常用回归算法,包括线性回归、Lasso回归、岭回归、多任务岭回归、核岭回归以及SVM-SVR模型。我们将分别介绍这些算法的数学原理和公式,并配套完整可运行代码。

文章目录

  • sklearn机器学习中的回归介绍与代码详解
    • 1. 线性回归
      • 线性回归的数学原理
      • 线性回归的代码实现
    • 2. Lasso回归和岭回归
      • Lasso回归和岭回归的数学原理
      • Lasso回归和岭回归的代码实现
    • 3. 多任务岭回归
      • 多任务岭回归的数学原理
      • 多任务岭回归的代码实现
    • 4. 核岭回归
      • 核岭回归的数学原理
      • 核岭回归的代码实现
    • 5. SVM-SVR模型
      • SVM-SVR模型的数学原理
      • SVM-SVR模型的代码实现
    • 总结

在这里插入图片描述

sklearn机器学习中的回归介绍与代码详解

1. 线性回归

线性回归是最简单的回归算法,它假设因变量和自变量之间存在线性关系。线性回归的目标是找到一条直线,使得所有数据点到这条直线的距离之和最小。这个目标可以通过最小二乘法来实现。

线性回归的数学原理

线性回归的模型可以表示为:
y = β 0 + β 1 x 1 + β 2 x 2 + ⋯ + β n x n + ε y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \cdots + \beta_nx_n + \varepsilon y=β0+β1x1+β2x2++βnxn+ε
其中, y y y是因变量, x 1 , x 2 , … , x n x_1, x_2, \ldots, x_n x1,x2,,xn是自变量, β 0 , β 1 , … , β n \beta_0, \beta_1, \ldots, \beta_n β0,β1,,βn是模型参数, ε \varepsilon ε是误差项。
最小二乘法的目标是最小化误差平方和:
J ( β ) = ∑ i = 1 m ( y i − y ^ i ) 2 = ∑ i = 1 m ( y i − ( β 0 + β 1 x i 1 + β 2 x i 2 + ⋯ + β n x i n ) ) 2 J(\beta) = \sum_{i=1}^{m}(y_i - \hat{y}_i)^2 = \sum_{i=1}^{m}(y_i - (\beta_0 + \beta_1x_{i1} + \beta_2x_{i2} + \cdots + \beta_nx_{in}))^2 J(β)=i=1m(yiy^i)2=i=1m(yi(β0+β1xi1+β2xi2++βnxin))2
其中, m m m是样本数量, y i y_i yi是第 i i i个样本的因变量值, y ^ i \hat{y}_i y^i是第 i i i个样本的预测值。

线性回归的代码实现

from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np
# 生成模拟数据
np.random.seed(0)
X = np.random.rand(100, 1)
y = 2 * X[:, 0] + 1 + np.random.randn(100) * 0.05
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
print("Mean squared error: ", mse)

2. Lasso回归和岭回归

Lasso回归和岭回归是两种常用的正则化线性回归算法。它们在普通线性回归的基础上加入了正则化项,以避免过拟合问题。

Lasso回归和岭回归的数学原理

Lasso回归的模型可以表示为:
J ( β ) = ∑ i = 1 m ( y i − ( β 0 + β 1 x i 1 + β 2 x i 2 + ⋯ + β n x i n ) ) 2 + α ∑ j = 1 n ∣ β j ∣ J(\beta) = \sum_{i=1}^{m}(y_i - (\beta_0 + \beta_1x_{i1} + \beta_2x_{i2} + \cdots + \beta_nx_{in}))^2 + \alpha \sum_{j=1}^{n}|\beta_j| J(β)=i=1m(yi(β0+β1xi1+β2xi2++βnxin))2+αj=1nβj
岭回归的模型可以表示为:
J ( β ) = ∑ i = 1 m ( y i − ( β 0 + β 1 x i 1 + β 2 x i 2 + ⋯ + β n x i n ) ) 2 + α ∑ j = 1 n β j 2 J(\beta) = \sum_{i=1}^{m}(y_i - (\beta_0 + \beta_1x_{i1} + \beta_2x_{i2} + \cdots + \beta_nx_{in}))^2 + \alpha \sum_{j=1}^{n}\beta_j^2 J(β)=i=1m(yi(β0+β1xi1+β2xi2++βnxin))2+αj=1nβj2
其中, α \alpha α是正则化参数。
在这里插入图片描述

Lasso回归和岭回归的代码实现

from sklearn.linear_model import Lasso, Ridge
# 创建Lasso回归模型
lasso_model = Lasso(alpha=0.1)
# 创建岭回归模型
ridge_model = Ridge(alpha=0.1)
# 训练模型
lasso_model.fit(X_train, y_train)
ridge_model.fit(X_train, y_train)
# 预测
lasso_pred = lasso_model.predict(X_test)
ridge_pred = ridge_model.predict(X_test)
# 评估模型
lasso_mse = mean_squared_error(y_test, lasso_pred)
ridge_mse = mean_squared_error(y_test, ridge_pred)
print("Lasso mean squared error: ", lasso_mse)
print("Ridge mean squared error: ", ridge_mse)

3. 多任务岭回归

多任务岭回归是岭回归的扩展,用于同时解决多个回归问题。这些问题通常是相关的,因此共享相同的特征空间,但有不同的目标值。

多任务岭回归的数学原理

多任务岭回归的目标是最小化以下目标函数:
J ( B ) = 1 2 n ∑ i = 1 n ∥ y i − X i B ∥ 2 2 + α 2 ∑ j = 1 k ∥ B j ∥ 2 2 J(\mathbf{B}) = \frac{1}{2n} \sum_{i=1}^{n} \left\| \mathbf{y}_i - \mathbf{X}_i \mathbf{B} \right\|^2_2 + \frac{\alpha}{2} \sum_{j=1}^{k} \left\| \mathbf{B}_j \right\|^2_2 J(B)=2n1i=1nyiXiB22+2αj=1kBj22
其中, B \mathbf{B} B是一个 p × k p \times k p×k的系数矩阵, p p p是特征数量, k k k是任务数量, y i \mathbf{y}_i yi是第 i i i个任务的因变量向量, X i \mathbf{X}_i Xi是第 i i i个任务的自变量矩阵, α \alpha α是正则化参数。

多任务岭回归的代码实现

from sklearn.linear_model import MultiTaskLasso
# 假设我们有两个任务回归任务
X = np.random.rand(100, 10)
y = np.random.rand(100, 2)
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
# 创建多任务岭回归模型
multi_task_lasso = MultiTaskLasso(alpha=0.1)
# 训练模型
multi_task_lasso.fit(X_train, y_train)
# 预测
multi_task_pred = multi_task_lasso.predict(X_test)
# 评估模型
multi_task_mse = mean_squared_error(y_test, multi_task_pred)
print("Multi Task Lasso mean squared error: ", multi_task_mse)

4. 核岭回归

核岭回归是非线性回归方法,它使用核技巧将数据映射到高维空间,然后维空间中进行线性回归。

核岭回归的数学原理

核岭回归的目标函数为表示为:
J ( w ) = 1 2 n ∥ K w − y ∥ 2 2 + α 2 w T w J(\mathbf{w}) = \frac{1}{2n} \left\| \mathbf{K} \mathbf{w} - \mathbf{y} \right\|^2_2 + \frac{\alpha}{2} \mathbf{w}^T \mathbf{w} J(w)=2n1Kwy22+2αwTw
其中, K \mathbf{K} K是核矩阵, w \mathbf{w} w是权重向量, y \mathbf{y} y是因变量向量, α \alpha α是正则化参数。

核岭回归的代码实现

from sklearn.kernel_ridge import KernelRidge
# 创建核岭回归模型
kernel_ridge = KernelRidge(kernel='rbf', alpha=1.0)
# 训练模型
kernel_ridge.fit(X_train, y_train.ravel())
# 预测
kernel_ridge_pred = kernel_ridge.predict(X_test)
# 评估模型
kernel_ridge_mse = mean_squared_error(y_test, kernel_ridge_pred)
print("Kernel Ridge mean squared error: ", kernel_ridge_mse)

5. SVM-SVR模型

支持向量回归(SVR)是支持向量机(SVM)在回归问题上的应用。SVR的目标是找到一个最优的超平面,使得所有数据点到这个超平面的距离之和最小。

SVM-SVR模型的数学原理

SVR的目标函数可以表示为:
min ⁡ w , b , ξ , ξ ∗ 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ( ξ i + ξ i ∗ ) \min_{\mathbf{w}, b, \xi, \xi^*} \frac{1}{2} \left\| \mathbf{w} \right\|^2 + C \sum_{i=1}^{n} (\xi_i + \xi_i^*) w,b,ξ,ξmin21w2+Ci=1n(ξi+ξi)
约束条件为:
y i − w T ϕ ( x i ) − b ≤ ε + ξ i w T ϕ ( x i ) + b − y i ≤ ε + ξ i ∗ ξ i , ξ i ∗ ≥ 0 \begin{align*} y_i - \mathbf{w}^T \phi(\mathbf{x}_i) - b &\leq \varepsilon + \xi_i \\ \mathbf{w}^T \phi(\mathbf{x}_i) + b - y_i &\leq \varepsilon + \xi_i^* \\ \xi_i, \xi_i^* &\geq 0 \end{align*} yiwTϕ(xi)bwTϕ(xi)+byiξi,ξiε+ξiε+ξi0
其中, w \mathbf{w} w是权重向量, b b b是偏置项, ϕ ( x i ) \phi(\mathbf{x}_i) ϕ(xi)是将输入向量映射到高维空间的函数, ξ \xi ξ ξ ∗ \xi^* ξ是松弛变量, C C C是惩罚参数, ε \varepsilon ε是容忍误差。

SVM-SVR模型的代码实现

from sklearn.svm import SVR
# 创建SVR模型
svr = SVR(kernel='rbf', C=1.0, epsilon=0.1)
# 训练模型
svr.fit(X_train, y_train.ravel())
# 预测
svr_pred = svr.predict(X_test)
# 评估模型
svr_mse = mean_squared_error(y_test, svr_pred)
print("SVR mean squared error: ", svr_mse)

总结

本文给大家展示了线性回归、Lasso回归、岭回归、多任务岭回归、核岭回归以及SVM-SVR模型在sklearn库中的实现。每个模型都包括了模型的创建、训练、预测和评估过程。在实际应用中,您需要根据具体问题选择合适的模型,并通过调整模型参数来优化模型性能。
sklearn库为各种回归算法提供了方便的接口,使得在Python中进行回归分析变得简单高效。通过理解和实践这些算法,您可以更好地解决实际问题,并在机器学习领域取得更好的成果。

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

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

相关文章

软件开发23种设计模式

一、设计模式分类 软件开发的23种模式,主要分类有创建型模式,结构型模式,行为型模式三种,相关分类如下: 设计模式是一种面向对象编程的思想,它是由Gamma等人在《设计模式:可复用面向对象软件的…

中新青年领导人交流营走进李良济,零距离感受中医药文化的魅力

7月8日晚,2024中新青年领导人交流营在苏州正式启动。该交流营主题为“青年创业和可持续发展”,由中华全国青年联合会、新加坡全国青年理事会主办,江苏省、北京市青年联合会与苏州市人民政府承办,苏州市青年联合会与苏州工业园区管…

k8s核心操作_Ingress统一网关入口_域名访问配置_ingress域名转发规则配置_根据域名访问不同服务---分布式云原生部署架构搭建026

上一节我们已经把 ingress 安装好了可以看到 kubectl get svc -A 可以看到 出现了ingress-nginx 的service,在ingre-nginx这个命名空间中,有两个,一个是 ingress-nginx-controller 开了两个一个是对应http,一个对应https 一个是 ingress-nginx-controller-admission 对…

unordered_map和set

前言:本篇文章继续分享新的容器unordered_map和set。前边我们分享过map和set,其底层为红黑树,而unordered_map和set的底层则为哈希表,因此在unordered_map和set的实现中,我们可以效仿许多在map和set的中就分享过的一些…

银河麒麟(Kylin)KYSEC使用

1.推荐使用方法 *.临时禁用指令: setstatus disable--禁用 注:执行reboot后系统会自动启动 2.选用指令: *.永久禁用指令: setstatus disable -p *.重启后,KYSEC还是处理关闭关状态。 *.使用如下指令启用:setstatus enable …

详细介绍一下TypeScript

TypeScript (TS) 是一种由微软开发和维护的开源编程语言。它是 JavaScript 的一个超集,意味着所有的 JavaScript 代码都可以在 TypeScript 中无需修改地运行。TypeScript 添加了可选的静态类型系统,这使得开发者能够在开发大型应用程序时更早地检测和修复…

【人生苦短,我学 Python】(13)通过python内置函数实现栈、队列

Python 所有文章传送门【Python】所有文章传送门 目录 简述 / 前言1. collections 的 deque 对象2. 栈2.1 栈操作-12.2 栈操作-2 3. 队列3.1 队列操作-13.2 队列操作-2 总结 简述 / 前言 上篇文章讲完了函数部分,这篇文章主要介绍如果通过内置函数(模块…

Linux(一)线程——何为线程???Linux线程控制

文章目录 什么是线程???线程和进程的区别和联系Linux线程控制POSIX线程库创建线程线程等待线程终止线程分离 什么是线程??? 在一个程序里的一个执行路线就叫做线程(thread)。更准确的…

python用selenium网页模拟时无法定位元素解决方法1

进行网页模拟时,有时我们明明可以复制出元素的xpath,但是用selenium的xpath click无法点击到元素。这种情况有几种原因,本文写其中一种——iframe 比如下图网址,第二行出现iframe,则往下的行内元素都会定位不到&#…

编程语言:创新的例子——解构技术与艺术的交融

编程语言:创新的例子——解构技术与艺术的交融 在数字化时代的浪潮中,编程语言作为技术领域的核心要素,其创新步伐从未停歇。本文将通过四个方面、五个方面、六个方面和七个方面,深入探讨编程语言创新的例子,揭示技术…

2024最新最全【Java】全栈,零基础入门到精通

Java基础 本文章是作者的学习笔记,帮助初学者快速入门,内容讲的不是很细,适合初学者,不定时更新。 目录 Java基础数据类型1.基本类型(primitive type)1-1 整数类型1-2 浮点类型1-3 字符类型1-4 boolean类型 2.引用数据类型3.类型…

sap 批量创建销售订单

1.首先通过excel编辑好数据 2.tcode:smw0上传到服务器 3:tcode:se38执行代码 源代码如下链接: https://download.csdn.net/download/sinat_29663077/89531998?spm1001.2014.3001.5503

第9集《修习止观坐禅法要》

请大家打开讲义第二十二面,丁二、诃欲第二。 智者大师把这个止观的修行,分成十科。前面的五科是一个前方便,叫做天台二十五方便。这个方便当中的修行呢,这个地方是属于第二科、诃欲。 那么这个诃,就是诃责&#xff0…

java:将集合中的数据放到文件中

代码实现目标&#xff1a; 将集合中的数据写道文件中通过字符缓冲输出流实现 代码展示 public static void main(String[] args) throws IOException {//创建ArrayList集合ArrayList<Student> array new ArrayList<>();//创建学生对象Student s1 new Student(&…

面试总结-基础js

一、变量提升&#xff08;函数里面先形参赋值&#xff0c;再变量提升&#xff0c;最后执行代码&#xff09; 1、概念&#xff1a;当浏览器开辟出供代码执行的栈内存后&#xff0c;代码并没有自上而下立即执行&#xff0c;而是继续做了一些事情&#xff0c;把当前作用域所有带v…

python程序打包成.exe

python程序打包成.exe 安装 PyInstaller打包 Python 程序PyInstaller 命令选项生成的文件示例注意事项 将 Python 程序打包成 .exe 文件&#xff0c;可以使用 PyInstaller。PyInstaller 是一个非常流行的工具&#xff0c;可以将 Python 程序及其所有依赖项打包成一个独立的可执…

【前端】有时候你可能需要SSE而不是WebSocket

深度解析&#xff1a;轮询、SSE 和 WebSocket 在构建实时应用时&#xff0c;开发者面临多种选择&#xff0c;其中最常见的是轮询&#xff08;Polling&#xff09;、服务器推送事件&#xff08;Server-Sent Events&#xff0c;SSE&#xff09;和 WebSocket。本文将深入解析这三…

kind kubernetes(k8s虚拟环境)使用本地docker的镜像

kubernetes中&#xff0c;虽然下载镜像使用docker&#xff0c;但是存储在docker image里的镜像是不能被k8s直接使用的&#xff0c;但是kind不同&#xff0c;可以使用下面的方法&#xff0c;让kind kubernetes环境使用docker image里的镜像。 kind – Quick Start 例如&#x…

华为机考真题 -- 螺旋数字矩阵

题目描述&#xff1a; 疫情期间&#xff0c;小明隔离在家&#xff0c;百无聊赖&#xff0c;在纸上写数字玩。他发明了一种写法&#xff1a;给出数字 个数 n 和行数 m&#xff08;0 < n ≤ 999&#xff0c;0 < m ≤ 999&#xff09;&#xff0c;从左上角的 1 开始&#x…

M12电源分配器:高效率与可靠性的工业解决方案

关键词&#xff1a;M12电源分配器、M12电源接线盒、M12电源分线盒 摘要 M12电源分配器是工业环境中实现高效与可靠电源管理的现代化解决方案。该设备采用坚固的金属外壳和封闭式设计&#xff0c;保证了在严苛工业条件下的稳定运行&#xff0c;达到IP67等级的防护性能&#xf…