科學也可以如此靠近

這些機器學習基礎,你忽略了嗎?

3月
20
2018

2018年3月20日05時 今日科學 鳳凰新聞

鳳凰新聞

<

偏差/方差權衡

一些誤差驗證-評估方法

一些常見的模型指標

AUC、ROC是什麼?

重中之重之特徵工程

一些特徵類型

一些特徵來源

偏差/方差權衡

在學習算法中,偏差指的是預測的期望值與真實值的偏差,方差則是每一次預測值與預測值得期望之間的差均方,當然還有任務本身的噪音。實際上,偏差體現了學習器預測的準確度,而方差體現了學習器預測的穩定性。噪聲表達當前任務在任何學習算法所能達到的泛化誤差的下界,通過對泛化誤差的進行分解。可以得到:

期望泛化誤差=方差+偏差+噪聲

偏差刻畫學習器的擬合能力

方差體現學習器的穩定性

噪音刻畫了問題本身的難度

方差和偏差具有矛盾性,這就是常說的偏差-方差窘偽境(bias-variance

dilamma),隨著訓練程度的提升,期望預測值與真實值之間的差異越來越小,即偏差越來越小,但是另一方面,隨著訓練程度加大,學習算法對數據集的波動越來越敏感,方差值越來越大。也就如下圖所示,換句話說:在欠擬合時,偏差主導泛化誤差,而訓練到一定程度後,偏差越來越小,方差主導了泛化誤差。因此訓練也不要貪杯,適度輒止。

(最上面的線是泛化誤差)

順便一提,模型複雜程度和偏差/方差權衡:

我們在偏差與方差間都會做出權衡。如果我們的模型過於簡單,只有很少的幾個參數,那麼它可能存在著較大的偏差(但是方差較小);如果過於複雜而含有非常多的參數,那麼模型可能會存在較大的方差(但是偏差較小)。同時,一般而言,高偏差意味著欠擬合,高方差意味著過擬合。

一些誤差驗證-評估方法

保留交叉驗證/留出法:

從全部的訓練數據 S中隨機選擇 中隨機選擇 s的樣例作為訓練集 train,剩餘的 作為測試集 作為測試集 test。

通過對訓練集訓練 ,得到假設函數或者模型 。

在測試集對每一個樣本根據假設函數或者模型,得到訓練集的類標,求出分類正確率。

選擇具有最大分類率的模型或者假設

k折交叉驗證( k-fold cross validation):

將全部訓練集 S分成 k個不相交的子集,假設 S中的訓練樣例個數為 m,那麼每一個子 集有 個訓練樣例,相應的子集稱作 。

每次從分好的子集中裡面,拿出一個作為測試集,其它k-1個作為訓練集

根據訓練訓練出模型或者假設函數。

把這個模型放到測試集上,得到分類率。

計算k次求得的分類率的平均值,作為該模型或者假設函數的真實分類率。
這個方法充分利用了所有樣本。但計算比較繁瑣,需要訓練k次,測試k次。

當然,交叉驗證中有一個比較特殊的情況—- 留一法 :就是每次只留下一個樣本做測試集(也就是當上面的k==m的情況),其它樣本做訓練集,如果有k個樣本,則需要訓練k次,測試k次。留一發計算最繁瑣,但樣本利用率最高。
適合於小樣本的情況。

我們希望評估的是用整個數據集S訓練出的模型。但在留出法和交叉驗證法中,由於保留了一部分樣本用於測試,因此實際評估的模型所使用的訓練集比S小,這必然會引入一些因訓 練樣本規模不同而導致的估計偏差。留一法受訓練樣本規模變化的影響較小,但計算複雜度又太高了。
這就引出下面的自助法

自助法:

自助法的基本思想是:給定包含m個樣本的數據集S,每次隨機從S 中挑選一個樣本,將其拷貝放入 ,然後再將該樣本放回初始數據集S 中,使得該樣本在下次採樣時仍有可能被採到。

重複執行m 次,就可以得到了包含m個樣本的數據集 。可以得知在m次採樣中,樣本始終不被採到的機率取極限為:

這樣,通過自助採樣,初始樣本集S中大約有36.8%的樣本沒有出現在中,於是可以將S』作為訓練集,作為測試集。自助法在數據集較小,難以有效劃分訓練集/測試集時很有用,但由於自助法產生的數據集(隨機抽樣)改變了初始數據集的分布,因此引入n了估計偏差。在初始數據集足夠時,留出法和交叉驗證法更加常用,我也是最常用交叉驗證的。一些常見的模型指標

正確率 = 提取出的正確信息條數 / 提取出的信息條數

召回率 = 提取出的正確信息條數 / 樣本中的信息條數

兩者取值在0和1之間,數值越接近1,查准率或查全率就越高。

F值 = 正確率 * 召回率 * 2 / (正確率 + 召回率) (F 值即為正確率和召回率的調和平均值)

不妨舉這樣一個例子:某池塘有1400條鯉魚,300隻蝦,300隻鱉。現在以捕鯉魚為目的。撒一大網,逮著了700條鯉魚,200隻蝦,100隻鱉。那麼,這些指標分別如下:

正確率 = 700 / (700 + 200 + 100) = 70%

召回率 = 700 / 1400 = 50%

F值 = 70% * 50% * 2 / (70% + 50%) = 58.3%

不妨看看如果把池子裡的所有的鯉魚、蝦和鱉都一網打盡,這些指標又有何變化:

正確率 = 1400 / (1400 + 300 + 300) = 70%

-召回率 = 1400 / 1400 = 100%

F值 = 70% * 100% * 2 / (70% + 100%) = 82.35%

由此可見,正確率是評估捕獲的成果中目標成果所占得比例;召回率,顧名思義,就是從關注領域中,召回目標類別的比例;而F值,則是綜合這二者指標的評估指標,用於綜合反映整體的指標。AUC、ROC是什麼?

假設有下面兩個分類器,哪個好?(樣本中有A類樣本90個,B 類樣本10個。)

分類器C1把所有的測試樣本都分成了A類,分類器C2把A類的90個樣本分對了70個,B類的10個樣本分對了5個。

則C1的分類精度為 90%,C2的分類精度為75%,但直覺上,我們感覺C2更有用些。但是依照正確率來衡量的話,那麼肯定C1的效果好一點。那麼這和我們認為的是不一致的。也就是說,有些時候,僅僅依靠正確率是不妥當的。

我們還需要一個評價指標,能客觀反映對正樣本、負樣本綜合預測的能力,還要考慮消除樣本傾斜的影響(其實就是歸一化之類的思想),這就是auc指標能解決的問題。

ROC:為了理解auc,我們需要先來弄懂ROC。
先來看一個普遍的二分類問題的結果,預測值和實際值有4種組合情況,看下面的表格:

注意這裡是兩分類問題,所以FN就表示的是分錯的pos類,同理FP就表示的是分錯的neg類

我們定義以下公式有:

看圖也就可以知道:

TPR表示的就是預測正確且實際分類為正的數量 與 所有正樣本的數量的比例。–實際的正樣本中,正確預測的比例是多少?

FPR表示的是預測錯誤且實際分類為負的數量 與所有負樣本數量的比例。
–實際的負樣本當中,錯誤預測的比例是多少?

由下面的表格

分類器C1

分類器C2

可以公式代入,得到:

對於分類器C1:TPR = FPR = 1.0

對於分類器C2:TPR = 0.78, FPR = 0.5

然後,以TPR為縱坐標,FPR為橫坐標畫圖,可以得到:

上圖中藍色表示C1分類器,綠色表示C2分類器。可以知道,這個時候綠色的點比較靠近左上角,可以看做是分類效果較好。也就是說評估標準改為離左上角近的是好的分類器(考慮了正負樣本的綜合分類能力,這個應該比較好理解)。

一連串這樣的點構成了一條曲線,該曲線就是ROC曲線。而ROC曲線下的面積就是AUC(Area under the curve of ROC)。這就是AUC指標的由來。

如何畫ROC曲線?對於一個特定的分類器和測試數據集,顯然只能得到一個分類結果,即一組FPR和TPR結果,而要得到一個曲線,我們實際上需要一系列FPR和TPR的值才能得到這樣的曲線,這又是如何得到的呢?

可以通過分類器的一個重要功能「機率輸出」,即表示分類器認為某個樣本具有多大的機率屬於正樣本(或負樣本),來動態調整一個樣本是否屬於正負樣本

假如我們已經得到了所有樣本的機率輸出(屬於正樣本的機率),現在的問題是如何改變這個閾值(機率輸出)?我們根據每個測試樣本屬於正樣本的機率值從大到小排序。下圖是一個示例,圖中共有20個測試樣本,「Class」一欄表示每個測試樣本真正的標籤(p表示正樣本,n表示負樣本),「Score」表示每個測試樣本屬於正樣本的機率。

接下來,我們從高到低,依次將「Score」值作為閾值,當測試樣本屬於正樣本的機率大於或等於這個閾值時,我們認為它為正樣本,否則為負樣本。舉例來說,對於圖中的第4個樣本,其「Score」值為0.6,那麼樣本1,2,3,4都被認為是正樣本,因為它們的「Score」值都大於等於0.6,而其他樣本則都認為是負樣本。每次選取一個不同的閾值,我們就可以得到一組FPR和TPR,即ROC曲線上的一點。這樣一來,我們一共得到了20組FPR和TPR的值,將它們畫在ROC曲線的結果如下圖:

當我們將閾值設置為1和0時,分別可以得到ROC曲線上的(0,0)和(1,1)兩個點。將這些(FPR,TPR)對連接起來,就得到了ROC曲線。當閾值取值越多,ROC曲線越趨於平滑。

AUC值的計算:AUC(Area Under Curve)被定義為ROC曲線下的面積,顯然這個面積的數值不會大於1。又由於ROC曲線一般都處於y=x這條直線的上方,所以AUC的取值範圍在0.5和1之間。所以,使用AUC值作為評價標準是因為很多時候ROC曲線並不能清晰的說明哪個分類器的效果更好,而作為一個數值,對應AUC更大的分類器效果更好。

為什麼使用ROC和AUC?既然已經這麼多評價標準,為什麼還要使用ROC和AUC呢?因為ROC曲線有個很好的特性:當測試集中的正負樣本的分布變化的時候,ROC曲線能夠保持不變。在實際的數據集中經常會出現類不平衡(class

imbalance)現象,即負樣本比正樣本多很多(或者相反),而且測試數據中的正負樣本的分布也可能隨著時間變化。下圖是ROC曲線和Precision-Recall曲線的對比:

在上圖中,(a)和(c)為ROC曲線,(b)和(d)為Precision-Recall曲線。(a)和(b)展示的是分類其在原始測試集(正負樣本分布平衡)的結果,(c)和(d)是將測試集中負樣本的數量增加到原來的10倍後,分類器的結果。可以明顯的看出,ROC曲線基本保持原貌,而Precision-Recall曲線則變化較大。

重中之重之特徵工程

如坊間戲言「特徵沒做好,參數調到老」,機器學習大牛 Andrew Ng 也說過「『Applied machine learning』is basically feature engineering」,可見特徵工程的重要性,我們現在很多時候用end to

end的深度學習模型而忽略特徵工程的知識,但在實戰項目的時候就會發現他是多麼的重要。所以這裡有必要一提,特徵工程的知識點,你忽略了嗎?

如下圖所示,特徵工程包含巨多知識點,若想要學好實在不易,先上圖,然後講下一些常見特徵概念,至於降維,特徵監控什麼的這裡先不介紹,大家若有興趣可以去了解。

圖片較模糊,可能要放大之後才看的清楚

特徵提取與特徵選擇:

特徵選擇:特徵選擇也叫特徵子集選擇 ( FSS , Feature Subset Selection )

。是指從已有的M個特徵(Feature)中選擇N個特徵使得系統的特定指標最優化,是從原始特徵中選擇出一些最有效特徵以降低數據集維度的過程,是提高學習算法性能的一個重要手段,也是模式識別中關鍵的數據預處理步驟。對於一個學習算法來說,好的學習樣本是訓練模型的關鍵。.

特徵提取:特徵提取是計算機視覺和圖像處理中的一個概念。它指的是使用計算機提取圖像信息,決定每個圖像的點是否屬於一個圖像特徵。特徵提取的結果是把圖像上的點分為不同的子集,這些子集往往屬於孤立的點、連續的曲線或者連續的區域。

提取就是通過降維技術來抽出主要信息,是計算機視覺的概念,通過映射實現,可以理解為高維的映射到低維,不刪除具體特徵,而是捨去那些通過映射後不能代表原來主要信息的數據 ,相對應的 選擇就是要捨去一些特徵,拿到整體主要特徵,要刪除一些具體特徵

一些特徵類型

數值型特徵:也就是常見的數值特徵,比如一個人的身高,體重。數值型特徵在應用時往往需要歸一化,比如將幅度調整到 <0,1> 區間。當然也有離散化,排序後變成新的特徵的做法。

類別型特徵:類別型一般是文本信息,比如顏色是紅色、黃色還是藍色,我們存儲數據的時候就需要先處理數據。處理方法有one-hot編碼,Hash編碼成詞向量和 Histogram映射等等。具體如下:

one-hot編碼:對於每一個特徵,如果它有m個可能值,那麼經過獨熱編碼後,就變成了m個二元特徵。並且,這些可能值互斥,每次只有一個激活。因此,數據會變成稀疏的。它的稀疏格式是記憶友好的(便於存儲),但注意去掉第一列避免共線性 。

Hash編碼成詞向量: 如下圖,若某個詞存在於句子中就置為1,若不存在則為0

Histogram映射:把每一列的特徵拿出來,根據target內容做統計,把target中的每個內容對應的百分比填到對應的向量的位置。優點是把兩個特徵聯繫起來。

上表中,我們來統計「性別與愛好的關係」,性別有「男」、「女」,愛好有三種,表示成向量 <散步、足球、看電視劇>,分別計算男性和女性中每個愛好的比例得到:男<1/3, 2/3, 0>,女<0, 1/3, 2/3>。即反映了兩個特徵的關係。

時間型特徵:時間型特徵的用處特別大,既可以看做連續值(持續時間、間隔時間),也可以看做離散值(星期幾、幾月份)。數據挖掘中經常會用時間作為重要特徵,比如電商可以分析節假日和購物的關係,一天中用戶喜好的購物時間等。

當然,還有像文本型特徵,統計型特徵,這裡先不細講,有興趣的可以了解

一些特徵來源

離散特徵:對於數值型特徵,其連續性或者範圍非常廣導致需要進行特徵處理,而離散化就是一個較為常見的方式,特徵離散化有兩種劃分方式:一種是等值劃分(按照值域均分),另一種是等量劃分 (按照樣本數均分)。我們常常對 數值(numeric) 類型的特徵採用了等量劃分的離散化方式,比如先將每 一維特徵按照數值大小排序,然後均勻地劃分為 10 個區間,即離散化為 1~10。

排序特徵:顧明思議,將數值型特徵排序後的順序作為一種特徵,排序特徵對異常數據都有較強的魯棒性,使得模型更加穩定,降低過擬合的風險。

計數特徵:舉個例子,比如我們已經對數值特徵進行了離散化,離散化後它的特徵是 5,3,1,3,3,3,2,4,3,2,5,3,2,3,2…2,2,2,2,2,2,2,我們可以進一步統計離散特徵中 1~10 出現的次數,即可得到一個 10 維計數特徵。計數特徵可以使得數據更具判別性。

交叉特徵:交叉特徵算是特徵工程中非常重要的方法之一了,交叉特徵是一種很獨特的方式,它將兩個或更多的類別屬性組合成一個。當組合的特徵要比單個特徵更好時,這是一項非常有用的技術。數學上來說,是對類別特徵的所有可能值進行交叉相乘。

假如擁有一個特徵A,A有兩個可能值{A1,A2}。擁有一個特徵B,存在{B1,B2}等可能值。然後,A&B之間的交叉特徵如下:{(A1,B1),(A1,B2),(A2,B1),(A2,B2)},並且你可以給這些組合特徵取任何名字。但是需要明白每個組合特徵其實代表著A和B各自信息協同作用。

一個更好地詮釋好的交叉特徵的實例是類似於(經度,緯度)。一個相同的經度對應了地圖上很多的地方,緯度也是一樣。但是一旦你將經度和緯度組合到一起,它們就代表了地理上特定的一塊區域,區域中每一部分是擁有著類似的特性

寫在後面:因為要趕論文啥的,有段時間沒有更新了,先更新一波,本來想寫RL的,但看好好多專欄都寫的不錯,我也就不想過多重複,下來我會抽時間寫比如open domain 對話系統的論文筆記或基礎學習筆記,謝謝支持,大家共勉加油!


延伸閱讀

黑洞的密度可以比空氣低:我們可能就生活在黑洞中?

除了霍金之外,有很多科學家也聲稱人類不要主動尋找

宇宙中或有一種以光電為食,可耐高溫,能活百萬歲的

人類眼前所見或為幻覺,科學家:大腦有欺瞞性,操控

海上驚現神秘白毛物體,有人認為是外太空生物,眾說


熱門內容

友善連結