航班时长模型:正则化!
在上一个练习中,您为航班时长模型加入了更多特征。模型在测试数据上表现不错,但由于系数过多,解释起来比较困难。
本练习中,您将使用 Lasso 回归(带 L1 惩罚的正则化)来构建一个更简洁的模型。得到的模型中,许多系数会被设为 0。这意味着只有一部分特征实际对模型有贡献。即使模型更简单,在测试数据上的 RMSE 仍然可观。
您将使用一个指定的正则化强度值。稍后您会学习如何通过交叉验证找到最优值。
数据(与上个练习相同)存放在 flights 中,并已随机划分为 flights_train 和 flights_test。
该模型有两个参数:λ(regParam)和 α(elasticNetParam)。其中 α 决定正则化的「类型」,而 λ 决定正则化的「强度」。
本练习是课程的一部分
使用 PySpark 进行机器学习
练习说明
- 在训练数据上拟合线性回归模型,将正则化强度设为 1。
- 计算测试数据上的 RMSE。
- 查看模型系数。
- 有多少个系数等于 0?
交互式实操练习
通过完成这段示例代码来试试这个练习。
from pyspark.ml.regression import LinearRegression
from pyspark.ml.evaluation import RegressionEvaluator
# Fit Lasso model (λ = 1, α = 1) to training data
regression = ____(____, ____, elasticNetParam=1).____(____)
# Calculate the RMSE on testing data
rmse = ____(____).____(____)
print("The test RMSE is", rmse)
# Look at the model coefficients
coeffs = regression.____
print(coeffs)
# Number of zero coefficients
zero_coeff = sum([____ == ____ for beta in regression.coefficients])
print("Number of coefficients equal to 0:", zero_coeff)