集成学习(上):机器学习基础task2-掌握基本的回归模型

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 集成学习(上):机器学习基础task2-掌握基本的回归模型

学习内容来源链接

2. 使用sklearn构建完整的机器学习项目流程

一般来说,一个完整的机器学习项目分为以下步骤:

  • 明确项目任务:回归/分类
  • 收集数据集并选择合适的特征。
  • 选择度量模型性能的指标。
  • 选择具体的模型并进行训练以优化模型。
  • 评估模型的性能并调参。

2.1 使用sklearn构建完整的回归项目

(1) 收集数据集并选择合适的特征:

在数据集上我们使用我们比较熟悉的Boston房价数据集,原因是:

  • 第一个,我们通过这些简单的数据集快速让我们上手sklearn,以及掌握sklearn的相关操作。
  • 第二个,我们用简单的数据集能更加清晰地介绍机器学习的相关模型,避免在处理数据上花费较大的精力。

如果您对具体的项目感兴趣,我们会在第六章给出三个大型的案例让大家体验。

from sklearn import datasets
boston = datasets.load_boston()     # 返回一个类似于字典的类
X = boston.data
y = boston.target
features = boston.feature_names
boston_data = pd.DataFrame(X,columns=features)
boston_data["Price"] = y
boston_data.head()

各个特征的相关解释:

  • CRIM:各城镇的人均犯罪率
  • ZN:规划地段超过25,000平方英尺的住宅用地比例
  • INDUS:城镇非零售商业用地比例
  • CHAS:是否在查尔斯河边(=1是)
  • NOX:一氧化氮浓度(/千万分之一)
  • RM:每个住宅的平均房间数
  • AGE:1940年以前建造的自住房屋的比例
  • DIS:到波士顿五个就业中心的加权距离
  • RAD:放射状公路的可达性指数
  • TAX:全部价值的房产税率(每1万美元)
  • PTRATIO:按城镇分配的学生与教师比例
  • B:1000(Bk - 0.63)^2其中Bk是每个城镇的黑人比例
  • LSTAT:较低地位人口
  • Price:房价

(2) 选择度量模型性能的指标:

image.png


https://scikit-learn.org/stable/modules/model_evaluation.html#regression-metrics

在这个案例中,我们使用MSE均方误差为模型的性能度量指标。

(3) 选择具体的模型并进行训练

  • 线性回归模型
    回归这个概念是19世纪80年代由英国统计学家郎西斯.高尔顿在研究父子身高关系提出来的,他发现:在同一族群中,子代的平均身高介于父代的身高以及族群的平均身高之间。具体而言,高个子父亲的儿子的身高有低于其父亲身高的趋势,而矮个子父亲的儿子身高则有高于父亲的身高的趋势。也就是说,子代的身高有向族群平均身高"平均"的趋势,这就是统计学上"回归"的最初含义。回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(特征)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。通常使用曲线/线来拟合数据点,目标是使曲线到数据点的距离差异最小。而线性回归就是回归问题中的一种,线性回归假设目标值与特征之间线性相关,即满足一个多元一次方程。通过构建损失函数,来求解损失函数最小时的参数w :
    image.png

(a) 最小二乘估计:

我们需要衡量真实值yi与线性回归模型的预测值wTxi之间的差距,在这里我们和使用二范数的平方和L(w)来描述这种差距,即:

image.png


© 概率视角:

image.png


下面,我们使用sklearn的线性回归实例来演示:

https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LinearRegression.html#sklearn.linear_model.LinearRegression

from sklearn import linear_model      # 引入线性回归方法
lin_reg = linear_model.LinearRegression()       # 创建线性回归的类
lin_reg.fit(X,y)        # 输入特征X和因变量y进行训练
print("模型系数:",lin_reg.coef_)             # 输出模型的系数
print("模型得分:",lin_reg.score(X,y))    # 输出模型的决定系数R^2

  • 线性回归的推广
    在线性回归中,我们假设因变量与特征之间的关系是线性关系,这样的假设使得模型很简单,但是缺点也是显然的,那就是当数据存在非线性关系时,我们使用线性回归模型进行预测会导致预测性能极其低下,因为模型的形式本身是线性的,无法表达数据中的非线性关系。我们一个很自然的想法就是去推广线性回归模型,使得推广后的模型更能表达非线性的关系。
    (a) 多项式回归:
    为了体现因变量和特征的非线性关系,一个很自然而然的想法就是将标准的线性回归模型:
    image.png
    换成一个多项式函数:
    image.png
    对于多项式的阶数d不能取过大,一般不大于3或者4,因为d越大,多项式曲线就会越光滑,在X的边界处有异常的波动。(图中的边界处的4阶多项式拟合曲线的置信区间(虚线表示置信区间)明显增大,预测效果的稳定性下降。)

(b) 广义可加模型(GAM):

广义可加模型GAM实际上是线性模型推广至非线性模型的一个框架,在这个框架中,每一个变量都用一个非线性函数来代替,但是模型本身保持整体可加性。GAM模型不仅仅可以用在线性回归的推广,还可以将线性分类模型进行推广。具体的推广形式是:

标准的线性回归模型:

image.png


GAM模型的优点与不足:

  • 优点:简单容易操作,能够很自然地推广线性回归模型至非线性模型,使得模型的预测精度有所上升;由于模型本身是可加的,因此GAM还是能像线性回归模型一样把其他因素控制不变的情况下单独对某个变量进行推断,极大地保留了线性回归的易于推断的性质。
  • 缺点:GAM模型会经常忽略一些有意义的交互作用,比如某两个特征共同影响因变量,不过GAM还是能像线性回归一样加入交互项x(i)×x(j)的形式进行建模;但是GAM模型本质上还是一个可加模型,如果我们能摆脱可加性模型形式,可能还会提升模型预测精度,详情请看后面的算法。

(a) 多项式回归实例介绍:

https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.PolynomialFeatures.html?highlight=poly#sklearn.preprocessing.PolynomialFeatures

sklearn.preprocessing.PolynomialFeatures(degree=2, *, interaction_only=False, include_bias=True, order=‘C’):

  • 参数:
    degree:特征转换的阶数。
    interaction_onlyboolean:是否只包含交互项,默认False 。
    include_bias:是否包含截距项,默认True。
    order:str in {‘C’, ‘F’}, default ‘C’,输出数组的顺序。
from sklearn.preprocessing import PolynomialFeatures
X_arr = np.arange(6).reshape(3, 2)
print("原始X为:\n",X_arr)
poly = PolynomialFeatures(2)
print("2次转化X:\n",poly.fit_transform(X_arr))
poly = PolynomialFeatures(interaction_only=True)
print("2次转化X:\n",poly.fit_transform(X_arr))

其实就是对数据预处理的一个过程,利用多项式的方式,增加特征。

关于这段代码比较好的解释

(b) GAM模型实例介绍:

安装pygam:pip install pygam

https://github.com/dswah/pyGAM/blob/master/doc/source/notebooks/quick_start.ipynb

from pygam import LinearGAM
gam = LinearGAM().fit(boston_data[boston.feature_names], y)
gam.summary()

  • 回归树:
    基于树的回归方法主要是依据分层和分割的方式将特征空间划分为一系列简单的区域。对某个给定的待预测的自变量,用他所属区域中训练集的平均数或者众数对其进行预测。由于划分特征空间的分裂规则可以用树的形式进行概括,因此这类方法称为决策树方法。决策树由结点(node)和有向边(diredcted edge)组成。结点有两种类型:内部结点(internal node)和叶结点(leaf node)。内部结点表示一个特征或属性,叶结点表示一个类别或者某个值。区域R 1 , R 2 R_1,R_2R1,R2等称为叶节点,将特征空间分开的点为内部节点。

    建立回归树的过程大致可以分为以下两步:

image.png

如以下生成的关于运动员在棒球大联盟数据的回归树:回归树与线性模型的比较:线性模型的模型形式与树模型的模型形式有着本质的区别,具体而言,线性回归对模型形式做了如下假定:

image.png

那问题来了,哪种模型更优呢?这个要视具体情况而言,如果特征变量与因变量的关系能很好的用线性关系来表达,那么线性回归通常有着不错的预测效果,拟合效果则优于不能揭示线性结构的回归树。反之,如果特征变量与因变量的关系呈现高度复杂的非线性,那么树方法比传统方法更优。树模型的优缺点:

  • 树模型的解释性强,在解释性方面可能比线性回归还要方便。
  • 树模型更接近人的决策方式。
  • 树模型可以用图来表示,非专业人士也可以轻松解读。
  • 树模型可以直接做定性的特征而不需要像线性回归一样哑元化。
  • 树模型能很好处理缺失值和异常值,对异常值不敏感,但是这个对线性模型来说却是致命的。
  • 树模型的预测准确性一般无法达到其他回归模型的水平,但是改进的方法很多。

sklearn使用回归树的实例:

https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeRegressor.html?highlight=tree#sklearn.tree.DecisionTreeRegressor

sklearn.tree.DecisionTreeRegressor(*, criterion='mse', splitter='best', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, presort='deprecated', ccp_alpha=0.0)

  • 参数:(列举几个重要的,常用的,详情请看上面的官网)
    criterion:{“ mse”,“ friedman_mse”,“ mae”},默认=“ mse”。衡量分割标准的函数 。
    splitter:{“best”, “random”}, default=”best”。分割方式。
    max_depth:树的最大深度。
    min_samples_split:拆分内部节点所需的最少样本数,默认是2。
    min_samples_leaf:在叶节点处需要的最小样本数。默认是1。
    min_weight_fraction_leaf:在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。如果未提供sample_weight,则样本的权重相等。默认是0。
from sklearn.tree import DecisionTreeRegressor    
reg_tree = DecisionTreeRegressor(criterion = "mse",min_samples_leaf = 5)
reg_tree.fit(X,y)
reg_tree.score(X,y)

  • 支持向量机回归(SVR)在介绍支持向量回归SVR之前,我们先来了解下约束优化的相关知识:
  • 约束优化问题§:
    image.png
    我们假设x为满足以上条件的局部最优解,p=f(x),我们的目的就是要找到xp,满足不等式和等式约束的x集合成为可行域,记作S。
  • KKT条件(最优解的一阶必要条件)
    因为KKT条件是最优化的相关内容,在本次开源学习中并不是重点,因此在这里我用一个更加简单的例子说明KKT条件,严格的证明请参见凸优化相关书籍。
    在这个例子中,我们考虑:(x为我们的最优解)
    image.png

    image.png
  • 对偶理论:
    为什么要引入对偶问题呢?是因为原问题与对偶问题就像是一个问题两个角度去看,如利润最大与成本最低等。有时侯原问题上难以解决,但是在对偶问题上就会变得很简单。再者,任何一个原问题在变成对偶问题后都会变成一个凸优化的问题,这点我们后面会有介绍。下面我们来引入对偶问题:
    首先,我们的原问题§是:
    image.png
    image.png
  • 支持向量回归SVR
    在介绍完了相关的优化知识以后,我们开始正式学习支持向量回归SVR。

在线性回归的理论中,每个样本点都要计算平方损失,但是SVR却是不一样的。SVR认为:落在f(x)ϵ 邻域空间中的样本点不需要计算损失,这些都是预测正确的,其余的落在ϵ \epsilonϵ邻域空间以外的样本才需要计算损失,因此:


image.png

image.png

sklearn中使用SVR实例:

sklearn.svm.SVR(*, kernel='rbf', degree=3, gamma='scale', coef0=0.0, tol=0.001, C=1.0, epsilon=0.1, shrinking=True, cache_size=200, verbose=False, max_iter=-1)

https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html?highlight=svr#sklearn.svm.SVR

  • 参数:
    kernel:核函数,{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, 默认=’rbf’。(后面会详细介绍)
    degree:多项式核函数的阶数。默认 = 3。
    C:正则化参数,默认=1.0。(后面会详细介绍)
    epsilon:SVR模型允许的不计算误差的邻域大小。默认0.1。
from sklearn.svm import SVR
from sklearn.preprocessing import StandardScaler     # 标准化数据
from sklearn.pipeline import make_pipeline   # 使用管道,把预处理和模型形成一个流程
reg_svr = make_pipeline(StandardScaler(), SVR(C=1.0, epsilon=0.2))
reg_svr.fit(X, y)
reg_svr.score(X,y)

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
15天前
|
人工智能 Kubernetes jenkins
容器化AI模型的持续集成与持续交付(CI/CD):自动化模型更新与部署
在前几篇文章中,我们探讨了容器化AI模型的部署、监控、弹性伸缩及安全防护。为加速模型迭代以适应新数据和业务需求,需实现容器化AI模型的持续集成与持续交付(CI/CD)。CI/CD通过自动化构建、测试和部署流程,提高模型更新速度和质量,降低部署风险,增强团队协作。使用Jenkins和Kubernetes可构建高效CI/CD流水线,自动化模型开发和部署,确保环境一致性并提升整体效率。
|
20天前
|
存储 人工智能 测试技术
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
141061 20
小鱼深度评测 | 通义灵码2.0,不仅可跨语言编码,自动生成单元测试,更炸裂的是集成DeepSeek模型且免费使用,太炸裂了。
|
1月前
|
机器学习/深度学习 人工智能 自然语言处理
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
|
8天前
|
机器学习/深度学习 人工智能 自然语言处理
云上一键部署通义千问 QwQ-32B 模型,阿里云 PAI 最佳实践
3月6日阿里云发布并开源了全新推理模型通义千问 QwQ-32B,在一系列权威基准测试中,千问QwQ-32B模型表现异常出色,几乎完全超越了OpenAI-o1-mini,性能比肩Deepseek-R1,且部署成本大幅降低。并集成了与智能体 Agent 相关的能力,够在使用工具的同时进行批判性思考,并根据环境反馈调整推理过程。阿里云人工智能平台 PAI-Model Gallery 现已经支持一键部署 QwQ-32B,本实践带您部署体验专属 QwQ-32B模型服务。
|
1月前
|
IDE Linux API
轻松在本地部署 DeepSeek 蒸馏模型并无缝集成到你的 IDE
本文将详细介绍如何在本地部署 DeepSeek 蒸馏模型,内容主要包括 Ollama 的介绍与安装、如何通过 Ollama 部署 DeepSeek、在 ChatBox 中使用 DeepSeek 以及在 VS Code 中集成 DeepSeek 等。
1446 14
轻松在本地部署 DeepSeek 蒸馏模型并无缝集成到你的 IDE
|
2天前
|
机器学习/深度学习 人工智能 边缘计算
DistilQwen2.5蒸馏小模型在PAI-ModelGallery的训练、评测、压缩及部署实践
DistilQwen2.5 是阿里云人工智能平台 PAI 推出的全新蒸馏大语言模型系列。通过黑盒化和白盒化蒸馏结合的自研蒸馏链路,DistilQwen2.5各个尺寸的模型在多个基准测试数据集上比原始 Qwen2.5 模型有明显效果提升。这一系列模型在移动设备、边缘计算等资源受限的环境中具有更高的性能,在较小参数规模下,显著降低了所需的计算资源和推理时长。阿里云的人工智能平台 PAI,作为一站式的机器学习和深度学习平台,对 DistilQwen2.5 模型系列提供了全面的技术支持。本文详细介绍在 PAI 平台使用 DistilQwen2.5 蒸馏小模型的全链路最佳实践。
|
18天前
|
人工智能 IDE 测试技术
用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用
通义灵码, 作为国内首个 AI 程序员,从最开始的内测到公测,再到通义灵码正式发布第一时间使用,再到后来使用企业定制版的通义灵码,再再再到现在通义灵码2.0,我可以说“用着”通义灵码成长的为数不多的程序员之一了吧。咱闲言少叙,直奔主题!今天,我会聊一聊通义灵码的新功能和通义灵码2.0与1.0的体验感。
|
18天前
|
人工智能 自然语言处理 搜索推荐
阿里云 AI 搜索开放平台集成 DeepSeek 模型
阿里云 AI 搜索开放平台最新上线 DeepSeek -R1系列模型。
|
23天前
|
人工智能 自然语言处理 搜索推荐
云上玩转DeepSeek系列之三:PAI-RAG集成联网搜索,构建企业级智能助手
本文将为您带来“基于 PAI-RAG 构建 DeepSeek 联网搜索+企业级知识库助手服务”解决方案,PAI-RAG 提供全面的生态能力,支持一键部署至企业微信、微信公众号、钉钉群聊机器人等,助力打造多场景的AI助理,全面提升业务效率与用户体验。
|
7天前
|
机器学习/深度学习 传感器 数据采集
基于机器学习的数据分析:PLC采集的生产数据预测设备故障模型
本文介绍如何利用Python和Scikit-learn构建基于PLC数据的设备故障预测模型。通过实时采集温度、振动、电流等参数,进行数据预处理和特征提取,选择合适的机器学习模型(如随机森林、XGBoost),并优化模型性能。文章还分享了边缘计算部署方案及常见问题排查,强调模型预测应结合定期维护,确保系统稳定运行。
60 0

热门文章

最新文章