sklearn实现LAR回归(Least Angle Regression)

本文利用Python的scikit - learn库实现最小角回归(LAR)算法。介绍了LAR算法的背景、原理,以加利福尼亚房价数据集为例,进行数据预处理、划分训练集和测试集,定义模型并通过网格搜索优化参数,用均方根误差和决定系数评估模型,还对结果进行可视化分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

💥 项目专栏:sklearn实现经典机器学习算法(附代码+原理介绍)


前言

🌟 哈喽,亲爱的小伙伴们,你们知道吗?最近我们的粉丝群里有好多小可爱私信问我一些关于决策树、逻辑回归等机器学习的超级有趣的问题呢!🌈 为了让大家更轻松地理解,我决定开一个超可爱的专栏,叫做 用sklearn玩转机器学习,特别适合机器学习的小新手哦!

🍬 在这个专栏里,我们会用sklearn这个超级强大的魔法工具来实现各种闪闪发光的机器学习算法!不用担心难度哦,我会用最简单、最可爱的方式,带领大家一起探索算法的神秘世界!✨

🎈 适合哪些小伙伴加入呢?当然是对机器学习感兴趣的小新手们,还有那些刚开始接触sklearn的可爱宝宝们!我们会一起学习如何用sklearn轻松实现那些看起来好厉害的机器学习算法,让新手小白也能快快乐乐地理解它们哦!

🌸 在这个专栏里,大家可以看到用sklearn实现的机器学习算法,我们不仅仅是理论学习哦,每一篇文章都会附带 完整的代码+超级可爱的原理讲解,让大家在轻松愉快的氛围中一起学习成长呢!🌼 快来加入我们的学习大冒险吧!


1704718437

🚨 我的项目环境:

  • 平台:Windows11
  • 语言环境:Python 3.10
  • 编译器:Jupyter Lab、PyCharm
  • scikit-learn:1.2.1
  • Pandas:1.3.5
  • Numpy:1.19.3
  • Scipy:1.7.3
  • Matplotlib:3.1.3

💥 项目专栏:sklearn实现经典机器学习算法(附代码+原理介绍)


一、LAR回归算法背景

🌟 最小角回归(LAR)入门 🌟

在这篇文章中,我们将深入探讨最小角回归(LAR)——一种在统计学和机器学习领域中广泛使用的方法。最小角回归以其在解决高维数据回归问题中的优势而著称,尤其是在特征选择和计算效率方面。

📖 起源与背景

  • 发展历史:最小角回归是由Bradley Efron、Trevor Hastie、Iain Johnstone和Robert Tibshirani在2004年提出的,旨在处理高维数据集中的回归问题。
  • 核心理念:最小角回归在每一步中同时考虑所有变量,以一种类似于前向逐步回归的方式逐渐增加对预测最有贡献的变量。

🌐 应用领域

  • 生物信息学:用于处理基因表达数据,识别重要的生物标记。
  • 金融分析:在量化分析和风险预测中应用。
  • 信号处理:用于信号恢复和噪声减少。
  • 大规模数据分析:在特征众多的数据集中进行有效的变量选择和回归分析。

✨ 特点

  • 高效的特征选择:能够在高维数据中识别重要特征,同时保持计算效率。
  • 适应性:适用于变量个数远大于样本数的情况。
  • 稳定性:相比于标准逐步回归,LAR在变量选择上更加稳定和精确。

虽然最小角回归在处理复杂数据集时表现出色,但它对数据的预处理和参数选择有一定的要求,以确保模型的有效性和准确性。

💡 本篇亮点

在本篇文章中,我们将利用Python中的scikit-learn库来实现 Least Angle Regression。我们不仅深入探讨了LAR的理论基础,还准备了一个实际案例,以帮助初学者理解最小角回归的应用场景,并掌握其关键实现步骤。通过这篇文章,读者可以获得关于如何在实际问题中有效应用最小角回归的宝贵知识。

二、算法原理

🌟 最小角回归(LAR):高维数据的有效处理方法 🌟

最小角回归(LAR)是一种在统计和机器学习中广泛使用的回归技术,特别适用于处理具有大量特征的高维数据集。LAR在进行回归分析时特别注重于特征选择,从而提高模型的解释性和预测准确性。

🧩 基本原理

  • 核心理念:最小角回归的核心在于其特殊的变量选择方法。LAR在每一步中调整回归系数,使得残差与最相关的预测变量之间的角度最小化,这种方法类似于前向逐步回归,但更加精细和高效。

    最小角回归的算法过程可以描述为:

    1. 从零系数开始,找到与响应变量最相关的特征。
    2. 向该特征的方向移动系数,直到另一个特征与残差有相同的相关性。
    3. 调整这两个特征的系数,直到第三个特征与残差的相关性与前两者相同。
    4. 这个过程一直持续,直到包含所有特征或达到某个停止条件。

📊 特性与优势

  • 有效的特征选择:LAR通过逐步添加变量,有效地进行特征选择,特别适合处理特征数量多于样本数量的情况。
  • 计算效率:与传统的逐步回归相比,LAR在高维数据中表现出更高的计算效率。
  • 稳定性:对于高度相关的变量,LAR提供了更加稳健的解决方案。

📈 模型应用

  • 高维数据处理:LAR在生物信息学、金融分析等高维数据处理领域有广泛应用。
  • 变量选择和压缩:在需要变量选择和数据压缩的应用中,LAR表现出色。

🌐 应用价值

最小角回归因其在高维数据分析和特征选择方面的优势,在数据科学领域得到了广泛的应用。它不仅能提供高效的模型训练方法,还能增强模型的解释能力,是处理复杂数据集的重要工具。

三、算法实现

3.1 导包

import warnings

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import Lars
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler

3.2 加载数据集

这段代码是关于加载回归数据集的,具体来说,它执行了以下几个操作:

  1. 导入数据集:首先,代码中使用了 fetch_california_housing 函数。这个函数来自于 sklearn.datasets,是 scikit-learn(一个非常流行的Python机器学习库)提供的一种方法,用于获取数据集。

  2. 加载加利福尼亚房价数据集fetch_california_housing() 函数调用的结果是加载了一个著名的公共数据集——加利福尼亚房价数据集(California Housing dataset)。这个数据集通常用于回归分析的学习和实践。

  3. 数据集结构:加载后的数据集被分为两部分:Xy

    • X 代表数据集中的特征矩阵。在这个矩阵中,每一行代表一个数据点(在这个场景下是加利福尼亚州的一个区域),每一列代表一个特征(例如,人均收入、房屋年龄等)。
    • y 代表目标变量或响应变量,即我们试图通过模型预测的值。在加利福尼亚房价数据集中,y 通常代表房屋的中位数价格。

这段代码的主要目的是准备数据,以便进行后续的数据分析和建模工作。

# 2. 加载回归数据集
housing = fetch_california_housing()
X, y = housing.data, housing.target

加利福尼亚房价数据集(California Housing dataset)是一个广泛用于回归分析的公开数据集,特别在机器学习和统计领域中应用广泛。这个数据集的特点和内容包括:

  1. 数据来源:这个数据集最初来源于1990年美国人口普查。

  2. 目的:主要用于回归分析任务,尤其是预测房价。

  3. 数据量:它包含了加利福尼亚州各区域(或街区群)的房屋信息,通常有约20640个样本点。

  4. 特征:数据集包含多个特征(或属性),通常有8个。这些特征包括:

    • MedInc:街区居民的收入中位数。
    • HouseAge:房屋年龄的中位数。
    • AveRooms:平均房间数目。
    • AveBedrms:平均卧室数目。
    • Population:街区人口。
    • AveOccup:平均房屋占用率。
    • Latitude:街区的纬度。
    • Longitude:街区的经度。
  5. 目标变量:数据集的目标变量是每个街区房屋的中位数价格。这是一个连续的数值,通常用于回归分析。

  6. 应用:这个数据集常被用于测试各种回归模型的性能,包括线性回归、LAR回归、决策树和神经网络等。

  7. 挑战:由于其特征的多样性和实际应用背景,这个数据集为预测模型的建立提供了一定的挑战,如如何处理非线性关系、如何解释模型结果等。

总的来说,加利福尼亚房价数据集是理解和实践回归分析的一个经典案例,它提供了丰富的信息来预测房价,并帮助初学者和专业人士理解数据在真实世界中的应用。

3.3 数据预处理

在这段代码中,我们进行了数据预处理的一个关键步骤:特征标准化。标准化是一种使数据符合标准正态分布(即均值为0,方差为1)的技术。这通常是机器学习中的一个重要步骤,因为许多算法的性能在标准化数据上会更好。具体来说,我们使用了 StandardScaler 类从 sklearn.preprocessing 包中。

  • 实例化 StandardScaler:首先,我们创建了 StandardScaler 类的一个实例,命名为 scaler。这个实例将用于后续的标准化过程。

  • 拟合并转换数据:通过调用 scaler.fit_transform(X),我们对数据集 X 进行了拟合和转换。在这一步中,fit 方法会计算数据集 X 的均值和标准差,然后 transform 方法会使用这些参数将每个特征转换为标准正态分布。换句话说,对于每个特征,算法都会减去其均值并除以其标准差。

这个过程有助于消除不同特征之间的尺度差异,使得模型对于所有特征的敏感度相同。特别是当特征的尺度相差很大时,标准化是非常重要的步骤。

# 3. 数据预处理
# 特征标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

3.4 划分训练集、测试集

在这段代码中,我们使用了 train_test_split 函数,这是 sklearn.model_selection 模块中的一个功能,用于将数据集划分为训练集和测试集。这是机器学习项目中的一个关键步骤,目的是确保模型可以在未见过的数据上进行测试,从而评估其泛化能力。

具体来说,train_test_split 接受几个参数:X_scaledy 分别是经过预处理(如标准化)的特征数据和对应的标签。参数 test_size=0.3 指定了测试集应占总数据集的30%,这意味着剩余的70%将用作训练集。最后,random_state=42 确保了每次代码运行时划分的方式都相同,这有助于实验的可重复性。通过这种方式,我们可以确保模型在训练时有足够的数据,并且在测试时有代表性的数据来验证模型性能。

# 5. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)

3.5 定义LAR回归模型

这段代码中的 model = Lars() 是在使用Python的scikit-learn库来定义一个最小角回归(LAR)模型的实例。在这里,Lars 是scikit-learn中的一个类,它实现了最小角回归算法,这是一种用于线性回归的特征选择方法,特别适合处理高维数据集。

最小角回归(Least Angle Regression, LAR)是一种有效的回归方法,特别在变量个数超过观测数的情况下(即“高维”情况)。LAR在选择变量(即模型中的特征)方面类似于传统的前向逐步回归,但它在每一步中采用更细致的方法来调整系数,这样可以更准确地找到最优解。

在这段代码中,Lars() 被实例化并赋值给变量 model。这意味着 model 现在表示一个LAR回归模型,可以用来对数据进行拟合和预测。此时,model 使用的是LAR的默认参数设置,但根据需要,可以对这些参数进行调整以优化模型的性能。

# 6. 定义LAR回归模型
model = Lars()

sklearn 中,Lars 类实际上是最小角回归(Least Angle Regression, LAR)的实现,它不像一些正则化线性模型(如 Lasso 或 ElasticNet)那样使用 alpha 参数来控制正则化的程度。因此,Lars 类的参数与您提到的有所不同。以下是 Lars 类的一些主要参数及其描述:

参数描述可选的值/类型
fit_intercept是否计算该模型的截距。如果设置为 False,则不会在计算中使用截距(即,数据被假设已经居中)。布尔值
verbose设置为True时,将会打印额外信息。布尔值
normalize在回归之前,输入变量是否应该被标准化。布尔值
precompute是否使用预先计算的Gram矩阵来加速计算。布尔值或数组
n_nonzero_coefs模型应保留的非零系数的最大数量。正整数
eps模型的系数变化的最小阈值,当系数变化小于这个值时,算法将停止。正浮点数
copy_X是否应该复制输入X数据,如果为False,输入X将会被覆写。布尔值
fit_path是否计算整个路径,对于某些应用来说,可能不需要。布尔值

LAR回归特别适用于处理特征数多于样本数的情况,能够有效地进行特征选择并提高计算效率。例如,通过调整n_nonzero_coefs,可以控制模型中非零系数的数量,这直接影响了特征选择的范围和模型的复杂度。选择合适的参数对于提高LAR回归模型在特定数据集上的性能至关重要。

3.6 网格搜索

这段代码使用了网格搜索(GridSearchCV)来优化最小角回归(LAR)模型的参数。首先,定义了一个参数网格 param_grid,其中包括了模型的三个可调参数:n_nonzero_coefs(非零系数的最大数量),fit_intercept(是否计算截距),和normalize(是否在回归前标准化输入变量)。对于n_nonzero_coefs,提供了三个选项(500, 1000和无限),这取决于数据集的特征数量。

接下来,使用 GridSearchCV 对象对这些参数进行网格搜索,以找到最优化的参数组合。这里设置了5折交叉验证(cv=5)和返回训练得分(return_train_score=True)。网格搜索在训练数据集 X_trainy_train 上进行,以确定最佳参数。

一旦网格搜索完成,代码使用 grid_search.best_params_ 打印出最佳参数组合,并通过 grid_search.best_estimator_ 获取最优模型实例 best_model。这意味着得到的 best_model 是根据给定的数据和参数范围调整到最佳状态的LAR模型,可以用于后续的预测或分析任务。

总的来说,这段代码演示了如何使用网格搜索和交叉验证的方法来精细调整最小角回归模型的参数,从而期望获得最佳的模型性能。

param_grid = {
    'n_nonzero_coefs': [500, 1000, 'np.inf'],  # 依赖于您的特征数量
    'fit_intercept': [True, False],
    'normalize': [True, False]
}

# 使用网格搜索,寻找最佳参数(包含训练得分)
grid_search = GridSearchCV(model, param_grid, cv=5, return_train_score=True)
grid_search.fit(X_train, y_train)

# 7. 网格搜索后的最佳参数和模型
print("最佳参数:", grid_search.best_params_)
best_model = grid_search.best_estimator_

3.7 评估指标

这段代码的目的是评估LAR回归模型在训练集和测试集上的性能。具体来说,它执行了以下步骤:

  1. 预测:首先,使用最佳模型(best_model,即通过网格搜索找到的参数最优化的LAR回归模型)来预测训练集(X_train)和测试集(X_test)的响应变量。这一步通过调用 predict 方法完成,分别生成 train_predictionstest_predictions

  2. 计算均方根误差(RMSE):接着,代码使用 mean_squared_error 函数来计算模型预测值和实际值之间的均方误差,再通过取平方根得到均方根误差(RMSE)。RMSE 是回归模型常用的性能指标,它提供了误差的平均大小。对于训练集和测试集分别计算,得到 train_rmsetest_rmse

  3. 计算决定系数(R² Score):然后,代码计算了决定系数(R² Score),使用 r2_score 函数。决定系数是衡量模型拟合优度的指标,它表示模型对数据变异性的解释程度。值越接近1,表示模型解释的变异性越多,拟合效果越好。同样地,这个指标分别对训练集和测试集计算,得到 train_r2test_r2

  4. 打印结果:最后,代码打印了这些评估指标,包括训练集和测试集的 RMSE 和 R² Score。这提供了一个关于模型性能的直观理解,包括模型在训练集上的拟合能力以及在未见数据(测试集)上的泛化能力。

总体而言,这段代码非常重要,因为它帮助我们理解和评估模型的性能,确保模型既没有过拟合(在训练数据上表现过好)也没有欠拟合(在训练数据上表现不足)。

# 8. 单独打印训练集和测试集的模型评估指标
train_predictions = best_model.predict(X_train)
test_predictions = best_model.predict(X_test)
train_rmse = np.sqrt(mean_squared_error(y_train, train_predictions))
test_rmse = np.sqrt(mean_squared_error(y_test, test_predictions))
train_r2 = r2_score(y_train, train_predictions)
test_r2 = r2_score(y_test, test_predictions)
print(f"训练集 RMSE: {train_rmse:.4f}, R2: {train_r2:.4f}")
print(f"测试集 RMSE: {test_rmse:.4f}, R2: {test_r2:.4f}")

打印结果:

最佳参数: {'fit_intercept': True, 'n_nonzero_coefs': 500, 'normalize': False}
训练集 RMSE: 0.7234, R2: 0.6093
测试集 RMSE: 0.7284, R2: 0.5958

通过这些评估指标,我们能够全面了解模型在训练数据和未知数据上的表现,判断模型是否出现了过拟合或欠拟合的现象,并对模型的泛化能力做出判断。这对于理解和改进机器学习模型至关重要。

3.8 结果可视化

之后,我们对结果进行了可视化,例如:训练曲线、真实值与预测值关系图、误差分布图。

3.8.1 训练曲线

image-20240108211150303

这段代码的主要目的是绘制LAR回归模型在网格搜索过程中的训练曲线。它展示了不同参数组合下模型在训练集和交叉验证测试集上的平均得分。具体步骤如下:

  1. 获取网格搜索结果cv_results = grid_search.cv_results_ 这行代码从网格搜索(GridSearchCV)的结果中提取了各项详细信息。cv_results_ 是一个包含了每次训练/验证过程详细结果的字典。

  2. 提取训练和测试得分:接下来,代码从这个字典中提取了 mean_train_scoremean_test_score。这两个值分别表示对于每个参数组合,模型在训练集和交叉验证测试集上的平均得分。这些得分通常用于评估模型的性能。

  3. 绘制性能曲线

    • 使用 plt.figure 设置图表大小。
    • plt.plot 用于绘制曲线,分别为训练得分和测试得分。
    • 添加了图表标题(plt.title)、坐标轴标签(plt.xlabelplt.ylabel)以及图例(plt.legend)。
  4. 展示图表:最后,plt.show() 显示了绘制好的图表。这张图表可以帮助我们直观地理解不同参数组合下模型的表现情况,包括过拟合和欠拟合的趋势。例如,如果训练得分远高于测试得分,可能表明模型过拟合;如果两者都较低,则可能是欠拟合。

总体而言,这段代码非常有用于评估模型在不同参数设置下的性能,以及选择最优的参数组合。通过这种方式,可以更好地理解模型如何在特定的数据集上表现,并据此作出调整。

# 9. 绘制模型的训练曲线
cv_results = grid_search.cv_results_
mean_train_score = cv_results['mean_train_score']
mean_test_score = cv_results['mean_test_score']

plt.figure(figsize=(10, 6))
plt.plot(mean_train_score, label='训练得分')
plt.plot(mean_test_score, label='测试得分')
plt.title('模型性能曲线')
plt.xlabel('参数组合编号')
plt.ylabel('得分')
plt.legend()
plt.show()

3.8.2 真实值与预测值关系图

image-20240108211157320

这段代码用于可视化真实值与预测值之间的关系,它是评估回归模型性能的一个直观方式。具体来说,代码执行了以下几个操作:

  1. 设置图表大小plt.figure(figsize=(10, 6)) 设置了绘图的大小,确保图表足够大,以便清晰地展示数据点。

  2. 绘制散点图plt.scatter(y_test, test_predictions) 绘制了一个散点图,其中横坐标是测试集的真实值(y_test),纵坐标是模型对测试集的预测值(test_predictions)。这样的散点图有助于直观地观察预测值与真实值的一致性。

  3. 添加坐标轴标签和标题

    • plt.xlabel('真实值')plt.ylabel('预测值') 分别设置了横轴和纵轴的标签。
    • plt.title('真实值 vs 预测值') 添加了图表的标题,表明图表的内容和目的。
  4. 绘制参考线plt.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4) 绘制了一条黑色虚线,这条线表示完美预测的情况,即预测值完全等于真实值。这条线作为参考,可以帮助我们评估预测值偏离真实值的程度。

  5. 展示图表:最后,plt.show() 显示了绘制好的图表。

通过这个图表,我们可以快速判断模型的预测性能。理想情况下,散点应该紧密地围绕着参考线分布,这表明预测值与真实值非常接近。如果点离线太远,则表明预测误差较大。这种可视化是理解和解释模型预测性能的重要工具。

# 10. 可视化真实值与预测值的关系
plt.figure(figsize=(10, 6))
plt.scatter(y_test, test_predictions)
plt.xlabel('真实值')
plt.ylabel('预测值')
plt.title('真实值 vs 预测值')
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
plt.show()

3.8.3 误差分布图

image-20240108211204917

这段代码用于绘制模型预测误差的分布图,帮助我们理解模型在预测时的误差特性。具体步骤如下:

  1. 计算误差:首先,errors = y_test - test_predictions 这行代码计算了测试集的真实值 (y_test) 和模型预测值 (test_predictions) 之间的差异,即预测误差。这个误差反映了模型预测的准确性。

  2. 设置图表大小plt.figure(figsize=(10, 6)) 设置了图表的大小,确保图表足够大,以便清晰地展示数据。

  3. 绘制直方图和核密度估计(KDE)sns.histplot(errors, kde=True) 使用 seaborn 库绘制了误差的直方图,并且加上了核密度估计(KDE)。直方图显示了不同误差值的频率分布,而 KDE 曲线提供了误差分布的平滑估计。

  4. 添加坐标轴标签和标题

    • plt.xlabel('预测误差')plt.ylabel('频率') 分别设置了横轴和纵轴的标签。
    • plt.title('误差分布图') 添加了图表的标题,说明了图表的主要内容。
  5. 展示图表plt.show() 显示了绘制好的图表。

通过这个误差分布图,我们可以直观地看到模型预测误差的分布情况。在理想的情况下,误差分布应该接近于正态分布,且集中在零附近。这表示模型的预测通常是准确的,且没有系统性偏差。如果误差分布偏离这种形态,比如长尾或偏斜,那么可能表明模型存在某些系统性问题。这种可视化是评估和改进模型预测性能的重要工具。

# 11. 绘制误差分布图
errors = y_test - test_predictions
plt.figure(figsize=(10, 6))
sns.histplot(errors, kde=True)
plt.xlabel('预测误差')
plt.ylabel('频率')
plt.title('误差分布图')
plt.show()

完整源码

import warnings

import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
from sklearn.datasets import fetch_california_housing
from sklearn.linear_model import Lars
from sklearn.metrics import mean_squared_error, r2_score
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.preprocessing import StandardScaler

warnings.filterwarnings('ignore')
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams["axes.unicode_minus"] = False

# 1. 导入所需的库
# 已在代码开头导入

# 2. 加载回归数据集
housing = fetch_california_housing()
X, y = housing.data, housing.target

# 3. 数据预处理
# 特征标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 4. 特征工程
# 在这个例子中,我们直接使用了原始特征,没有进行额外的特征工程

# 5. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.3, random_state=42)

# 6. 定义LAR回归模型
model = Lars()
param_grid = {
    'n_nonzero_coefs': [500, 1000, 'np.inf'],  # 依赖于您的特征数量
    'fit_intercept': [True, False],
    'normalize': [True, False]
}

# 使用网格搜索,寻找最佳参数(包含训练得分)
grid_search = GridSearchCV(model, param_grid, cv=5, return_train_score=True)
grid_search.fit(X_train, y_train)

# 7. 网格搜索后的最佳参数和模型
print("最佳参数:", grid_search.best_params_)
best_model = grid_search.best_estimator_

# 8. 单独打印训练集和测试集的模型评估指标
train_predictions = best_model.predict(X_train)
test_predictions = best_model.predict(X_test)
train_rmse = np.sqrt(mean_squared_error(y_train, train_predictions))
test_rmse = np.sqrt(mean_squared_error(y_test, test_predictions))
train_r2 = r2_score(y_train, train_predictions)
test_r2 = r2_score(y_test, test_predictions)
print(f"训练集 RMSE: {train_rmse:.4f}, R2: {train_r2:.4f}")
print(f"测试集 RMSE: {test_rmse:.4f}, R2: {test_r2:.4f}")

# 9. 绘制模型的训练曲线
cv_results = grid_search.cv_results_
mean_train_score = cv_results['mean_train_score']
mean_test_score = cv_results['mean_test_score']

plt.figure(figsize=(10, 6))
plt.plot(mean_train_score, label='训练得分')
plt.plot(mean_test_score, label='测试得分')
plt.title('模型性能曲线')
plt.xlabel('参数组合编号')
plt.ylabel('得分')
plt.legend()
plt.show()

# 10. 可视化真实值与预测值的关系
plt.figure(figsize=(10, 6))
plt.scatter(y_test, test_predictions)
plt.xlabel('真实值')
plt.ylabel('预测值')
plt.title('真实值 vs 预测值')
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
plt.show()

# 11. 绘制误差分布图
errors = y_test - test_predictions
plt.figure(figsize=(10, 6))
sns.histplot(errors, kde=True)
plt.xlabel('预测误差')
plt.ylabel('频率')
plt.title('误差分布图')
plt.show()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海洋 之心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值