机器学习正则化终极指南:用ML-From-Scratch实现岭回归与Lasso的魔法
在机器学习中,过拟合是每个数据科学家都会遇到的棘手问题。当模型过度拟合训练数据时,它会在新数据上表现糟糕。而正则化技术正是解决这一问题的强大工具。ML-From-Scratch项目提供了从零开始实现的机器学习算法,包括岭回归(Ridge Regression)和Lasso回归等正则化方法,帮助你深入理解这些技术的工作原理。
什么是正则化?为什么它如此重要?
正则化是一种通过在损失函数中添加惩罚项来控制模型复杂度的技术。它能够有效平衡模型对训练数据的拟合程度和泛化能力,防止过拟合现象的发生。
在ML-From-Scratch项目中,正则化相关的实现主要集中在mlfromscratch/supervised_learning/regression.py文件中。该文件定义了三种主要的正则化类型:
- L1正则化(Lasso):使用权重的L1范数作为惩罚项
- L2正则化(Ridge):使用权重的L2范数作为惩罚项
- L1-L2正则化(Elastic Net):结合L1和L2的混合正则化
L1正则化:Lasso回归的神奇之处
Lasso回归(Least Absolute Shrinkage and Selection Operator)使用L1正则化,它会将不重要特征的权重收缩到零,从而实现特征选择的效果。
在ML-From-Scratch中,L1正则化的实现如下:
class l1_regularization():
""" Regularization for Lasso Regression """
def __init__(self, alpha):
self.alpha = alpha
def __call__(self, w):
return self.alpha * np.linalg.norm(w)
def grad(self, w):
return self.alpha * np.sign(w)
Lasso回归的完整实现可以在mlfromscratch/supervised_learning/regression.py中的LassoRegression类找到。它通过设置self.regularization = l1_regularization(alpha=reg_factor)来应用L1正则化。
Lasso回归的实际应用
Lasso回归在处理高维数据时特别有用,因为它可以自动选择重要特征。在项目的mlfromscratch/examples/lasso_regression.py文件中,展示了如何使用Lasso回归对温度数据进行预测:
model = LassoRegression(degree=15,
reg_factor=0.05,
learning_rate=0.001,
n_iterations=4000)
model.fit(X_train, y_train)
通过调整正则化因子(reg_factor),你可以控制特征选择的强度。较大的正则化因子会导致更多特征被排除。
L2正则化:岭回归的强大力量
岭回归(Ridge Regression)使用L2正则化,它会将权重值普遍缩小,但不会将任何权重精确地设为零。这有助于降低模型复杂度,提高泛化能力。
ML-From-Scratch中L2正则化的实现如下:
class l2_regularization():
""" Regularization for Ridge Regression """
def __init__(self, alpha):
self.alpha = alpha
def __call__(self, w):
return self.alpha * 0.5 * w.T.dot(w)
def grad(self, w):
return self.alpha * w
岭回归的完整实现可以在mlfromscratch/supervised_learning/regression.py中的RidgeRegression类找到。
如何选择最佳正则化参数?
选择合适的正则化参数对模型性能至关重要。项目中的mlfromscratch/examples/ridge_regression.py展示了如何使用交叉验证来找到最佳正则化因子:
# Finding regularization constant using cross validation
lowest_error = float("inf")
best_reg_factor = None
print ("Finding regularization constant using cross validation:")
k = 10
for reg_factor in np.arange(0, 0.1, 0.01):
cross_validation_sets = k_fold_cross_validation_sets(
X_train, y_train, k=k)
mse = 0
for _X_train, _X_test, _y_train, _y_test in cross_validation_sets:
model = PolynomialRidgeRegression(degree=poly_degree,
reg_factor=reg_factor,
learning_rate=0.001,
n_iterations=10000)
model.fit(_X_train, _y_train)
y_pred = model.predict(_X_test)
_mse = mean_squared_error(_y_test, y_pred)
mse += _mse
mse /= k
print ("\tMean Squared Error: %s (regularization: %s)" % (mse, reg_factor))
if mse < lowest_error:
best_reg_factor = reg_factor
lowest_error = mse
这种方法通过尝试不同的正则化因子并计算交叉验证误差,找到使模型泛化能力最佳的参数值。
Lasso与岭回归:如何选择?
Lasso和岭回归各有优势,选择哪种方法取决于你的具体问题:
- 当特征数量远大于样本数量时,Lasso可以通过特征选择提高模型解释性
- 当所有特征都可能相关时,岭回归通常表现更好
- 当你需要稀疏解(少量非零权重)时,选择Lasso
- 当特征高度相关时,岭回归可能更稳定
如果不确定哪种方法更适合你的数据,可以尝试Elastic Net回归,它结合了L1和L2正则化的优点。在ML-From-Scratch中,ElasticNet类实现了这种混合正则化方法。
快速开始:使用ML-From-Scratch实现正则化回归
要开始使用ML-From-Scratch中的正则化回归模型,只需按照以下步骤操作:
- 克隆项目仓库:
git clone https://gitcode.com/GitHub_Trending/ml/ML-From-Scratch
- 安装所需依赖:
pip install -r requirements.txt
-
查看并运行示例代码,如mlfromscratch/examples/ridge_regression.py和mlfromscratch/examples/lasso_regression.py
-
根据你的需求调整正则化参数和模型设置
总结:正则化是机器学习的必备技能
正则化技术是构建高性能机器学习模型的关键。通过ML-From-Scratch项目提供的实现,你可以深入理解L1和L2正则化的数学原理和实际应用。无论是处理过拟合问题,还是进行特征选择,正则化都是数据科学家工具箱中不可或缺的工具。
通过实践项目中的示例代码,你将能够熟练掌握岭回归、Lasso回归等正则化方法,并将它们应用到自己的机器学习项目中,构建更加稳健和可靠的预测模型。
希望本指南能帮助你更好地理解和应用机器学习正则化技术。现在就动手尝试,体验正则化带来的"魔法"效果吧!✨
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



