L 1およびL 2損失関数(L 1 and L 2 loss function)およびpython実装


私たちが機械学習をするとき、よく損失関数を選択します.よくある損失関数は2種類あります.L 1-norm loss functionとL 2-norm loss functionです.
損失関数(loss function)と正規化(regularity)は2つの異なるものであり、考え方は似ているが、彼らは完全に異なる役割と目的を持っていることに注意しなければならない.本文は主に損失関数について述べる.
L 1とL 2の正規化説明
L 1とL 2損失関数定義
L 1損失関数
L 1損失関数の使用は、絶対誤差の最小化(Least Abosulote Error)とも呼ばれる.この名前はとてもイメージ的です.LAEは真実値y i y_を最小化するi yiと予測値f(x i)f(x_i)f(xi)との差分D 1 D_DL 1の絶対値の和.D L 1 = ∑ i = 1 n ∣ y i − f ( x i ) ∣ D_{L1} =\sum_{i=1}^{n}|y_i-f(x_i)|DL 1=i=1Σn∣yi−f(xi)∣ここでのD L 1 D_{L 1}DL 1は実は平均絶対誤差(MAE)L 1損失関数であるmin⁡D L 1min{D_{L 1}}minDL 1を用いる.
L 2損失関数
L 2損失関数を用いた最小二乗誤差(Least Square Error)とも呼ばれる.LSEは、実値y i y_を最小化することであるi yiと予測値f(x i)f(x_i)f(xi)との差分D 1 D_DL 1の平方の和.D L 2 = ∑ i = 1 n ( y i − f ( x i ) ) 2 D_{L2} =\sum_{i=1}^{n}(y_i-f(x_i)^2 DL 2=i=1Σn(yi−f(xi))2ここでのDL 2 D_{L 2}DL 2は実は平均絶対誤差(MAE)L 2損失関数すなわちmin⁡D L 2min{D_{L 2}}minDL 2を用いる.
L 1とL 2損失関数の違い
L 2損失関数は最もよく用いられる損失関数であり,回帰問題,すなわち我々がよく知っている最小二乗法である.また,Gaussマルコフ条件を満たす場合,L 2損失関数を用いて得られたパラメータが無偏性と有効性を有することを実証した.
しかし,L 1損失関数にも独自の利点があり,以下では2つの損失関数を比較する.
L1
L2
安定性が高い
安定性は普通
安定した解がない
安定した解がある
複数のグループの解が得られる可能性があります
たった一つの解
あんていせい
L 1損失関数のロバスト性はその最大の利点である.誤差の大きい観測ではL 1損失関数はその影響を受けにくい.これは,L 1損失関数が増加するのは誤差の1つにすぎず,L 2損失関数が増加するのは誤差の2乗であるからである.誤差が大きい場合,L 2損失関数を用いると,この観測に適応するためにより大きな調整モデルが必要になるので,L 2損失関数はL 1損失関数ほど安定ではない.では、モデルに異常値が存在する可能性があると考えられる場合、L 1損失関数を使用するとより良い可能性がある.しかし,誤差の大きい観測もモデルに組み込む必要がある場合,L 2損失関数を用いるほうがよい.
かいのあんていせい
まず、解の効率から言えば、L 2損失関数は至る所で導くことができ、L 1損失関数は零点位置で導くことができず、これによりL 2損失関数を用いて解くことで解析解を得ることができ、L 1損失関数はない.次に,データに微小な変化がある場合,L 1損失関数の変化はより大きく,その解はより不安定である.
python numpy実装
import numpy as np
#  L1    
def L1_loss(y_true,y_pre): 
    return np.sum(np.abs(y_true-y_pre))
#  L2    
def L2_loss(y_true,y_pre):
    return np.sum(np.square(y_true-y_pre))

#              
y_true = np.array([1,2,3,4,5,6,7,8,9])
y_pre  = np.array([1.2,2.3,3.5,4.3,4.6,5.6,6.1,7.1,8.8])

#    
print('L1 loss is {}'.format(L1_loss(y_true,y_pre)))
"""L1 loss is 4.1000000000000005"""
print('L2 loss is {}'.format(L2_loss(y_true,y_pre)))
"""L2 loss is 2.450000000000001"""