详解 Scikit-learn 的 linear_model.Lasso函数:Lasso 回归模型

  • Post category:Python

sklearn.linear_model.Lasso 函数是 scikit-learn 库中的一个线性回归算法,它使用 L1 正则化来避免过拟合。Lasso 可以用于特征选择和回归。在回归中,Lasso 优化的目标函数为:

min 1/(2*n_samples) * ||y - Xw||^2_2 + alpha * ||w||_1

其中,n_samples 表示样本数目,y 是真实值,X 是样本特征矩阵,w 是模型的权重,alpha 是正则化参数。||w||_1 表示 L1 范数,即权重向量绝对值之和。

L1 正则化有一个很好的特点,可以将许多无关的特征直接设置为零。这个特性可以用于特征选择。同时,L1 正则化还有助于防止过拟合的问题。

参数说明

sklearn.linear_model.Lasso 函数的主要参数有:

  • alpha:正则化参数,默认为 1.0。
  • fit_intercept:是否计算截距,默认为 True。
  • normalize:是否归一化,使特征矩阵的每个特征都有单位方差。默认为 False。
  • max_iter:最大迭代次数,默认为 1000。
  • tol:迭代收敛的容差,默认为 1e-4。

使用方法说明

下面是 sklearn.linear_model.Lasso 函数的使用方法:

from sklearn.linear_model import Lasso

# 加载数据
X, y = load_data()

# 定义模型
lasso_model = Lasso(alpha=0.1, max_iter=1000)

# 拟合模型
lasso_model.fit(X, y)

# 预测模型
y_predict = lasso_model.predict(X)

以上代码中,首先加载了数据,然后定义了一个 Lasso 模型,使用 fit 函数对模型进行了拟合。

下面给出两个实例说明。

实例一:使用 Lasso 进行特征选择

以下示例展示如何使用 Lasso 进行特征选择。我们使用 scikit-learn 提供的波士顿房价数据集。这个数据集包括 13 个数值特征和一个目标变量(房价)。

from sklearn.datasets import load_boston
from sklearn.linear_model import Lasso

# 加载数据
boston = load_boston()
X = boston.data
y = boston.target

# 定义模型
lasso_model = Lasso(alpha=0.1, max_iter=10000)

# 拟合模型
lasso_model.fit(X, y)

# 输出系数不为0的特征名称
feature_names = boston.feature_names
selected_features = feature_names[lasso_model.coef_ != 0]
print(selected_features)

执行上述代码,输出的结果为:

['CRIM' 'CHAS' 'NOX' 'RM' 'DIS' 'PTRATIO' 'B' 'LSTAT']

这意味着在这个数据集中,Lasso 模型选择了这 8 个特征。

实例二:使用 Lasso 进行回归预测

以下示例展示如何使用 Lasso 进行回归预测。我们使用 scikit-learn 提供的糖尿病数据集,该数据集包括 442 个病人的 10 个生理学指标和一个目标变量(1 年后疾病进展的定量测量指标)。

from sklearn.datasets import load_diabetes
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# 加载数据
diabetes = load_diabetes()
X = diabetes.data
y = diabetes.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

# 定义模型
lasso_model = Lasso(alpha=0.1, max_iter=1000)

# 拟合模型
lasso_model.fit(X_train, y_train)

# 预测模型并计算均方误差
y_predict = lasso_model.predict(X_test)
mse = mean_squared_error(y_test, y_predict)
print("MSE:", mse)

结果输出:

MSE: 3292.046338031839

这就是使用 Lasso 进行回归预测的相关实例。