這些機器學習基礎,你忽略了嗎?
- 偏差/方差權衡
- 一些誤差驗證-評估方法
- 一些常見的模型指標
- 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 / 1400 = 50%F值 = 70% * 50% * 2 / (70% + 50%) = 58.3% 不妨看看如果把池子里的所有的鯉魚、蝦和鱉都一網打盡,這些指標又有何變化:
正確率 = 700 / (700 + 200 + 100) = 70%
正確率 = 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: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 對話系統的論文筆記或基礎學習筆記,謝謝支持,大家共勉加油!
推薦閱讀:
※關於機器學習,你必須知道的10件事情
※LR和SVM的聯繫區別
※CS231n課程筆記翻譯:神經網路筆記 2
※推薦兩個博客:《Python 與機器學習》,《MachineLearning》
TAG:机器学习 |