使用加权样本计算Gram矩阵

在使用加权样本时,设计矩阵必须先中心化,然后通过权重向量的平方根进行缩放,才能计算Gram矩阵。注意,样本权重向量也会被缩放到总和为n_samples,具体可以参考fit函数中sample_weight参数的文档说明。

加载数据集和创建样本权重

import numpy as np from sklearn.datasets import make_regression rng = np.random.RandomState(0) n_samples = int(1e5) X, y = make_regression(n_samples=n_samples, noise=0.5, random_state=rng) sample_weight = rng.lognormal(size=n_samples) # 标准化样本权重 normalized_weights = sample_weight * (n_samples / (sample_weight.sum()))

要使用precompute选项和样本权重来拟合ElasticNet,首先需要对设计矩阵进行中心化处理,并在计算Gram矩阵之前通过标准化权重进行缩放。

中心化和缩放设计矩阵

X_offset = np.average(X, axis=0, weights=normalized_weights) X_centered = X - np.average(X, axis=0, weights=normalized_weights) X_scaled = X_centered * np.sqrt(normalized_weights)[:, np.newaxis] gram = np.dot(X_scaled.T, X_scaled)

现在可以继续拟合过程。必须将中心化的设计矩阵传递给fit函数,否则ElasticNet估计器会检测到它未中心化,并丢弃传递的Gram矩阵。然而,如果传递缩放后的设计矩阵,预处理代码将错误地再次对其进行缩放。

拟合ElasticNet模型

from sklearn.linear_model import ElasticNet lm = ElasticNet(alpha=0.01, precompute=gram) lm.fit(X_centered, y, sample_weight=normalized_weights)

在Jupyter环境中,请重新运行此单元格以显示HTML表示,或信任笔记本。在GitHub上,HTML表示无法渲染,请尝试使用nbviewer.org加载此页面。

ElasticNet文档

ElasticNet是一种线性回归模型,它结合了L1和L2惩罚项,用于处理具有多个特征的数据集中的回归问题。这种模型特别适合于特征选择和正则化,因为它可以减少模型的复杂性,提高泛化能力。

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