正则化

使用 PySpark 进行机器学习

Andrew Collier

Data Scientist, Fathom Data

特征:很少

只有少量特征的数据集

使用 PySpark 进行机器学习

特征:过多

具有许多特征的数据集

使用 PySpark 进行机器学习

特征:已选择

从多特征数据集中选择特征

使用 PySpark 进行机器学习

损失函数(回顾)

线性回归目标是最小化 MSE。

均方误差损失函数

使用 PySpark 进行机器学习

带正则化的损失函数

线性回归目标是最小化 MSE。

带正则化项的均方误差损失函数

加入一个依赖于系数的"正则化"项。

使用 PySpark 进行机器学习

正则化项

在损失函数中加入额外的"正则化"项。

正则化项可以是

  • Lasso——系数的绝对值
  • Ridge——系数的平方

也可以使用 Lasso 与 Ridge 的混合。

正则化强度由参数 $\lambda$ 决定:

  • $\lambda = 0$——无正则化(标准回归)
  • $\lambda = \infty$——完全正则化(所有系数为零)
使用 PySpark 进行机器学习

再次看汽车数据

assembler = VectorAssembler(inputCols=[
    'mass', 'cyl', 'type_dummy', 'density_line', 'density_quad', 'density_cube'
], outputCol='features')
cars = assembler.transform(cars)
+-----------------------------------------------------------------------------+-----------+
|features                                                                     |consumption|
+-----------------------------------------------------------------------------+-----------+
|[1451.0,6.0,1.0,0.0,0.0,0.0,0.0,303.8743455497,63.63860639785,13.32745683724]|9.05       |
|[1129.0,4.0,0.0,0.0,1.0,0.0,0.0,244.2137140385,52.82580879050,11.42673778726]|6.53       |
|[1399.0,4.0,0.0,0.0,1.0,0.0,0.0,307.6753903672,67.66557958374,14.88136784335]|7.84       |
|[1147.0,4.0,0.0,1.0,0.0,0.0,0.0,264.1031545014,60.81122599620,14.00212433714]|7.84       |
+-----------------------------------------------------------------------------+-----------+
使用 PySpark 进行机器学习

汽车:线性回归

在训练集上拟合(标准)线性回归模型。

regression = LinearRegression(labelCol='consumption').fit(cars_train)
# 测试集 RMSE
0.708699086182001

查看系数:

regression.coefficients
DenseVector([-0.012, 0.174, -0.897, -1.445, -0.985, -1.071, -1.335, 0.189, -0.780, 1.160])
使用 PySpark 进行机器学习

汽车:Ridge 回归

# alpha = 0 | lambda = 0.1 -> Ridge
ridge = LinearRegression(labelCol='consumption', elasticNetParam=0, regParam=0.1)
ridge.fit(cars_train)
# RMSE
0.724535609745491
# Ridge 系数
DenseVector([ 0.001, 0.137, -0.395, -0.822, -0.450, -0.582, -0.806, 0.008,  0.029, 0.001])
# 线性回归系数
DenseVector([-0.012, 0.174, -0.897, -1.445, -0.985, -1.071, -1.335, 0.189, -0.780, 1.160])
使用 PySpark 进行机器学习

汽车:Lasso 回归

# alpha = 1 | lambda = 0.1 -> Lasso
lasso = LinearRegression(labelCol='consumption', elasticNetParam=1, regParam=0.1)
lasso.fit(cars_train)
# RMSE
0.771988667026998
# Lasso 系数
DenseVector([   0.0,   0.0,    0.0, -0.056,    0.0,    0.0,    0.0, 0.026,    0.0,   0.0])
# Ridge 系数
DenseVector([ 0.001, 0.137, -0.395, -0.822, -0.450, -0.582, -0.806, 0.008,  0.029, 0.001])
# 线性回归系数
DenseVector([-0.012, 0.174, -0.897, -1.445, -0.985, -1.071, -1.335, 0.189, -0.780, 1.160])
使用 PySpark 进行机器学习

正则化 → 更简单的模型

使用 PySpark 进行机器学习

Preparing Video For Download...