当前位置: 首页 > news >正文

岭回归算法拉索回归

一、岭回归算法

1、概述

  • 岭回归(Ridge Regression)是一种线性回归技术,它通过在损失函数中加入一个正则化项来解决多重共线性问题。岭回归在普通最小二乘法的基础上添加了一个 L2 范数惩罚项,这样可以减小模型的方差,从而提高模型的泛化能力

  • 损失函数公式:

  • 优点:

    • 系数收缩:相比于最小二乘法,岭回归的回归系数倾向于更小,但不会被精确地收缩到零

    • 防止过拟合:通过限制回归系数的大小,岭回归能够减少模型对训练数据的过拟合,提高了模型的泛化能力

    • 处理多重共线性:在存在高度相关自变量的情况下,传统的最小二乘法可能会导致回归系数不稳定或者过大。岭回归通过引入正则化项(L2惩罚项)来减小这种不稳定性和过大的问题

2、API

  • sklearn.linear_model.Ridge()是 sklearn 提供的实现岭回归的一个模型,参数如下:

    • alpha:default=1.0,正则项力度,也就是$\lambda$的值

    • fit_intercept:default=True,是否计算偏置

    • solver:指定用于拟合系数的方法,{‘auto’, ‘svd’, ‘cholesky’, ‘lsqr’, ‘sparse_cg’, ‘sag’, ‘saga’, ‘lbfgs’},default=’auto’

    • normalize:default=True,数据进行标准化,如果特征工程中已经做过标准化,这里就该设置为False

    • max_iter:梯度解算器的最大迭代次数

案例:

from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.preprocessing import StandardScaler
​
# 加载波士顿房价数据集
boston = datasets.load_boston()
X = boston.data
y = boston.target
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 特征工程-标准化
transfer = StandardScaler()
X_train = transfer.fit_transform(X_train)
X_test = transfer.fit_transform(X_test)
# 创建岭回归模型
model = Ridge(alpha=0.5, fit_intercept=True, solver='auto', max_iter=10000)
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
# 输出结果
print('均方误差:', mse)
print('决定系数:', r2)
print('模型得分:', model.score(X_test, y_test))
print('模型系数:', model.coef_)
print('模型截距:', model.intercept_)

二.拉索回归Lasso

1.1 损失函数公式

Lasso回归是一种线性回归模型,它通过添加所有权重的绝对值之和(L1)来惩罚模型的复杂度。

Lasso回归的目标是最小化以下损失函数:

$\text{J(w)}= \frac{1}{2n}\sum{i=1}^n (h_w(x_i)-y_i)^2 + \lambda \sum{j=1}^p |w_j|$

其中:

  • $n $ 是样本数量,

  • $ p $ 是特征的数量,

  • $ y_i $是第 $ i $ 个样本的目标值,

  • $ x_i $ 是第 $ i $ 个样本的特征向量,

  • $w$是模型的参数向量,

  • $\lambda $ 是正则化参数,控制正则化项的强度。

特点:

  • 拉索回归可以将一些权重压缩到零,从而实现特征选择。这意味着模型最终可能只包含一部分特征。

  • 适用于特征数量远大于样本数量的情况,或者当特征间存在相关性时,可以从中选择最相关的特征。

  • 拉索回归产生的模型可能更简单,因为它会去除一些不重要的特征。

1.2 API

sklearn.linear_model.Lasso()

参数:

  1. alpha (float, default=1.0):

    • 控制正则化强度;必须是非负浮点数。较大的 alpha 增加了正则化强度。

  2. fit_intercept (bool, default=True):

    • 是否计算此模型的截距。如果设置为 False,则不会使用截距(即数据应该已经被居中)。

  3. precompute (bool or array-like, default=False):

    • 如果为 True,则使用预计算的 Gram 矩阵来加速计算。如果为数组,则使用提供的 Gram 矩阵。

  4. copy_X (bool, default=True):

    • 如果为 True,则复制数据 X,否则可能对其进行修改。

  5. max_iter (int, default=1000):

    • 最大迭代次数。

  6. tol (float, default=1e-4):

    • 精度阈值。如果更新后的系数向量减去之前的系数向量的无穷范数除以 1 加上更新后的系数向量的无穷范数小于 tol,则认为收敛。

  7. warm_start (bool, default=False):

    • 当设置为 True 时,再次调用 fit 方法会重新使用之前调用 fit 方法的结果作为初始估计值,而不是清零它们。

  8. positive (bool, default=False):

    • 当设置为 True 时,强制系数为非负。

  9. random_state (int, RandomState instance, default=None):

    • 随机数生成器的状态。用于随机初始化坐标下降算法中的随机选择。

  10. selection ({'cyclic', 'random'}, default='cyclic'):

    • 如果设置为 'random',则随机选择坐标进行更新。如果设置为 'cyclic',则按照循环顺序选择坐标。

属性:

  1. coef_

    • 系数向量或者矩阵,代表了每个特征的权重。

  2. intercept_

    • 截距项(如果 fit_intercept=True)。

  3. n_iter_

    • 实际使用的迭代次数。

  4. n_features_in_ (int):

    • 训练样本中特征的数量。

1.3 示例

from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import numpy as np
​
# 加载波士顿房价数据集
data = fetch_california_housing(data_home="./src")
X, y = data.data, data.target
​
# 划分训练集和测试集
X_train, x_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
​
# 创建Lasso回归模型
lasso = Lasso(alpha=0.1)  # alpha是正则化参数
​
# 训练模型
lasso.fit(X_train, y_train)
​
# 得出模型
print("权重系数为:\n", lasso.coef_)  #权重系数与特征数一定是同样的个数。
print("偏置为:\n", lasso.intercept_)
​
#模型评估
y_predict = lasso.predict(x_test)
print("预测的数据集:\n", y_predict)
error = mean_squared_error(y_test, y_predict)
print("均方误差为:\n", error)
​
​
http://www.dtcms.com/a/344105.html

相关文章:

  • LeeCode 40.组合总和II
  • 数据结构之深入探索归并排序
  • 西门子S7-1200系列基本组态常见问题
  • 【C++】多态(详解)
  • Debezium监听MySQL binlog并实现有状态重启
  • 工业环境电缆火灾预防的分布式光纤在线监测
  • 质谱数据解读
  • 【微服务的数据一致性分发问题】究极解决方案
  • Unity设置UI显示区域
  • 主题配色下的背景透明度
  • uniapp plus.io API 封装文件读写方法
  • 【IDEA2017】使用设置+创建项目的不同方式
  • GaussDB SQL引擎(1)-SQL执行流程与解析器和优化器
  • 【Qt调试】断点时,Expressions不能查看变量
  • 新手向:用FastAPI快速构建高性能Web服务
  • 单北斗变形监测系统应用指南
  • c++:MFC中sqlite3的使用(附实际案例)
  • VScode远程连接Ubuntu报错问题分析
  • 表格识别技术:通过图像处理与深度学习,将非结构化表格转化为可编辑结构化数据,推动智能化发展
  • Mac电脑英特尔版本最新系统15.6.1安装php环境
  • 机试备考笔记 18/31
  • 使用 JS 渲染页面并导出为PDF 常见问题与修复
  • Laravel 使用阿里云OSS S3 协议文件上传
  • 高效稳定的仁懋MOSFET系列,打造卓越服务器电源
  • 【C++闯关笔记】封装②:友元与模板
  • git新建项目如何推送到远程仓库
  • 深度学习②【优化算法(重点!)、数据获取与模型训练全解析】
  • 医疗AI中的电子病历智能化:Model Context Protocol使用从规则编码到数据涌现
  • 齐次变换矩阵的逆变换:原理与SymPy实现
  • 零音乐基础想创作?通过cpolar,ACE-Step远程编曲如此简单