线性模型Lasso在密集与稀疏数据上的应用

机器学习领域,Lasso回归是一种常用的线性模型,它通过引入L1正则化来实现特征选择。本文将展示在处理密集数据和稀疏数据时,Lasso回归模型的表现,并对比两种数据格式下的运行速度。

Lasso回归模型在密集数据上的表现

首先构建了一个线性回归问题,该问题适用于Lasso回归,即特征数量多于样本数量。然后,将数据矩阵以密集格式和稀疏格式存储,并分别训练Lasso模型。计算了两种格式下的运行时间,并检查了它们学习到的模型是否相同,通过计算它们学习到的系数之间的欧几里得范数来验证。由于数据是密集的,预期密集数据格式会有更优的运行时间。

from time import time from scipy import linalg, sparse from sklearn.datasets import make_regression from sklearn.linear_model import Lasso # 创建线性回归问题 X, y = make_regression(n_samples=200, n_features=5000, random_state=0) # 创建稀疏格式的X副本 X_sp = sparse.coo_matrix(X) alpha = 1 sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000) dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=1000) # 训练稀疏数据上的Lasso模型 t0 = time() sparse_lasso.fit(X_sp, y) print(f"Sparse Lasso done in {(time() - t0):.3f}s") # 训练密集数据上的Lasso模型 t0 = time() dense_lasso.fit(X, y) print(f"Dense Lasso done in {(time() - t0):.3f}s") # 比较回归系数 coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_) print(f"Distance between coefficients : {coeff_diff:.2e}")

从结果可以看出,稀疏数据上的Lasso模型完成时间为0.102秒,而密集数据上的Lasso模型完成时间为0.043秒。两者学习到的系数之间的距离非常小,为1.01e-13,这表明两种数据格式下的Lasso模型学习到了相同的模型。

Lasso回归模型在稀疏数据上的表现

为了进一步比较,将之前的问题通过将所有小于2.5的值替换为0来制造稀疏性,并运行与之前相同的比较。由于数据现在是稀疏的,预期使用稀疏数据格式的实现会更快。

# 复制之前的数据 Xs = X.copy() # 通过将小于2.5的值替换为0来制造稀疏性 Xs[Xs < 2.5] = 0.0 # 创建Xs的稀疏格式副本 Xs_sp = sparse.coo_matrix(Xs) Xs_sp = Xs_sp.tocsc() # 计算数据矩阵中非零系数的比例 print(f"Matrix density : {(Xs_sp.nnz / float(X.size) * 100):.3f}%") alpha = 0.1 sparse_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000) dense_lasso = Lasso(alpha=alpha, fit_intercept=False, max_iter=10000) # 训练稀疏数据上的Lasso模型 t0 = time() sparse_lasso.fit(Xs_sp, y) print(f"Sparse Lasso done in {(time() - t0):.3f}s") # 训练密集数据上的Lasso模型 t0 = time() dense_lasso.fit(Xs, y) print(f"Dense Lasso done in {(time() - t0):.3f}s") # 比较回归系数 coeff_diff = linalg.norm(sparse_lasso.coef_ - dense_lasso.coef_) print(f"Distance between coefficients : {coeff_diff:.2e}")

结果显示,稀疏数据上的Lasso模型完成时间为0.184秒,而密集数据上的Lasso模型完成时间为0.906秒。两者学习到的系数之间的距离为8.65e-12,这进一步验证了两种数据格式下的Lasso模型学习到了相同的模型。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485