L1范數與L2范數
L1范數與L2范數在機器學習中,是常用的兩個正則項,都可以防止過擬合的現象。L1范數的正則項優化參數具有稀疏特性,可用於特征選擇;L2范數正則項優化的參數較小,具有較好的抗干擾能力。
1. 防止過擬合
L2正則項優化目標函數時,一般傾向於構造構造較小參數,一般認為,參數值較小的模型相對簡單,能適應不同的數據集,在一定程度上避免過擬合的現象,參數較小,數據偏移帶來的影響也會較小,從而說L2正則項具有較好的抗干擾能力,從而實現防止過擬合的現象。
L1正則項也可以防止過擬合現象,主要是利用了L1正則項優化參數的稀疏特性。一個簡單的模型,配置參數越少,復雜度越小,而稀疏化的參數,模型的的很多參數都變為0,達到減少參數的目的,從而實現防止過擬合的現象。
例子1:
假設有數據點10個數據點,分別為:(0, -2), (10, 18), (20, 15), (30, 35), (40, 42), (50, 50), (60, 66), (70, 76), (80, 77), (90, 85),如圖1(見代碼1)。

假設該模型為線性模型,即 \(y=ax+b\) 。通過均方誤差(MSE)的方式,求解參數\(a\)和\(b\)的值,設上面的10個點分別表示為 \((x_1,y_1),...,(x_{10},y_{10})\) ,目標函數表示為:
其中,\(Y = \left( {{y_1},...,{y_N}} \right) \in {R^{1 \times N}}\),\(A = \left( {a,b} \right) \in {R^{1 \times 2}}\),\(X = \left( {\begin{array}{*{20}{c}} {{x_1}}& \cdots &{{x_N}}\\ 1& \cdots &1 \end{array}} \right) \in {R^{1 \times N}}\)。
求解:
(結果見代碼1)。
添加L2正則項,
求解得到
(結果見代碼2)。
# 代碼1
import numpy as np
import matplotlib.pyplot as plt
from numpy.linalg import inv
if __name__ == '__main__':
x = np.arange(0, 100, 10)
np.random.seed(2019)
y = x + np.random.randint(-10, 11, 10)
data = list(zip(x, y))
print(data)
# [(0, -2), (10, 18), (20, 15), (30, 35), (40, 42), (50, 50), (60, 66),
# (70, 76), (80, 77), (90, 85)]
plt.plot(x, y, '-*')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
X = np.vstack((np.array(x), np.ones(len(x))))
Y = np.array(y)
A = Y.dot(X.T).dot(inv(X.dot(X.T)))
print(A) # [0.97090909 2.50909091]
2. L1正則化的稀疏解釋
首先闡述一下為什么需要稀疏。
假設有樣本\(x \in R^m\), \(X=(x_1,...,x_N)\)是\(N\)個樣本,\(x_i\)是列向量,這\(N\)個樣本的類別表示為\(Y=(y_1,...,y_N)\),假設\(m>N\),現有一個線性模型\(Y=\theta X\), \(\theta \in R^m\), 由於\(m>N\),所以$ \theta $ 有無數個解,\(x_i\) 是 \(m\) 維的列向量,可能並不是所有的屬性對構建模型都是有效的,此時需要篩選出一些有用的屬。這里對於無用的屬性,可以使用 $ \theta $ 篩選,在指定位置置零即可,除掉 \(X\) 中無用的屬性,此時可能有 \(m_{new} < N\) 該線性模型可能得到唯一解。但是,如何尋找稀疏的 $ \theta $ 呢?
參考:https://vimsky.com/article/3852.html
