【机器学习】基扩展的基本概念以及其中的多项式回归、样条方法和广义可加模型的简单介绍(含python代码实例)

本文主要是介绍【机器学习】基扩展的基本概念以及其中的多项式回归、样条方法和广义可加模型的简单介绍(含python代码实例),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

基扩展是提升模型性能的重要工具,正确选择和应用基扩展方法可以显著提高模型的预测能力和解释性

文章目录

  • 引言
  • 一、基扩展
    • 1.1 基扩展定义
    • 1.2 基扩展方法
      • 1.2.1 多项式基扩展
      • 1.2.2 样条基扩展
      • 1.2.3 径向基函数(RBF)
      • 1.2.4 傅里叶基扩展
      • 1.2.5 wavelet基扩展
      • 1.2.6 单隐藏层神经网络
    • 1.3 应用场景
    • 1.4 使用基扩展的注意点
  • 二、多项式回归
    • 2.1 基本概念
    • 2.2 特点
    • 2.3 建立多项式回归模型
    • 2.4 实践步骤
    • 2.5 注意事项
  • 三、样条方法
    • 3.1 样条的类型
      • 3.1.1 线性样条
      • 3.1.2 多项式样条
      • 3.1.3 B样条
    • 3.2 样条方法的关键特性
    • 3.3 样条方法的步骤
    • 3.4 样条方法的应用
    • 3.5 在Python中使用样条
    • 3.6 总结
  • 四、MARS(多元自适应回归样条)
    • 4.1 基本原理
    • 4.2 特点
    • 4.3 建模步骤:
    • 4.4 应用
    • 4.5 限制
    • 4.6 总结
  • 五、 广义可加模型(GAMs)
    • 5.1 基本概念
    • 5.2 特点
    • 5.3 应用
      • 实践步骤
    • 5.4 注意事项
    • 5.5 总结

一、基扩展

1.1 基扩展定义

基扩展(Basis Expansion)是机器学习和统计模型中的一种技术,用于将原始的输入变量通过某种方式转换成新的表示形式,从而增强模型的表达能力,使其能够捕捉到数据中的非线性关系

1.2 基扩展方法

1.2.1 多项式基扩展

多项式基扩展是最简单的一种基扩展方法。它通过将原始特征的所有可能组合以多项式的形式进行扩展。例如,对于两个特征 x 1 x_1 x1 x 2 x_2 x2,二次多项式基扩展可以表示为:
( x 1 , x 2 ) → ( 1 , x 1 , x 2 , x 1 2 , x 1 x 2 , x 2 2 ) (x_1, x_2) \rightarrow (1, x_1, x_2, x_1^2, x_1x_2, x_2^2) (x1,x2)(1,x1,x2,x12,x1x2,x22)
这种方法可以捕捉到特征间的交互作用,但是当特征维度较高时,多项式的维度会迅速增加,导致计算复杂度和过拟合的风险增加

1.2.2 样条基扩展

样条基扩展使用分段多项式(例如B样条)来构建基函数。样条基函数可以在局部区域提供平滑的拟合,同时在整个定义域上保持一定的光滑性。样条基扩展常用于回归分析中,特别是当数据呈现非线性趋势时

1.2.3 径向基函数(RBF)

径向基函数是一类仅依赖于样本与中心点之间距离的函数,常用的RBF包括高斯函数、多项式函数和逆多二次函数等。RBF可以用于非线性问题的建模,例如在支持向量机(SVM)中使用

1.2.4 傅里叶基扩展

傅里叶基扩展将原始特征转换成傅里叶级数的形式,适用于周期性数据的建模。它将时间序列数据表示为不同频率的正弦和余弦波的叠加

1.2.5 wavelet基扩展

小波变换是另一种基扩展方法,它通过将数据分解为不同尺度和位置的wavelet函数的加权和来捕捉时间序列的局部特征

1.2.6 单隐藏层神经网络

神经网络中的隐藏层也可以看作是一种基扩展。每个隐藏单元可以看作是一个基函数,其输出是输入的非线性函数。通过调整网络权重,可以学习到复杂的特征表示

1.3 应用场景

基扩展技术在以下场景中非常有用:

  • 当数据是非线性结构,而线性模型不足以捕捉这种结构时
  • 当需要模型具有更强的解释性时,例如通过选择特定的基函数来解释数据的特定属性
  • 在特征工程中,用于创建新的特征,以增强模型的预测能力

1.4 使用基扩展的注意点

  • 防止过拟合:基函数的数量增加可能会导致模型过于复杂,从而在训练数据上过拟合
  • 计算效率:高维基扩展可能会大大增加模型的计算成本
  • 解释性:某些基扩展方法可能会降低模型的解释性,使得结果难以解释

二、多项式回归

多项式回归是一种特殊的线性回归形式,它通过考虑预测变量的非线性项(例如平方项、立方项等)来捕捉变量间更复杂的关系。在多项式回归中,响应变量(因变量)是多个预测变量(自变量)的线性组合,而这些预测变量经过了多项式变换

2.1 基本概念

多项式回归模型可以表示为:
Y = β 0 + β 1 X + β 2 X 2 + β 3 X 3 + ⋯ + β k X k + ε Y = \beta_0 + \beta_1 X + \beta_2 X^2 + \beta_3 X^3 + \cdots + \beta_k X^k + \varepsilon Y=β0+β1X+β2X2+β3X3++βkXk+ε
其中, Y Y Y是响应变量, X X X是预测变量, β 0 , β 1 , . . . , β k \beta_0, \beta_1, ..., \beta_k β0,β1,...,βk是模型参数, ε \varepsilon ε是误差项, k k k是多项式的阶数

2.2 特点

  • 非线性关系:虽然模型是线性的(参数的线性组合),但预测变量之间的关系是非线性的
  • 灵活性:通过增加多项式的阶数,模型可以捕捉更复杂的数据结构
  • 过拟合风险:高阶多项式可能导致模型在训练数据上过拟合,泛化能力下降

2.3 建立多项式回归模型

  1. 数据准备:确定预测变量和响应变量
  2. 多项式特征生成:将原始预测变量 X X X 转换为多项式特征,包括 X , X 2 , . . . , X k X, X^2, ..., X^k X,X2,...,Xk
  3. 模型拟合:使用最小二乘法等线性回归技术拟合转换后的数据
  4. 模型评估:通过交叉验证、拟合度指标(如 R²)和图形诊断等方法评估模型性能

2.4 实践步骤

以下是在Python中使用numpysklearn实现多项式回归的简单步骤

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
# 假设X是输入特征,y是响应变量
X = np.array([1, 2, 3, 4, 5]).reshape(-1, 1)
y = np.array([2, 6, 5, 5, 12])
# 创建一个多项式回归模型,这里我们使用2阶多项式
degree = 2
model = make_pipeline(PolynomialFeatures(degree), LinearRegression())
# 拟合模型
model.fit(X, y)
# 预测新数据
X_new = np.array([6]).reshape(-1, 1)
y_pred = model.predict(X_new)
print(f"预测值: {y_pred}")

输出结果:
在这里插入图片描述

2.5 注意事项

  • 特征缩放:在进行多项式回归之前,通常需要对原始特征进行标准化或归一化,特别是当多项式的阶数较高时
  • 选择合适的阶数:应该根据数据特性和模型性能来选择合适的多项式阶数,避免过拟合
  • 正则化:在某些情况下,可以使用正则化方法(如岭回归或LASSO)来控制模型复杂度,减少过拟合

三、样条方法

样条方法(Spline Methods)是数学和统计中用于数据平滑和曲线拟合的技术。样条是一种分段定义的多项式函数,它在每个分段内部都是连续且光滑的,并且在分段点处具有预定的连续性。样条方法在数据分析和机器学习中非常有用,特别是在需要捕捉非线性关系时

3.1 样条的类型

3.1.1 线性样条

线性样条是最简单的样条,它由一系列直线段组成。每个直线段都是两个相邻数据点之间的连线

3.1.2 多项式样条

多项式样条是由多项式组成的样条,每个多项式的阶数可以是任意的。常见的多项式样条包括二次样条和三次样条

  • 二次样条:每个分段是一个二次多项式
  • 三次样条:每个分段是一个三次多项式,是最常用的样条类型,因为它可以提供平滑且灵活的拟合

3.1.3 B样条

B样条是基样条,它们是多项式样条的一种推广。B样条由一系列控制点和一个定义样条形状的多项式基函数确定

3.2 样条方法的关键特性

  • 局部性:样条方法具有局部性,这意味着修改一个数据点只会影响样条在该点附近的形状
  • 平滑性:样条在分段点处保持一定的连续性和平滑性,通常是连续的,并且一阶或二阶导数也是连续的
  • 灵活性:样条方法可以适应各种数据模式,从简单的线性关系到复杂的非线性关系

3.3 样条方法的步骤

  1. 选择样条类型:根据数据的特性和需求选择合适的样条类型
  2. 确定节点:节点是样条分段的端点,通常与数据点相对应,但也可以是其他位置
  3. 拟合样条:使用最小二乘法或其他优化技术来拟合样条,确定样条系数
  4. 评估和优化:评估样条拟合的质量,必要时调整样条参数或类型

3.4 样条方法的应用

  • 回归分析:样条回归可以用于非线性数据的建模,特别是在自变量和因变量之间的关系是非线性时
  • 数据插值:样条可以用于估计未知数据点的值
  • 图像处理:样条用于图像的平滑和形状的建模
  • 计算机图形学:在计算机辅助设计(CAD)中,样条用于创建曲线和曲面

3.5 在Python中使用样条

在Python中,可以使用scipy.interpolate模块中的函数来创建和使用样条
以下是一个使用三次样条插值的简单例子:

import numpy as np
from scipy.interpolate import CubicSpline
import matplotlib.pyplot as plt
# 原始数据点
x = np.array([0, 1, 2, 3, 4, 5])
y = np.array([0, 1, 4, 10, 18, 29])
# 创建三次样条对象
cs = CubicSpline(x, y)
# 使用样条进行插值
x_new = np.linspace(0, 5, 100)
y_new = cs(x_new)
# 绘图查看结果
plt.plot(x, y, 'o', label='data points')
plt.plot(x_new, y_new, '-', label='cubic spline')
plt.legend()
plt.show()

输出结果:
在这里插入图片描述

3.6 总结

样条方法是一种强大的工具,可以在数据分析和建模中提供灵活性和准确性。然而,需要注意的是,样条方法也可能导致过拟合,特别是在样条参数过多时。因此,在使用样条时,应该考虑模型的泛化能力和复杂性

四、MARS(多元自适应回归样条)

MARS(多元自适应回归样条)是一种非参数回归技术,它通过构建分段线性回归模型来捕捉数据中的复杂关系和非线性模式。MARS模型是由 Jerome Friedman 在1991年提出的,它结合了多元线性回归和样条回归的特点,能够自动选择模型复杂度,适用于各种数据类型的预测分析

4.1 基本原理

  1. 基本模型:MARS模型是基于基函数的线性组合。这些基函数是通过对原始预测变量进行转换得到的

  2. 样条:MARS使用样条来拟合数据中的非线性关系。样条是由多个分段定义的平滑曲线,每个分段可以捕获数据的局部特征

  3. 基函数的选择:MARS通过向前选择(forward selection)和向后消除(backward elimination)的过程来选择基函数。这个过程可以自动确定模型的最佳复杂度

  4. 模型形式:一个MARS模型可以表示为:
    f ( x ) = ∑ i = 1 k c i B i ( x ) f(x) = \sum_{i=1}^{k} c_i B_i(x) f(x)=i=1kciBi(x)
    其中, B i ( x ) B_i(x) Bi(x)是基函数, c i c_i ci是系数

4.2 特点

  • 灵活性:能够处理非线性关系和交互作用
  • 鲁棒性:对异常值不太敏感
  • 自适应性:能够根据数据自动选择模型复杂度

4.3 建模步骤:

  1. 选择基函数:使用向前选择来增加基函数,直到模型拟合度不再显著提高
  2. 剪枝:通过交叉验证来剪枝,移除不必要的基函数,避免过拟合
  3. 模型优化:使用最小二乘法来估计模型参数

4.4 应用

MARS广泛应用于各种领域,包括工程、经济学、生态学、医学等,特别是在数据呈现非线性特征时

4.5 限制

  • 当数据量非常大时,MARS可能会变得计算密集
  • 对于具有许多预测变量的高维数据,MARS可能会选择过于复杂的模型,导致过拟合

4.6 总结

在使用MARS时,需要仔细考虑模型的泛化能力,避免仅仅因为拟合训练数据而忽略了模型的实际预测能力。通过交叉验证等技术,可以帮助评估MARS模型的性能。在中国,MARS方法也被广泛应用于科研和生产中,助力决策者从复杂数据中提取有用信息,支持科学决策

五、 广义可加模型(GAMs)

广义可加模型(Generalized Additive Models,简称GAMs)是一种用于回归分析的统计模型,由 Trevor Hastie 和 Robert Tibshirani 在1986年提出。GAMs 是线性模型的推广,它允许响应变量和预测变量之间的关系是非线性的,同时保持模型的加性结构

5.1 基本概念

GAMs 的基本形式如下:
g ( μ ) = β 0 + f 1 ( X 1 ) + f 2 ( X 2 ) + ⋯ + f p ( X p ) + ε g(\mu) = \beta_0 + f_1(X_1) + f_2(X_2) + \cdots + f_p(X_p) + \varepsilon g(μ)=β0+f1(X1)+f2(X2)++fp(Xp)+ε
其中:

  • μ \mu μ是响应变量的期望值
  • g ( ⋅ ) g(\cdot) g()是连接函数,它将期望值转换为响应变量的范围
  • β 0 \beta_0 β0是截距项
  • f i ( X i ) f_i(X_i) fi(Xi)是第 i i i个预测变量 X i X_i Xi的非参数平滑函数
  • ε \varepsilon ε是误差项

5.2 特点

  • 非参数平滑函数:GAMs 允许每个预测变量都有自己的平滑函数,这意味着模型可以捕捉到复杂的非线性关系,而不需要事先指定这些关系的具体形式
  • 加性结构:模型保持加性结构,即预测变量之间的关系是独立的,这简化了模型的解释性
  • 灵活性:GAMs 提供了比传统线性模型更大的灵活性,可以适应各种数据模式
  • 连接函数:GAMs 可以使用不同的连接函数来适应不同类型的响应变量,例如二项式分布(用于分类问题)、泊松分布(用于计数数据)等

5.3 应用

GAMs 在许多领域都有应用,特别是在以下情况:

  • 当响应变量和预测变量之间的关系是非线性时
  • 当数据包含多个预测变量,每个变量可能都有不同的影响模式时
  • 当需要模型具有良好的解释性时

实践步骤

在 Python 中,可以使用 pygam 库来实现 GAMs

import pygam
import numpy as np
# 假设X是输入特征,y是响应变量
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 6, 5, 5, 12])
# 创建一个GAM模型
gam = pygam.GAM(pygam.s(0, n_splines=10))  # 使用10个样条来平滑第一个特征
# 拟合模型
gam.fit(X, y)
# 预测新数据
X_new = np.array([[6]])
y_pred = gam.predict(X_new)
print(f"预测值: {y_pred}")

输出结果:
在这里插入图片描述

5.4 注意事项

  • 过拟合风险:由于 GAMs 的灵活性,它们可能会在训练数据上过拟合。因此,需要适当的正则化(例如通过选择样条的数量)和交叉验证
  • 计算成本:与线性模型相比,GAMs 的计算成本可能更高,特别是在处理大量数据和高维特征时

5.5 总结

GAMs 是一种强大的统计工具,可以用于捕捉复杂的非线性关系,同时保持模型的解释性。正确地使用和解释 GAMs 需要一定的统计知识和实践经验

这篇关于【机器学习】基扩展的基本概念以及其中的多项式回归、样条方法和广义可加模型的简单介绍(含python代码实例)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1130049

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个