小红书一面,差点栽到论文细节。。


哈喽,我是kk~
最近有小伙伴面试小红书,差点栽到论文方面。
他面试的是核心算法岗,对于基础和创新能力是有很大要求。

所以,对于在校的同学,基础理论和paper一定要重视。
好了,下面,咱们分享一个其中的一个面试问题:正则化如何帮助防止模型过拟合?
当然,在机器学习中,过拟合是一个常见的问题,它指的是模型在训练集上表现得很好,但在新样本上的泛化能力较差。为了解决过拟合问题,一种常用的方法是通过正则化对模型进行约束,以限制模型参数的大小。
正则化是一种在损失函数中增加额外项的技术,用于控制模型的复杂度。这个额外项通过惩罚模型的复杂度,迫使模型更加简单,从而降低过拟合的风险。
算法原理
在回归问题中,我们常用的正则化方法是L1正则化和L2正则化。L1正则化用于生成稀疏模型,即让部分参数为0,从而降低模型的复杂度。L2正则化则通过惩罚参数的平方和来迫使参数尽可能小,达到控制模型复杂度的目的。
对于线性回归问题,我们可以将损失函数定义为均方误差加上正则化项:
其中,
 表示模型的参数,
 表示输入样本,
 表示真实标签,
 表示模型的预测结果,
 表示样本数量,
 表示正则化项,
 表示正则化参数。
对于L1正则化,正则化项可以表示为参数的绝对值之和:
对于L2正则化,正则化项可以表示为参数的平方和:
计算步骤
准备数据集:准备一个用于回归问题的数据集,包括输入样本和真实标签。
定义模型:选择一个合适的模型,例如线性回归模型。
训练模型:使用训练数据集训练模型,通过最小化损失函数来求解模型参数。
添加正则化项:在损失函数中加入正则化项,通过调节正则化参数来控制正则化的程度。
模型评估:使用测试数据集评估模型的性能,观察是否出现过拟合现象。
代码示例
下面是一个使用L2正则化的线性回归示例代码:
import numpy as npimport matplotlib.pyplot as plt# 生成虚拟数据np.random.seed(0)X = np.random.rand(100, 1)y = 2 + 3 * X + np.random.rand(100, 1)# 添加正则化项的线性回归模型class RegularizedLinearRegression:    def __init__(self, lambda_=0.01):        self.lambda_ = lambda_    def fit(self, X, y):        # 添加偏置项        X = np.c_[np.ones(X.shape[0]), X]        # 计算参数        A = np.dot(X.T, X) + self.lambda_ * np.eye(X.shape[1])        B = np.dot(X.T, y)        self.w = np.dot(np.linalg.inv(A), B)    def predict(self, X):        # 添加偏置项        X = np.c_[np.ones(X.shape[0]), X]        return np.dot(X, self.w)# 训练模型model = RegularizedLinearRegression(lambda_=0.01)model.fit(X, y)# 绘制数据点plt.scatter(X, y)# 绘制线性回归结果plt.plot(X, model.predict(X), color='red')plt.show()

首先生成了一个虚拟的线性数据集。接下来,我们定义了一个名为RegularizedLinearRegression的类,用于实现带有L2正则化项的线性回归模型。然后,我们用数据集训练模型,并绘制了数据点和线性回归结果。
另外,大家需要注意的几点:
在添加正则化项之前,我们需要为输入样本添加偏置项,以便使用矩阵运算进行计算。
在模型训练时,我们使用了正则化参数 
。通过调节这个参数,可以控制正则化的程度。
在模型预测时,我们同样要添加偏置项,然后通过矩阵相乘来计算预测结果。
关于论文方面,我们最近组织了一个 1对1 的指导,感兴趣的同学可以扫码了解!~

到顶部