24 多项式回归进阶
24.1 简介
多项式回归是一种扩展线性回归的方法,用来建模非线性关系。通过将输入变量升至多项式次幂,可以捕捉数据中的非线性特征。虽然模型复杂度增加,但也带来了更高的拟合能力。然而,过高次幂的多项式可能会导致过拟合问题。
24.2 多项式特征的构建
在多项式回归中,我们首先需要生成多项式特征,即将原始特征升至不同次幂并组合。Python中的scikit-learn
库提供了PolynomialFeatures
类,可以方便地构建多项式特征。
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import make_pipeline
from sklearn.metrics import mean_squared_error
import numpy as np
# 生成模拟数据
np.random.seed(42)
X = np.random.rand(100, 1) * 10 - 5 # 输入范围[-5, 5]
y = 0.5 * X**2 - X + 2 + np.random.randn(100, 1).flatten() # 二次函数关系加噪声
# 构建多项式回归模型
poly = PolynomialFeatures(degree=2)
model = make_pipeline(poly, LinearRegression())
model.fit(X, y)
# 预测
y_pred = model.predict(X)
mse = mean_squared_error(y, y_pred)
print(f'Polynomial Regression MSE: {mse:.3f}')
在这段代码中,我们构建了一个二次多项式回归模型,并计算了均方误差(MSE)以评估模型性能。
24.3 多项式回归的优势与挑战
多项式回归的主要优势在于它能够建模复杂的非线性关系。然而,随着多项式次数的增加,模型的复杂度也会迅速上升,导致过拟合的风险。此外,高次多项式的回归系数往往非常大,对输入数据的微小变化也会非常敏感。
为了解决这些问题,我们可以使用正则化方法(如岭回归或Lasso回归)来约束回归系数。
from sklearn.linear_model import Ridge
# 使用岭回归进行多项式回归
ridge_model = make_pipeline(PolynomialFeatures(degree=2), Ridge(alpha=1.0))
ridge_model.fit(X, y)
# 预测并计算MSE
y_pred_ridge = ridge_model.predict(X)
mse_ridge = mean_squared_error(y, y_pred_ridge)
print(f'Polynomial Ridge Regression MSE: {mse_ridge:.3f}')
通过在多项式回归中引入正则化,我们可以有效控制模型的复杂度,从而降低过拟合的风险。
24.4 实例分析:预测房价
多项式回归在许多实际应用中都有广泛应用,例如房价预测。在这种情况下,我们可以将平方英尺、卧室数量等特征升至不同次幂,来捕捉复杂的价格影响因素。
# 假设有一个房价数据集,我们可以使用多项式回归来预测房价
# 示例数据
X_house = np.random.rand(100, 1) * 2000 + 500 # 房屋面积范围[500, 2500]平方英尺
y_house = 300000 + 100 * X_house + np.random.randn(100, 1).flatten() * 10000 # 假设线性关系加噪声
# 构建三次多项式回归模型
poly_house = PolynomialFeatures(degree=3)
house_model = make_pipeline(poly_house, LinearRegression())
house_model.fit(X_house, y_house)
# 预测房价
y_pred_house = house_model.predict(X_house)
mse_house = mean_squared_error(y_house, y_pred_house)
print(f'Polynomial House Price Prediction MSE: {mse_house:.3f}')
这个例子展示了如何使用多项式回归来预测房价,以及如何通过提高多项式的次数来捕捉更加复杂的模式。
24.5 多项式回归的实际应用
尽管多项式回归能有效地建模非线性关系,但它并不是万能的。对于维度较高的数据,多项式回归可能表现不佳,且计算成本较高。在实际应用中,我们通常需要结合交叉验证、正则化等手段,来选择合适的多项式次数以及模型参数。