【机器学习实战】10分钟学会Python怎么用Ridge岭回归进行正则化(十三)

简介: 【机器学习实战】10分钟学会Python怎么用Ridge岭回归进行正则化(十三)

[toc]

1.前言

1.1 岭回归的介绍

岭回归(Ridge Regression)是一种常用的线性回归方法,用于处理具有共线性(collinearity)问题的数据集。在普通最小二乘线性回归中,如果自变量之间存在高度相关性,会导致估计的回归系数不稳定,甚至无法准确估计。岭回归通过引入一个正则化项来解决这个问题。

岭回归的关键思想是在最小二乘目标函数中添加一个L2正则化项,该项对回归系数进行惩罚。这个正则化项是通过对回归系数的平方和进行惩罚,乘以一个调节参数alpha。当alpha为0时,岭回归等效于普通最小二乘回归;而当alpha趋近于无穷大时,回归系数趋近于0。因此,岭回归通过控制alpha的取值,平衡了回归系数的拟合能力和稳定性。

优点

  • 解决共线性问题:岭回归能够有效降低多重共线性对回归系数估计的影响。在存在高度相关的自变量的情况下,岭回归可以提供更稳定和可靠的回归系数估计。
  • 可控制的正则化参数:通过调节正则化参数alpha的取值,可以控制模型的拟合程度和回归系数的收缩程度。这使得岭回归具有灵活性,可以根据具体问题和数据来平衡模型的复杂性和拟合能力。
  • 适用于高维数据:当数据集中存在大量自变量或特征时,岭回归可以提供更稳定的回归系数估计。它通过控制回归系数的大小来减少对噪声和不相关特征的过度拟合,从而提高模型的泛化能力。

缺点

  • 引入偏差:岭回归通过对回归系数进行惩罚,可能引入一定的偏差。正则化项的存在会导致回归系数的估计偏离普通最小二乘估计,可能造成一定的信息损失。
  • 需要设置正则化参数:岭回归的性能受到正则化参数alpha的影响。选择合适的alpha值需要一定的经验或调参过程。过大或过小的alpha值可能导致模型性能下降或过拟合的问题。
  • 不具备特征选择能力:与Lasso回归相比,岭回归不具备显式的特征选择能力。它对所有的自变量都进行了收缩,而不会将某些系数缩减到零。因此,在需要进行特征选择的情况下,Lasso回归可能更适合。

一张图看懂LASSO回归和岭回归

1.2 岭回归的应用

  1. 经济学和金融学:岭回归可用于建立资产定价模型、预测经济指标、研究金融市场的因素影响等。在金融领域,岭回归可以帮助识别并分析相关因素对金融市场和资产价格的影响。
  2. 医学和生物学:岭回归可应用于医学和生物学领域中的数据分析和预测任务。例如,在基因表达分析中,岭回归可以帮助识别与特定疾病或生物过程相关的基因,并预测基因表达与相关结果之间的关系。
  3. 社会科学:岭回归可用于社会科学领域中的数据分析和建模,如人口统计学、社会经济学、心理学等。它可以帮助研究人口特征、社会经济指标等与特定社会现象或行为之间的关联性。
  4. 工程和物理学:岭回归在工程和物理学领域中也有广泛应用。例如,在信号处理中,岭回归可用于信号恢复和噪声滤波任务。在材料科学中,岭回归可用于建立材料性能与各种特征参数之间的关系模型。
  5. 数据分析和预测:由于岭回归在处理多重共线性和高维数据方面的优势,它在数据分析和预测任务中被广泛使用。岭回归可以帮助建立准确和稳定的预测模型,适用于各种应用领域,如销售预测、市场分析、房地产估价等。

2.自定义数据集实战演示

2.1 导入函数

from sklearn.datasets import make_regression
from matplotlib import pyplot as plt
import numpy as np
from sklearn.linear_model import Ridge

2.2 创建数据集

A, b, coefficients = make_regression(
    n_samples=50,
    n_features=1,
    n_informative=1,
    n_targets=1,
    noise=5,
    coef=True,
    random_state=1
)

2.3 alpha=0、1、10、100的分别情况

当alpha等于0时,岭回归退化为最小二乘法(Ordinary Least Squares, OLS)回归。在岭回归中,正则化项的系数为0,不会对回归系数施加任何约束或惩罚。

alpha = 0
n, m = A.shape
I = np.identity(m)
w = np.dot(np.dot(np.linalg.inv(np.dot(A.T, A) + alpha * I), A.T), b)
plt.scatter(A, b)
plt.plot(A, w*A, c='red')
## w = array([89.22901347])

alpha=1时:

rr = Ridge(alpha=1)
rr.fit(A, b)
w = rr.coef_
print(w)
## Output w = array([87.39928165])
plt.scatter(A, b)
plt.plot(A, w*A, c='red')

alpha=10时:

rr = Ridge(alpha=10)
rr.fit(A, b)
w = rr.coef_
print(w)
## Output w = array([73.60064637])
plt.scatter(A, b)
plt.plot(A, w*A, c='red')

alpha=100时:

rr = Ridge(alpha=100)
rr.fit(A, b)
w = rr.coef_
print(w)
## Output w = array([28.54061056])
plt.scatter(A, b)
plt.plot(A, w*A, c='red')

不难理解,当alpha值较大时,正则化项对回归系数的惩罚力度增加,使得回归系数更接近于零。回归线的斜率接近于零意味着预测函数对输入特征的影响减小,因此回归线可以看作是在整个数据集上取平均值为零的平面。这样可以有效地最小化不同数据集之间的方差。

通过增加alpha值,岭回归模型会更强调对训练数据整体的拟合,并减小对特定样本或异常值的过度拟合。这样可以提高模型的泛化能力,使其对新数据的预测更稳定,并减少模型在不同数据集上的变化。

3.Dushanbe_house数据集实战演示

3.1 导入函数和数据

import io
import urllib3
import pandas as pd
http = urllib3.PoolManager()
r = http.request('GET', 'https://hands-on.cloud/wp-content/uploads/2022/04/Dushanbe_house.csv')
Dushanbe = pd.read_csv(io.StringIO(r.data.decode('utf-8')))
# 查看数据示例
Dushanbe.head()

3.2 剔除空值及可视化

# 删除空值
Dushanbe.dropna(axis=0, inplace=True)
# 如果存在空值,显示空值数量
Dushanbe.isnull().sum()
# 使用 plotly.express 导入模块
import plotly.express as px
# 绘制三维散点图
fig = px.scatter_3d(Dushanbe, x='number_of_rooms', y='area', z='price',
                    color='price')
fig.show()

3.3 整理数据

# 提取数据集的列名
columns = Dushanbe.columns
# 存储输入和输出变量
Inputs = Dushanbe[columns[0:-1]]  # 输入变量
outputs = Dushanbe[columns[-1]]  # 输出变量

3.4 训练和测试数据集

from sklearn.model_selection import train_test_split
# 导入模块
from sklearn.model_selection import train_test_split
# 拆分训练数据和测试数据
X_train, X_test, y_train, y_test = train_test_split(Inputs, outputs, test_size=0.3, random_state=42)
# 导入 Ridge 模型
from sklearn.linear_model import Ridge
# 设置 alpha 参数为 0.9 并初始化 Ridge 回归模型
model = Ridge(alpha=0.9)
# 使用训练数据拟合 Ridge 回归模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)

3.5 评估数据集

from sklearn.metrics import r2_score
print('R-square score is:', r2_score(y_test, y_pred))
## R-square score is : 0.3787461308826928
import matplotlib.pyplot as plt
# 设置图形大小
plt.figure(figsize=(15, 8))
# 绘制实际值和预测值的图形
plt.plot([i for i in range(len(y_test))], y_test, label="实际值")
plt.plot([i for i in range(len(y_test))], y_pred, label="预测值")
# 添加图例
plt.legend()
# 显示绘图结果
plt.show()

此外还可以用多个矩阵评估指标评估模型性能:

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
# 计算均方误差(MSE)
mse = mean_squared_error(y_test, y_pred)
# 计算均方根误差(RMSE)
rmse = mean_squared_error(y_test, y_pred, squared=False)
# 计算决定系数(R^2)
r2 = r2_score(y_test, y_pred)
# 计算平均绝对误差(MAE)
mae = mean_absolute_error(y_test, y_pred)
# 打印评估结果
print("Mean Squared Error (MSE):", mse)
print("Root Mean Squared Error (RMSE):", rmse)
print("R-squared (R^2):", r2)
print("Mean Absolute Error (MAE):", mae)
## 结果
# Mean Squared Error (MSE): 138264386141.42395
# Root Mean Squared Error (RMSE): 371839.1939285367
# R-squared (R^2): 0.3787461308826928
# Mean Absolute Error (MAE): 143605.94681857855

4.讨论

岭回归是一种基于正则化的线性回归技术,通过引入L2范数惩罚项来平衡模型的拟合能力和复杂度。它在处理多重共线性和高维数据时具有显著优势,可以提高模型的稳定性和泛化能力。岭回归通过约束系数的大小,减小了变量间的相关性对模型预测的影响,避免了过拟合的问题。通过调节正则化参数alpha,可以控制岭回归模型的收缩程度,从而平衡模型的偏差和方差。

岭回归和Lasso回归在某种程度上是互补的,它们各自在特征选择和系数缩小方面有不同的优势。因此,根据具体问题的特点和数据集的情况,选择使用岭回归或Lasso回归,或者结合两者的方法,可以更好地处理线性回归问题,并获得更准确和稳定的模型。

目录
相关文章
|
机器学习/深度学习 算法 Python
机器学习特征筛选:向后淘汰法原理与Python实现
向后淘汰法(Backward Elimination)是机器学习中一种重要的特征选择技术,通过系统性地移除对模型贡献较小的特征,以提高模型性能和可解释性。该方法从完整特征集出发,逐步剔除不重要的特征,最终保留最具影响力的变量子集。其优势包括提升模型简洁性和性能,减少过拟合,降低计算复杂度。然而,该方法在高维特征空间中计算成本较高,且可能陷入局部最优解。适用于线性回归、逻辑回归等统计学习模型。
526 7
|
12月前
|
机器学习/深度学习 人工智能 算法
Scikit-learn:Python机器学习的瑞士军刀
想要快速入门机器学习但被复杂算法吓退?本文详解Scikit-learn如何让您无需深厚数学背景也能构建强大AI模型。从数据预处理到模型评估,从垃圾邮件过滤到信用风险评估,通过实用案例和直观图表,带您掌握这把Python机器学习的'瑞士军刀'。无论您是AI新手还是经验丰富的数据科学家,都能从中获取将理论转化为实际应用的关键技巧。了解Scikit-learn与大语言模型的最新集成方式,抢先掌握机器学习的未来发展方向!
1322 12
Scikit-learn:Python机器学习的瑞士军刀
|
机器学习/深度学习 数据可视化 算法
Python与机器学习:使用Scikit-learn进行数据建模
本文介绍如何使用Python和Scikit-learn进行机器学习数据建模。首先,通过鸢尾花数据集演示数据准备、可视化和预处理步骤。接着,构建并评估K近邻(KNN)模型,展示超参数调优方法。最后,比较KNN、随机森林和支持向量机(SVM)等模型的性能,帮助读者掌握基础的机器学习建模技巧,并展望未来结合深度学习框架的发展方向。
Python与机器学习:使用Scikit-learn进行数据建模
|
机器学习/深度学习 数据可视化 TensorFlow
Python 高级编程与实战:深入理解数据科学与机器学习
本文深入探讨了Python在数据科学与机器学习中的应用,介绍了pandas、numpy、matplotlib等数据科学工具,以及scikit-learn、tensorflow、keras等机器学习库。通过实战项目,如数据可视化和鸢尾花数据集分类,帮助读者掌握这些技术。最后提供了进一步学习资源,助力提升Python编程技能。
|
机器学习/深度学习 数据可视化 算法
Python 高级编程与实战:深入理解数据科学与机器学习
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化和调试技巧。本文将深入探讨 Python 在数据科学和机器学习中的应用,并通过实战项目帮助你掌握这些技术。
|
机器学习/深度学习 数据可视化 数据处理
掌握Python数据科学基础——从数据处理到机器学习
掌握Python数据科学基础——从数据处理到机器学习
298 0
|
机器学习/深度学习 数据采集 人工智能
机器学习入门:Python与scikit-learn实战
机器学习入门:Python与scikit-learn实战
567 0
|
7月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1666 6
|
12月前
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
848 8

热门文章

最新文章

推荐镜像

更多