作者:老齐
与本文相关的图书推荐:《数据准备和特征工程》
向量的范数(norm),也称为长度,或大小。
是
中的向量,其范数记作:
。
范数(注意:
是英文字母
的小写),也称为曼哈顿范数,记作:
:
范数,也称为欧几里得范数,记作:
:
除了
范数,还有计算如下范数的可能:
(
)
(数据中的绝对值最大值)
实现与应用
如果要计算向量的范数,可以使用Numpy提供的函数。
代码语言:javascript复制import numpy as np
a = np.array([[3], [4]])
L1 = np.linalg.norm(a, 1)
print(L1)
输出:
代码语言:javascript复制7.0
以上使用np.linalg.norm
函数计算了向量
的
范数,使用这个函数还可以计算
范数。
代码语言:javascript复制L2 = np.linalg.norm(a)
L2
输出:
代码语言:javascript复制5.0
用np.linalg.norm
上述两个范数,差别在于设置参数,默认计算
范数。
除了计算之外,
范数还会经常被用于线性回归的正则化中。
所谓线性回归,就是利用数据集
(
是数据集中第
个属性的取值),找到一个各个属性线性组合的函数:
并用这个函数进行预测。
一般可用向量形式写成
假设已知训练集
,其中
在有监督学习中称为标签,利用此数据集对模型进行训练,期望能得到上述函数,即确定参数
和
的值。那么,应该如何“训练”呢?
先要明确训练的目的,就是要通过某些方法实现
与
之间的的差别最小,如果为0就是最理想的了。在机器学习中,这种“差别”可以用某一个函数表示,此函数称为损失函数(Loss function),或代价函数、成本函数(Cost function):
函数
可以有多种形式,通常我们选择均方误差,即:
在线性回归中,常用的“最小二乘法”就是求解
和
使
最小化的过程。此过程中,为了追求
最小化,不得不让模型复杂度提高,结果往往会让训练出来的模型对其他数据集(比如测试集)的误差增大,这种现象称为过拟合。在实际业务中,避免过拟合的方法比较多,比如增加数据量、交叉验证等,其中正则化是针对线性模型常用的一种方法。
- 第一项依然是损失函数,用于衡量模型与数据的拟合程度。
- 第二项中的
表示模型的复杂度 ,它是一种定义域为函数,值域为实数的函数,即向量空间到实数的一个映射。模型
越复杂,复杂度
就越大;反之,模型越简单,复杂度
就越小。也就是说,复杂度表示了对模型的惩罚,因此我们也把它称为惩罚项。
是不小于
的系数,用以平衡惩罚项的权重,
称为正则化项。
如此,即实现了对线性回归模型的正则化,即考虑了训练集中模型与数据的拟合程度,又照顾到了模型的复杂度,从而能够让模型对测试数据也能有较好的预测。
对于函数
,也会有不同的具体形式,一般地,可以选择:
范数,结合函数
的均方误差形式,可以表示为:
使用
范数作为惩罚项的线性回归称为LASSO回归。
范数,可以表示为:
使用
范数作为惩罚项的线性回归称为岭回归(Ridge回归)。
除此之外,还有其他实现正则化的方法,比如弹性网络(Elastic Net),就是通过平衡
范数和
实现了正则化项。