首页 > 编程语言 >python岭迹图绘制函数

python岭迹图绘制函数

时间:2024-11-17 11:30:10浏览次数:1  
标签:plt python 岭迹 特征 正则 train alpha 绘制

一.岭迹图是什么?

        岭迹图(Ridge Trace Plot)是一种可视化工具,用于展示岭回归中正则化参数($\alpha$)对回归系数的影响。它能帮助我们理解特征的稳定性和正则化在控制模型复杂度中的作用。

二.什么时候需要看岭迹图?

  1. 存在共线性特征时

    • 当特征间高度相关,普通最小二乘法(OLS)回归的系数会变得不稳定。
    • 岭迹图帮助选择合适的正则化强度,缓解共线性问题。
  2. 模型复杂度调整时

    • 如果模型过拟合,可以通过岭迹图观察较大的 $\alpha$ 是否能有效控制模型复杂度。
    • 如果模型欠拟合,则观察适中的 $\alpha$ 是否能有效提高拟合能力。
  3. 特征选择或降维时

    • 岭迹图可帮助识别对模型贡献较小的特征,便于特征选择或进一步降维。
  4. 解释非线性模型时

    • 尽管岭迹图主要用于线性模型,但也可以用于理解岭回归对特定问题的建模方式。

三.岭迹图能说明什么问题?

  1. 正则化的作用

    • $\alpha$ 控制模型的复杂度:小$\alpha$,模型复杂,可能过拟合;大$\alpha$,模型简单,可能欠拟合。
    • 通过观察岭迹图,可以选择一个合适的 $\alpha$,在模型复杂度和拟合能力之间取得平衡。
  2. 特征的稳定性

    • 稳定的特征对预测更有意义,不易受共线性或噪声影响。
    • 变化剧烈的特征可能需要进一步处理,比如移除、归一化或降维。
  3. 共线性问题

    • 如果某些系数在 $\alpha$ 较小时变得极大或波动剧烈,可能存在特征共线性问题。
  4. 特征重要性

    • 岭迹图可以直观展示哪些特征对预测目标最重要,以及它们的重要性如何随正则化变化。

四.分析岭迹图

  1. $\alpha$ 较小时(接近左侧)

    • 正则化强度较低,岭回归趋近于普通最小二乘法(OLS)。
    • 系数可能波动较大,尤其在共线性特征存在时,系数值可能很高甚至不稳定。
  2. $\alpha$ 增大时

    • 正则化逐渐加强,各特征的系数被逐渐压缩。
    • 特征间的共线性被削弱,系数值趋于稳定。
  3. $\alpha$ 很大时(接近右侧)

    • 强正则化将所有系数压缩接近 0。
    • 模型变得过于简单,可能导致欠拟合。

 特征行为观察

  • 稳定性:如果某条曲线随着 $\alpha$ 增大仍保持较大绝对值,说明该特征对目标变量的影响更显著、更稳定。
  • 敏感性:某些曲线在 $\alpha$ 较小时变化剧烈,表明这些特征可能高度共线或受噪声影响。

五.输出示例

  现象1:一条曲线始终接近 0

    该特征对预测目标贡献较小,可能是无关特征。

  现象2:某些曲线在 $\alpha$ 较小时波动剧烈,但逐渐趋于稳定

    这些特征可能存在共线性,但岭回归缓解了问题。

  现象3:大部分曲线在 $\alpha$ 增大时趋近 0

    说明正则化削弱了所有特征的重要性,$\alpha$ 太大可能导致欠拟合。

  通过观察这些现象,可以有效调整模型参数和特征选择,从而构建更稳健的模型。

 

 

留到最后:python岭迹图函数代码

# 绘制岭迹图
def Ridge_Plot(x_train, y_train):
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn.linear_model import Ridge

    # 确保 y_train 是一维数组
    y_train = np.ravel(y_train)  # 自动将 (n, 1) 转换为 (n,)

    # 定义正则化参数范围
    alphas = np.logspace(-4, 4, 100)

    # 存储系数
    coefs = []

    # 遍历每个正则化参数,训练岭回归模型
    for alpha in alphas:
        ridge = Ridge(alpha=alpha)
        ridge.fit(x_train, y_train)
        coefs.append(ridge.coef_)

    # 转换系数为数组
    coefs = np.array(coefs)

    # 绘制岭迹图
    plt.figure(figsize=(10, 6))
    for i in range(x_train.shape[1]):
        plt.plot(alphas, coefs[:, i], label=f'Feature {i + 1}')
    plt.xscale('log')
    plt.xlabel('Regularization Parameter (alpha)')
    plt.ylabel('Coefficients')
    plt.title('Ridge Trace Plot')
    plt.axhline(0, color='black', linestyle='--', linewidth=0.7)
    plt.legend(loc='upper right', bbox_to_anchor=(1.2, 1), ncol=1)
    plt.tight_layout()
    plt.show()

Ridge_Plot(x_train=X_train,y_train=y_train)
View Code

值得注意的是,这里顺便学一个方法:

1.abs() #取绝对值

2.(22,1)类型数据与(22,)类型数据,

 
特性(22, 1)(22,)
维度 二维(矩阵) 一维(向量)
适用场景 矩阵运算、机器学习特征输入 数组运算、数据表示
广播行为 明确列方向 没有方向,需要额外处理
相互转换方法

.squeeze()

.rabel()

.reshape(-1)

.reshape(-1, 1)

选择形状时,要根据上下文需求(是否需要明确区分行列结构)和函数的要求(如线性模型对输入特征形状的要求)来判断使用哪种形式。  

标签:plt,python,岭迹,特征,正则,train,alpha,绘制
From: https://www.cnblogs.com/hongbao/p/18550373

相关文章

  • python爬虫爬取网页中文乱码问题的解决
    一:遇到的问题1.代码点击查看代码importrequestsifname=='main':#指定URLurl='https://xxxxxx'#发送请求1.page_text=requests.get(url,headers=headers).text#打印print(page_text)2.返回的网页内容点击查看代码#省略的代码第ä¸å·宴æ¡......
  • Excel 与 Python 的强强联合:开启数据分析与处理的新大门 
     在数据处理和分析的世界里,Excel一直是大家耳熟能详、应用广泛的工具,凭借其直观的界面和丰富的函数,能够轻松应对许多基础的数据操作。而Python呢,作为一门功能强大、灵活多变的编程语言,在数据科学领域更是有着无可替代的地位。当Excel遇上Python,它们就如同默契的搭档,能......
  • python基于深度学习的音乐推荐方法研究系统
    需求设计一款好的音乐推荐系统其目的是为用户进行合理的音乐推荐,普通的用户在登录到系统之后,能够通过搜索的方式获取与输入内容相关的音乐推荐,而以管理员登录到系统之后,则可以进行徐昂管的数据管理等内容操作。此次的需求主要有以下的一些方面:(1)用户的登录过程实现,要实现为......
  • 基于大数据python 王者荣耀战队数据分析系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......
  • python taichi 加速 dither仿色抖动算法
    教程9种dither算法与历史发展wiki:bayer有序抖动python生成任意规模bayer矩阵知乎:dither启发的艺术效果,半调/柱形taichindarray文档代码实现taichi_dither.py#!/bin/envpythonimporttaichiastiimportnumpyasnpimportcv2fromcopyimportdeepcopyti.init(......
  • Python--scikit-learn
    数据集sklearn.datasetsfromsklearn.datasetsimportload_iris,fetch_20newsgroups小数据集下载load_xxx大数据集下载fetch_xxx模型KNNK-近邻算法参考距离计算k值选择kd树fromsklearn.neighborsimportKNeighborsClassifierfromsklearn.neighborsimpor......
  • 使用python语言实现获取当前时间,按照电子表样式打印到控制台
    使用python语言实现获取当前时间,按照电子表样式打印到控制台clock.py1fromdatetimeimportdatetime23#数字04zero_line_01='---'5zero_line_02='||'6zero_line_03='||'7zero_line_04='||'8zer......
  • 【动手做】Python实现线性回归
    线性回归是机器学习中形式比较简单的模型,能够很好的进行推导和求解,也便于图形化展示。关于线性回归的概念和表示,在线性回归的概念与表示有比较详细的的介绍。本文通过手动实现、调用scikit-learn类库两种方式演示了线性回归模型,并通过matplotlib进行了可视化展示。实现过程本......
  • python实现十进制转换二进制,tkinter界面
    目录需求效果代码实现代码解释需求python实现十进制转换二进制效果代码实现importtkinterastkfromtkinterimportmessageboxdefconvert_to_binary():try:#获取输入框中的十进制数decimal_number=int(entry.get())#转......
  • Python 语法基础:赋值、深浅拷贝、可变与不可变对象
    Python是一种广泛使用的高级编程语言,其语法简洁且功能强大。本文将详细讲解Python中的赋值、深浅拷贝以及可变与不可变对象的基本概念和使用方法。一、赋值赋值是编程中最基本的操作之一,它用于将值或对象绑定到变量名。在Python中,赋值使用等号=来进行。a=10......