在机器学习领域,经常遇到模型在训练集上表现优异,但在测试集上表现不佳的情况。这种情况被称为过拟合。过拟合意味着模型过于复杂,以至于它学习到了训练数据中的噪声和不相关的特征,而无法泛化到新的数据上。本文将探讨过拟合的概念,并介绍如何通过正则化技术来避免过拟合,提高模型的泛化能力。
想象一下,一直生活在一个炎热的地区,直到毕业。然后,出于某种原因,必须搬到一个更冷的地区。当搬到一个更冷的地区时,可能会感到不适,因为需要时间来适应新的气候。这种无法立即适应新环境的情况可以类比为过拟合。
过拟合的模型无法识别未见过的数据,并且在给定新的输入时会表现糟糕。用之前的例子来说,如果身体只适应一个具有特定气候的地理区域,那么它就不能立即适应新的气候。
要深入理解过拟合,需要了解方差和偏差在其中的作用。方差描述了数据点的分散程度,它计算数据点与其均值的差异以及与其他数据点的距离。偏差是平均预测值与目标值之间的差异。
正则化是提高模型泛化能力的一种方法,它通过忽略不太重要的特征来改善模型。正则化通过向高方差的模型添加惩罚,从而缩小beta系数至零,避免过拟合。
正则化有两种类型:Lasso正则化(L1)和Ridge正则化(L2)。Lasso正则化通过添加L1惩罚项来工作,而Ridge正则化则添加L2惩罚项。这些惩罚项通过增加成本函数来减少模型的复杂度,从而降低过拟合的风险。
为了比较线性回归、Ridge回归和Lasso回归,将使用一个房地产数据集来预测单位面积的房价。以下是如何将数据集划分为训练集和测试集,并拟合线性回归模型的代码示例:
X = df.drop(columns = ['Y house price of unit area', 'X1 transaction date', 'X2 house age'])
Y = df['Y house price of unit area']
x_train, x_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2, random_state = 42)
lin_reg = LinearRegression()
lin_reg.fit(x_train, y_train)
lin_reg_y_pred = lin_reg.predict(x_test)
mse = mean_squared_error(y_test, lin_reg_y_pred)
print(mse)
学习了两种不同的回归技术:Lasso回归和Ridge回归,这些技术可以有效对抗过拟合。通过添加惩罚项和缩小beta系数,这些技术帮助构建了一个良好的拟合模型。控制过拟合的关键在于正确平衡偏差和方差。