LASSO(Least Absolute Shrinkage and Selection Operator)是一种在统计学和机器学习中常用的回归分析方法。
主要目的是增强模型的预测精度和可解释性,通过对系数进行收缩来实现变量的选择和复杂度的控制。LASSO特别适合于处理具有多重共线性(即输入变量高度相关)或者数据特征数量远大于样本数量的情况。
ASSO回归是一种线性回归的形式,它在损失函数中加入了一个正则化项。这个正则化项是系数的绝对值之和,乘以一个调整参数λ。LASSO的目的是最小化以下公式:
其中, y i y_i yi是观测值, x i j x_{ij} xij是特征值, β j \beta_j βj是系数, λ \lambda λ是正则化参数。通过调整λ的值,可以控制正则化的强度。LASSO倾向于将一些系数完全压缩至零,从而实现特征选择。
# 导入必要的库
import numpy as np
from sklearn.linear_model import Lasso
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
# 创建虚构数据集
np.random.seed(0) # 确保可重复性
X = np.random.rand(100, 10) # 100个样本,10个特征
y = np.dot(X, np.array([1.5, -2., 0., 0., 3., 0., 0., 0., 0., 0.])) + np.random.randn(100) * 0.5
# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
# 创建LASSO回归模型
lasso = Lasso(alpha=0.1) # alpha是λ的同义词
# 训练模型
lasso.fit(X_train, y_train)
# 预测测试集
y_pred = lasso.predict(X_test)
# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")
# 查看选择的特征(非零系数)
print(f"Coefficients: {lasso.coef_}")
在这个示例中,我们首先创建了一个虚构的数据集,其中一些特征是有影响的(具有非零系数),而其他特征则是无关的(系数为零)。通过使用LASSO回归,我们试图识别出有影响的特征。 a l p h a alpha alpha参数是 λ \lambda λ的同义词,在这里我们设置为0.1。LASSO模型会试图将一些系数减少到零,从而实现特征选择。最后,我们计算了模型在测试集上的均方误差,并打印出非零系数来查看哪些特征被选中。
GridSearchCV 是一个强大的工具,用于在机器学习模型中自动寻找最佳的超参数。
通过遍历所有给定的超参数组合,并使用交叉验证来评估每一组合的性能,从而找到最佳的超参数设置。
参数网格定义:在网格搜索中,首先定义一个参数网格。这个网格包含了模型可能使用的各种超参数及其候选值。例如,对于支持向量机( S V M SVM SVM),参数网格可能包括不同的 C C C(正则化参数)、 g a m m a gamma gamma(核函数的参数)和 k e r n e l kernel kernel(核类型)的值。
遍历所有可能的参数组合:网格搜索的核心是遍历这个参数网格中的所有可能的参数组合。对于每一种组合,模型都会被训练并评估其性能。
数据分割:交叉验证是一种评估模型泛化能力的方法。它将数据集分割成若干份(通常是相同大小的子集),例如 5 5 5份或 10 10 10份。
迭代训练与验证:在每一轮迭代中,一份子集被保留作为验证数据,其余的子集用于训练模型。这个过程重复多次,每次选择不同的子集作为验证数据。
性能度量:在每一轮迭代中,都会对模型进行评估(比如准确度、 F 1 F1 F1分数等),并且最终的性能度量是这些评估结果的平均值。这有助于减少模型因数据分割不同而产生的性能波动。
G r i d S e a r c h C V GridSearchCV GridSearchCV 结合了网格搜索和交叉验证的优点。它通过网格搜索遍历所有的参数组合,并使用交叉验证来评估每一组合的性能。
- 全面性:通过系统地搜索所有的参数组合, G r i d S e a r c h C V GridSearchCV GridSearchCV确保了不会错过任何潜在的最佳参数组合。
- 稳健性:通过交叉验证, G r i d S e a r c h C V GridSearchCV GridSearchCV 能够评估模型在不同子集上的性能,从而提供关于模型泛化能力的更准确的估计。
总之, G r i d S e a r c h C V GridSearchCV GridSearchCV 的原理在于它提供了一种系统的方法来探索多种参数组合,并利用交叉验证来找出最能提高模型性能的参数设置。这种方法虽然计算量较大,但能够显著提高模型的准确性和可靠性。
from sklearn import svm, datasets
from sklearn.model_selection import GridSearchCV
# 加载数据集(例如鸢尾花数据集)
iris = datasets.load_iris()
X, y = iris.data, iris.target
# 创建SVM模型
model = svm.SVC()
# 定义要优化的参数网格
param_grid = {
'C': [0.1, 1, 10, 100], # SVM正则化参数
'gamma': [1, 0.1, 0.01, 0.001], # 核函数参数
'kernel': ['rbf', 'linear'] # 核类型
}
# 配置GridSearchCV
grid_search = GridSearchCV(model, param_grid, refit=True, verbose=2, cv=5)
# 训练模型
grid_search.fit(X, y)
# 查看最佳参数
print("Best Parameters Found: ")
print(grid_search.best_params_)
# 使用最佳参数的模型进行预测
best_model = grid_search.best_estimator_
predictions = best_model.predict(X)
# 这里可以添加评估模型性能的代码(例如准确率、混淆矩阵等)
在这个示例中,我们使用鸢尾花数据集,尝试不同的 C C C(正则化参数)、 g a m m a gamma gamma(核函数参数)和 k e r n e l kernel kernel(核类型)来优化 S V M SVM SVM模型。 G r i d S e a r c h C V GridSearchCV GridSearchCV遍历所有可能的参数组合,并使用 5 5 5折交叉验证来评估每个组合的性能。最后,我们输出最佳参数组合,并用这些参数构建最终模型。