1. 程式人生 > >正則化(regularization)

正則化(regularization)

一、過擬合(overfitting)問題


上圖是房價(Price)與房子面積(Size)的關係的例項。我們的目標是利用多項式迴歸來根據房子面積來預測房價。

左邊的模型僅用了一次項,此時模型引數有倆θ0、θ1,是一條直線;直觀的觀察樣本點(紅色×)的趨勢,我們發現該模型並不能很好的擬合兩者的關係(很明顯,隨著房子面積增大,住房價格的變化趨於穩定或者說越往右越平緩)。此類情況稱為欠擬合(underfitting)!

右邊的模型用到了四次項,此時模型引數由五個θ0、θ1、θ2、θ3θ4,此時從表面看上去模型很好的擬合了樣本點;但實際上這是一條非常扭曲的曲線,它不停的上下波動。當一個新的樣本(Size)需要預測時,結果也不準確!這類情況叫做過擬合(overfitting)!

只有中間的模型,引數不多不少,剛好能反應Size和Price之間的真實關係!

二、利用正則化來解決過擬合問題

首先應當知道:

1、特徵數量過多(對應上例中就是多項式項數過多,即θ引數數量過多);

2、訓練樣本過少

都會導致過擬合的問題。因此,對應的,可以從兩個方面下手來解決過擬合的問題:

1、減少特徵數量(reduce number of features)

2、增加樣本數量,或樣本增強

但有時我們的樣本數量有限,同時我們也不想減少特徵數量(因為可能每個特徵都會對結果一些貢獻),該怎麼辦呢?

答案就是——用正則化!

正則化就是在特徵數量不變的情況下,減少某些θ引數的值,使其對預測結果(y,上例中就是Price)的貢獻較小!

對於上例右側情況(過擬合的模型),正則化具體過程:

首先得知道訓練模型就是最小化一個代價函式:


當上式最小時的引數θ值,就是我們要訓練的模型引數了。

接下來,我們假設加上倆懲罰項,從而使θ3,θ4足夠小。例如下邊這樣:


1000 只是我隨便寫的某個較大的數字而已。這樣我們最小化加了懲罰項的代價函式時,θ3,θ4就非常小,接近於0;這樣模型就和上例中間的模型差不多了!這就是正則化的效果!

嚴謹一些的話,正則化就是在代價函式中加入懲罰項:


然後最小化代價函式就可以了:


其中:

就是正則項!λ成之為正則化引數,用來控制平衡。當λ非常大時,會把使所有的引數非常小!這樣模型也是不行的。

三、線性迴歸中的正則化

對於線性迴歸,我們知道其最小二乘解:(推導過程略)


如果加入了正則項後:

其最小二乘解為:(推導過程略)


現在考慮 M(即樣本量), 比 N(即特徵的數量)小或等於N的情況:

根據線性代數理論,如果有效方程數小於未知數時,方程有無窮多個解的。對應於模型就是說無法確定單一θ值!但加入了正則項後,只有λ > 0,不難證明

是可逆的,同時保證了唯一解!

二、舉例(TensorFlow中Full Connection中加入正則化。程式碼僅是示例,不保證能執行):

#coding:utf-8
import tensorflow as tf

def get_weight(shape, lambda):
    var = tf.Variable(tf.random_normal(shape), dtype=tf.float32)
    # 把正則化加入集合losses裡面
    tf.add_to_collection("losses",tf.contrib.layers.l2_regularizer(lambda)(var))
    return var

x = tf.placeholder(tf.float32,shape=(None, 2))
y_= tf.placeholder(tf.float32,shape=(None, 1)) # ground true

# 神經網路層節點的個數
layer_dimension = [2,10,10,10,1]
# 神經網路的層數
n_layers = len(layer_dimension)
cur_layer = x
in_dimension = layer_dimension[0]
for i in range (1, n_layers):
    out_dimension = layer_dimension[i]
    weight = get_weight([in_dimension,out_dimension], 0.001)
    bias = tf.Variable(tf.constant(0.1, shape(out_dimension)))
    cur_layer = tf.nn.relu(tf.matmul(x, weight)) + bias)
    in_dimension = layer_dimension[i]
# 計算最終輸出與標準之間的loss
ses_loss = tf.reduce_mean(tf.square(y_ - cur_layer))
# 把均方誤差也加入到集合裡
tf.add_to_collenction("losses", ses_loss)
# tf.get_collection返回一個列表,內容是這個集合的所有元素
# add_n()把輸入按照元素相加
loss = tf.add_n(tf.get_collection("losses"))


相關推薦

機器學習中的Regularization

參考知乎回答:https://www.zhihu.com/question/20924039  以及部落格  https://blog.csdn.net/jinping_shi/article/details/52433975 定義&用途 經常能在L

機器學習筆記4:Regularization

機器學習筆記4:正則化(Regularization) Andrew Ng機器學習課程學習筆記4 過擬合與欠擬合   線性擬合時,有兩種擬合效果不好的情況,分別是過擬合與欠擬合。   過擬合(overfitting),也叫高方差(variance)。主要是擬合曲線過於彎曲,雖然

為什麼Regularization可以減少過擬合風險

在解決實際問題的過程中,我們會傾向於用複雜的模型來擬合複雜的資料,但是使用複雜模型會產生過擬合的風險,而正則化就是常用的減少過擬合風險的工具之一。過擬合過擬合是指模型在訓練集上誤差很小,但是在測試集上表現很差(即泛化能力差),過擬合的原因一般是由於資料中存在噪聲或者用了過於複

機器學習筆記——regularization

正則化 過擬合 我們在利用資料來進行曲線擬合的時候會出現三種情況,欠擬合(underfitting),合適(just right),過擬合(overfitting)。欠擬合的情況一般是由於變數太少,而過擬合的原因一般是變數太多 下面我們主要考慮過擬合的問題。過擬合的解決方法一

機器學習之Regularization

1. The Problem of Overfitting 1 還是來看預測房價的這個例子,我們先對該資料做線性迴歸,也就是左邊第一張圖。 如果這麼做,我們可以獲得擬合數據的這樣一條直線,但是,實際上這並不是一個很好的模型。我們看看這些資料,很明顯,隨著房子面積增大,住房價格的變化趨於穩定或者說越往右越平緩

regularization

一、過擬合(overfitting)問題 上圖是房價(Price)與房子面積(Size)的關係的例項。我們的目標是利用多項式迴歸來根據房子面積來預測房價。 左邊的模型僅用了一次項,此時模型引數有倆θ0、θ1,是一條直線;直觀的觀察樣本點(紅色×)的趨勢,我們發現該模型並不

資料預處理中歸一Normalization與損失函式中Regularization解惑

背景:資料探勘/機器學習中的術語較多,而且我的知識有限。之前一直疑惑正則這個概念。所以寫了篇博文梳理下 摘要:   1.正則化(Regularization)     1.1 正則化的目的      1.2 結構風險最小化(SRM)理論     1.3 L1範數

系統學習機器學習之

監督機器學習問題無非就是“minimizeyour error while regularizing your parameters”,也就是在規則化引數的同時最小化誤差。最小化誤差是為了讓我們的模型擬合我們的訓練資料,而規則化引數是防止我們的模型過分擬合我們的訓練資料。多麼簡約的哲學啊!因為引數太多,會導致

機器學習基礎三十 —— 線性迴歸、regularized線性迴歸、區域性加權線性迴歸LWLR

1. 線性迴歸 線性迴歸根據最小二乘法直接給出權值向量的解析解(closed-form solution): w=(XTX)−1XTy 線性迴歸的一個問題就是有可能出現欠擬合現象,因為它求的是具有最小均方誤差(LSE,Least Square Erro

神經網路模型無法正常工作時我們應該做什麼系列——Regularlization

前言 當你進入深度學習領域,準備好深度神經網路,開始進行訓練時,遇到這樣一個大部分新手都會遇到的問題:你的神經網路沒法正常工作,而你不知道該如何去修正它。你去問你的老闆或者導師,他們也不知道該如何處理,因為在深度神經網路面前,他們和你一樣也是新

機器學習中regularization加入weight_decay的作用

Regularization in Linear Regression 轉載自:http://blog.sina.com.cn/s/blog_a18c98e5010115ta.html Regularization是Linear Regression中很重要的一步。

深度學習:L2、dropout

一、在瞭解正則化之前,先引入一個概念“過擬合” 定義 給定一個假設空間H,一個假設h屬於H,如果存在其他的假設h’屬於H,使得在訓練樣例上h的錯誤率比h’小,但在整個例項分佈上h’比h的錯誤率小,那麼就說假設h過度擬合訓練資料。 也就是說 一個假設在訓練資料上能夠獲

吳恩達機器學習解決過擬合問題

目錄 0. 前言 學習完吳恩達老師機器學習課程的正則化,簡單的做個筆記。文中部分描述屬於個人消化後的理解,僅供參考。 0. 前言 在分類或者回歸時,通常存在兩個問題,“過擬合”(overfitting)和“欠擬合”(underfitting). 過擬

泛化能力、訓練集、測試集、K折交叉驗證、假設空間、欠擬合與過擬合、L1、L2、超引數

泛化能力(generalization): 機器學習模型。在先前未觀測到的輸入資料上表現良好的能力叫做泛化能力(generalization)。 訓練集(training set)與訓練錯誤(training error): 訓練機器學習模型使用的資料集稱為訓練集(tr

TensorFlow北大公開課學習筆記4.4-神經網路優化---- 損失函式

 今天學習了正則化,主要內容是:通過程式碼比較正則化與不正則化的區別。 什麼叫過擬合?           神經網路模型在訓練資料集上的準確率較高,在新的資料進行預測或分類時準確率較低, 說明模型的泛化能力差 什麼叫正則化:?           在損失函式中給每個引數

TensorFlow 中的Batch Normalization詳解和實現程式碼

        雖然在訓練初期使用 He 初始化方法初始ELU(或者其他派生的ReLU)能夠有效的防止梯度彌散、爆炸問題。但是這種方式無法保證梯度問題不會在訓練過程中產生。         2015年的一篇paper( “Batch Normalization: Accel

【TensorFlow】過擬合問題

轉載自:https://www.cnblogs.com/linyuanzhou/p/6923607.html,尊重原創 tf.add_to_collection:把變數放入一個集合,把很多變數變成一個列表 tf.get_collection:從一個結合中取出全部變數,是一個列表 tf.add_n:把一個列表

【Python資料預處理】 歸一按列減均值,除方差,標準化按列縮放到指定範圍範數

一、標準化(Z-Score),或者去除均值和方差縮放 公式為:(X-mean)/std  計算時對每個屬性/每列分別進行。 將資料按期屬性(按列進行)減去其均值,並處以其方差。得到的結果是,對於每個屬性/每列來說所有資料都聚集在0附近,方差為1。 實現時,有兩種不同

[機器學習實驗4]引入懲罰因子

線性迴歸中引入正則化引數。 x再線性迴歸的實踐中是一維的,如果是更高維度的還要做一個特徵的轉化,後面的logic迴歸裡面會提到 引入正則化引數之後公式如上,當最小化J(θ)時,λ 越大,θ越小,所以通過調節λ的值可以調節擬合的h函式中中θ的大

表示式re

1、re.match(pattern, str, flag) 從str的第一個字母開始匹配,若不是開頭的,儘管屬於str內,則無法匹配。 2、貪婪匹配與非貪婪匹配(?) 貪婪匹配:嘗試匹配儘可能多的字元 >>> sentence = """You said "why?" and I