LARS(Least Angle Regression)路径算法是一种用于回归分析的机器学习算法。它特别适用于具有大量特征的数据集,因为它可以有效地处理特征数量多于样本数量的情况。LARS算法的目标函数与Lasso回归类似,但求解方式不同。在LARS算法中,通过逐步增加相关性来构建模型,直到达到预设的最小相关性阈值。这种方法可以提供关于模型系数如何随着正则化参数变化的完整路径,从而帮助选择最佳的模型。
算法目标函数
对于Lasso回归,目标函数通常表示为最小化残差平方和加上正则化项,即:
(1/(2*n_samples)) * ||y - Xw||^2_2 + alpha * ||w||_1
其中,||y - Xw||^2_2
表示残差平方和,alpha
是正则化参数,||w||_1
是模型系数的L1范数。在LARS算法中,通过逐步增加相关性来构建模型,直到达到预设的最小相关性阈值。这种方法可以提供关于模型系数如何随着正则化参数变化的完整路径,从而帮助选择最佳的模型。
参数详解
LARS算法的参数包括:
- Xy:形状为(n_features,)的ndarray,表示X的转置与y的点积。
- Gram:形状为(n_features, n_features)的ndarray,表示X的转置与X的点积。
- n_samples:样本数量。
- max_iter:最大迭代次数,默认为500。如果设置为无穷大,则表示没有限制。
- alpha_min:最小相关性,默认为0。它对应于Lasso中的正则化参数alpha。
- method:{'lar', 'lasso'},默认为'lar'。指定返回的模型类型,'lar'表示最小角回归,'lasso'表示Lasso回归。
- copy_X:布尔值,默认为True。如果设置为False,则X会被覆盖。
- eps:浮点数,默认为np.finfo(float).eps。计算Cholesky对角线因子时的机器精度正则化。对于条件非常差的系统,可以增加这个值。
- copy_Gram:布尔值,默认为True。如果设置为False,则Gram会被覆盖。
- verbose:整数,默认为0。控制输出的详细程度。
- return_path:布尔值,默认为True。如果设置为True,则返回整个路径;否则,只返回路径的最后一个点。
- return_n_iter:布尔值,默认为False。是否返回迭代次数。
- positive:布尔值,默认为False。限制系数为非负值。这个选项只在method为'lasso'时允许。
LARS算法的返回值包括:
- alphas:形状为(n_alphas + 1,)的ndarray,表示每次迭代中最大协方差(绝对值)。
- active:形状为(n_alphas,)的ndarray,表示路径结束时活跃变量的索引。
- coefs:形状为(n_features, n_alphas + 1)的ndarray,表示路径上的系数。
- n_iter:整数,表示运行的迭代次数。只有当return_n_iter设置为True时才会返回。
代码示例
以下是使用LARS路径算法的一个简单示例:
from sklearn.linear_model import lars_path_gram
from sklearn.datasets import make_regression
# 生成模拟数据
X, y, true_coef = make_regression(
n_samples=100,
n_features=5,
n_informative=2,
coef=True,
random_state=0
)
# 计算LARS路径
alphas, _, estimated_coef = lars_path_gram(
X.T @ y,
X.T @ X,
n_samples=100
)
print(alphas.shape)
print(estimated_coef)
在这个示例中,首先生成了一个模拟的回归数据集,然后使用LARS路径算法计算了模型的系数。输出的alphas变量包含了每次迭代中最大协方差(绝对值),而estimated_coef变量包含了路径上的系数。