岭回归和套索回归的解释

岭回归和套索回归的解释

介绍

对于线性回归模型来说,岭回归和套索回归都是非常受欢迎的正则化方法。它们帮助解决过拟合的问题,过拟合是指模型过于复杂,对训练数据拟合得太好,导致在新数据上表现更差。岭回归通过在线性回归的代价函数中引入惩罚项,减小系数的大小并防止过拟合。惩罚项与系数的平方和成正比。相反,套索回归中添加的惩罚项与系数的绝对值之和成正比。这会使得一些系数接近0,使模型的某些方面变得完全无关紧要。在本文中,我们将更详细地介绍这两种方法,讨论它们的区别,并看看如何在Python中使用scikit-learn应用它们。

岭回归

为了解决线性回归模型中过拟合的问题,岭回归是一种正则化方法。通过在线性回归的代价函数中添加惩罚项,减小系数的大小并防止过拟合。惩罚项调节模型中系数的大小,与系数的平方和成正比。当惩罚项的值越高时,系数趋向于零,降低了模型的方差。

岭回归试图减小以下代价函数 –

\mathrm{J(w) = (\frac{1}{2}):*:\sum(y:-:h(y))^2+\sum|w|^2}

其中y是真实值,h(y)表示预测值,w表示特征系数。

岭回归在存在多个较小到中等大小的系数且所有特征都重要时效果最好。此外,它的计算效率比其他正则化方法更高。岭回归的主要缺点是它不会消除任何特征,这可能并不总是一件好事。具体情况和数据的特点将决定是使用岭回归还是其他正则化方法。

程序

import numpy as np
from sklearn.linear_model import Ridge
from sklearn.metrics import mean_squared_error

n_samples, n_features = 100, 10
X = np.random.randn(n_samples, n_features)
w_true = np.random.randn(n_features)
y = X.dot(w_true) + 0.5*np.random.randn(n_samples)

train_size = int(n_samples * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

alpha = 0.1
ridge = Ridge(alpha=alpha)
ridge.fit(X_train, y_train)

y_pred = ridge.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean squared error: {mse:.2f}")

输出

Mean squared error: 0.36

通过使用Scikit-learn的train test split函数,我们将此示例中的数据分为训练集和测试集。之后,我们使用StandardScaler对数据进行缩放,以确保每个特征具有可比较的范围和分布。

在创建一个岭回归模型后,我们使用alpha参数调整正则化强度,其中使用Scikit-Ridge Learn的类的帮助。增加alpha会导致更强的正则化。

使用fit方法将模型拟合到训练数据,并使用prediction方法在测试数据上进行预测。我们用均方误差来评估模型的有效性,它计算预测值与实际值之间的平均平方差。

需要注意的是,在某些情况下,诸如Lasso或弹性网络的替代正则化方法可能更适合,岭回归并不总是能提高线性回归模型的性能。此外,应使用交叉验证来微调正则化强度参数alpha的理想值,以在模型复杂度和泛化性能之间取得折中。

Lasso回归

Lasso回归,通常称为L1正则化,是一种通过在损失函数中引入惩罚项来防止线性回归模型过拟合的方法。与岭回归相反,Lasso回归将系数的绝对值总和添加到损失函数中,而不是平方系数之和。

Lasso回归试图减少以下损失函数:

J(w) = (1/2) * Σ(y – h(y))^2 + Σ|w|

其中y是实际值,h(y)代表预测值,w代表特征系数。

Lasso回归可以将某些系数减少到零,从而实现特征选择。对于特征冗余或不必要的高维数据集,这非常有帮助。结果模型更简单易懂,并且通过最小化过拟合,通常具有更好的预测性能。

程序

import numpy as np
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error

# Generate some random data
n_samples, n_features = 100, 10
X = np.random.randn(n_samples, n_features)
w_true = np.random.randn(n_features)
y = X.dot(w_true) + 0.5*np.random.randn(n_samples)

# Split the data into training and testing sets
train_size = int(n_samples * 0.8)
X_train, X_test = X[:train_size], X[train_size:]
y_train, y_test = y[:train_size], y[train_size:]

# Set the regularization strength
alpha = 0.1

# Create the Lasso regression object and fit the model
lasso = Lasso(alpha=alpha)
lasso.fit(X_train, y_train)

# Make predictions on the testing set
y_pred = lasso.predict(X_test)

# Calculate the mean squared error
mse = mean_squared_error(y_test, y_pred)

# Print the mean squared error
print(f"Mean squared error: {mse:.2f}")

输出

Mean squared error: 0.43

在这段代码中,我们首先产生一些随机数据(100个样本和10个特征)。然后将数据分为80/20的训练和测试集。然后,我们将正则化强度设置为0.1,并构建一个Lasso回归对象实例。然后使用fit()函数将模型拟合到训练数据上。我们使用predict()方法在测试数据上进行预测,并使用scikit-mean squared error()学习函数计算预测值与实际值之间的均方误差。最后,打印出均方误差。

值得注意的是,Lasso回归模型通过将一些系数设置为零来进行特征选择。这意味着在有大量特征并且我们想找到最重要的特征来预测目标变量时,它可能是有效的。但是,如果我们考虑所有的特征对预测都是相关的,它可能不是最佳选择。在这种情况下,Ridge回归可能是更好的选择。

岭回归和Lasso回归的区别

岭回归 套索回归
将系数收缩到零 并鼓励某些系数完全为零
添加与系数的平方和成比例的惩罚项 添加与系数的绝对值之和成比例的惩罚项
不会消除任何特征 可以消除一些特征
当所有特征都重要时适用 当一些特征无关或冗余时适用
计算效率较高 计算效率较低
需要设置超参数 需要设置超参数
在存在许多小到中等系数时表现更好 在存在较大系数时表现更好

结论

Ridge和Lasso回归是对线性回归模型进行正则化和防止过拟合的强大技术。它们都向代价函数添加了惩罚项,但采用不同的方法。Ridge回归将系数收缩到零附近,而Lasso回归鼓励其中一些系数完全为零。这些技术可以在Python中使用scikit-learn轻松实现,使其适用于广大用户群体。通过理解和实施Ridge和Lasso回归,您可以提高线性回归模型的性能,并在新数据上进行更准确的预测。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程