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

引言

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

一、基扩展

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 需要一定的统计知识和实践经验

  • 15
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值