寫在前面的話:周志華老師的這本書,我多次嘗試閱讀了,=-=,但卻每次都堅持不下來,最後只是一個不明真相的吃瓜羣衆。每次心中卻隱隱較着勁似得想要重頭讀一遍,這次恰逢年關,趁此閒暇,好好拜讀一番!
第一章 緒論
1.1 引言
通過買西瓜的例子引入。機器學習致力於研究如何通過計算的手段,利用經驗來改善系統自身的性能。
機器學習形式化的定義:假設用P來評估計算機程序在某任務類T上的性能,若一個程序通過利用經驗E在T中任務上獲得了性能改善,則我們就說關於T和P,該程序對E進行了學習。
1.2 基本術語
數據集中的每條記錄是一個示例或樣本。
反映事件或對象在某方面的表現或性質的事項,成爲屬性或特徵。
屬性上的取值,成爲屬性值。
屬性張成的空間,成爲屬性空間、樣本空間或輸入空間。
由於屬性空間中所得每個點對應一個座標向量,因此也把一個示例稱爲一個特徵向量。
所有標記的集合稱爲標記空間、輸出空間。
有監督:
若預測離散值,此類學習任務稱爲分類(分爲二分類和多分類);
若預測連續值,此類學習任務稱爲迴歸。
無監督:
聚類
學的模型適用於新樣本的能力,稱爲泛化能力。
樣本獲得:獨立同分布。
1.3 假設空間
機器學習可以理解爲歸納學習。但是歸納學習中的概念學習太難,目前大多是產生‘黑箱’模型。
學習過程可以看做一個在所有假設組成的空間中進行搜索的過程,最終得到與訓練集一致(即對所有訓練樣本能夠進行正確判斷)的假設。
可能有多個假設與訓練集一致,即存在着一個與訓練集一致的‘假設集合’,我們稱之爲‘版本空間’。
1.4 歸納偏好
版本空間中的假設在面臨新樣本時可能會有不同的輸出。
機器學習算法在學習過程中對某種類型假設的偏好,稱爲‘歸納偏好’。
任何有效的機器學習算法必有其偏好,否則無法產生確定的學習結果。
歸納偏好可看做學習算法自身在一個可能很龐大的假設空間中對假設進行選擇的啓發式或‘價值觀’。
奧卡姆剃刀:若有多個假設與觀察一直,則選最簡單的那個。
沒有免費的午餐定理(NFL):所有‘問題’出現的機會相同、或所有問題同等重要的情況下,無論什麼算法期望性能一樣。——脫離具體問題,空泛地談論‘什麼學習算法更好’毫無意義。
1.5 發展歷程
機器學習是人工智能研究發展的必然產物。
二十世紀五十年代到七十年代初,人工智能研究處於‘推理期’,那時人們以爲只要能賦予及其邏輯推理能力,機器就能具有智能。(e.g A.Newell和H. Simon的‘邏輯理論家’)
二十世紀七十年代中期開始,人工智能研究進入了‘知識期’。大量專家系統問世。(e.g E.A. Feigenbaum)
1950年,圖靈提到了機器學習的可能;
二十世紀五十年代初,已有機器學習的相關研究;(e.g A. Samuel的跳棋程序)
五十年代中後期,基於神經網絡的‘連接主義’學習出現。
在六七十年代,基於邏輯表示的‘符號主義’學習技術蓬勃發展。
二十世紀八十年代是機器學習稱爲一個獨立的學科領域,各種機器學習技術百花初綻的一個時期。‘從樣例中學習’的一大主流是符號主義學習,其代表包括決策樹和基於邏輯的學習。
二十世紀九十年代中期之前,‘從樣例中學習’的另一主流技術是基於神經網絡的連接主義學習。
二十世紀九十年代中期,‘統計學習’閃亮登場並迅速佔據主流五代,代表性技術是支持向量機以及更一般的‘核方法’。
二十一世紀初,連接主義學習捲土重來,掀起了以‘深度學習’爲名的熱潮。在處理語音、圖像等複雜對象的應用中,深度學習技術取得了優越的性能。主要靠調參。
1.6 應用現狀
在計算機科學的諸多分支學科領域中,機器學習已成爲最重要的技術進步源泉之一。機器學習還爲許多交叉學科提供了重要的技術支撐。
機器學習提供數據分析能力,雲計算提供數據處理能力,衆包提供數據標記能力。
數據挖掘&機器學習:數據庫領域的研究爲數據挖掘提供數據管理技術,而機器學習和統計學的研究爲數據挖掘提供數據分析技術。
第 2 章 模型評估與選擇
2.1 經驗誤差與過擬合
錯誤率&精度:在m個樣本中有a個樣本分類錯誤,則錯誤率爲E=a/m,精度爲1-a/m。
誤差:學習器的實際預測輸出與樣本的真是輸出之間的差異。
訓練誤差/經驗誤差:在訓練器上的誤差。
過擬合(過配):
1. 定義:學習器把訓練樣本自身的一些特點當作了所有潛在樣本都會具有的性質,這樣就會導致泛化能力下降。
2. 原因:學習能力過於強大,以至於把訓練樣本所包含的不太一般的特性都學到了。
3. 特點:機器學習面臨的關鍵障礙,難以克服,是無法避免的,只能儘量‘緩解’。
對過擬合無法避免的理解:機器學習面臨的問題通常是NP難甚至更難,而有效的學習算法必然是在多項式時間內運行完成,若可徹底避免過擬合,則通過經驗誤差最小化就能獲得最優解,這就意味着我們構造性地證明了“P=NP”;因此,只要相信
欠擬合(欠配):
1. 定義:指對訓練樣本的一般性質尚未學好。
2. 原因:學習能力低下。
3. 特點:容易克服,例如在決策樹學習中擴展分之、在神經網格學習中增加訓練輪數。
2.2 評估方法
使用測試集來測試學習期對新樣本的判別能力,然後以‘測試誤差’作爲泛化誤差的近似。注意測試集應該儘可能與訓練集互斥。
2.2.1 留出法
“留出法”(hold-out)直接將數據集D劃分爲兩個互斥的集合,其中一個集合作爲訓練集S,另一個作爲測試集T,即
注意:
1. 訓練/測試集的劃分要儘可能保持數據分佈的一致性,避免因數據劃分過程引入額外的偏差而對最終結果產生影響。
2. 單次使用留出法得到的估計結果往往不夠穩定可靠,一般要採用若干次隨機劃分、重複進行實驗評估後取平均值作爲留出法的評估結果。
3. 將大約2/3~4/5的樣本用於訓練,剩餘樣本用於測試。——爲保證訓練所得模型接近於用D訓練出的模型,且評估結果儘量穩定準確、真實。
2.2.2 交叉驗證法
“交叉驗證法”:先將數據集D劃分爲k個大小相似的互斥子集,即
‘留一法’
1. 交叉驗證法的一個特例,假定數據集D中包含m個樣本,令k=m,即爲留一法。
2. 不受隨機樣本劃分方式的影響,且訓練集只比原始數據集少一個樣本,這就使得在絕大多數情況下,留一法中被實際評估的模型與期望評估的用D訓練出的模型很相似,因此留一法的評估結果被認爲比較準確。
3. 缺陷:1. 數據集較大時,開銷難以忍受。2. 未必永遠比其他評估方法準確,‘沒有免費的午餐’定理對實驗評估方法同樣適用。
2.2.3 自助法
“自助法”(bootstrapping):可以減少訓練樣本規模不同造成的影響,同時還能比較高效地進行實驗估計。
介紹:以自助採樣法爲基礎。給定包含m個樣本的數據集D,我們對它進行採樣產生數據集
操作:取樣後約有1/3的樣本未出現在
適用範圍:數據集較小、難以有效劃分訓練/測試集時很有用;此外,自助法能從初始數據集產生多個不同的訓練集,這對集成學習等方法有很大好處。
缺點:產生的數據改變了初試數據集的分佈,會引入估計偏差。因此初始數據量足夠,留出法和交叉驗證法使用更多。
2.2.4 調參與最終模型
在模型評估與選擇過程中需要流出一部分數據進行評估測試,事實上我們只是用了一部分數據訓練模型。因此模型選擇完成後,學習算法和參數配置已選定,此時應該用數據集D重新訓練模型,使用所有m個樣本,這纔是我們最終提交給用戶的模型。
注意:通常把學的模型在實際使用中遇到的數據成爲測試數據,爲加以區分,模型評估與選擇中用語評估測試的數據集常稱爲“驗證集”。
如:在研究對不不同算法的泛化性能時,我們用測試集上的判別效果來估計模型在實際使用時的泛化能力,而把訓練數據另外劃分爲訓練集和驗證集,基於驗證集上的性能來進行模型選擇和調參。
2.3 性能度量
迴歸任務最常用的性能度量是“均方誤差”。
下面介紹分類任務中常用的性能度量。
2.3.1 錯誤率與精度
錯誤率:
精度:
2.3.2 查準率,查全率與F1
分類結果混淆矩陣
查準率P——真正例中真正例佔所有預測正例的比率:
查全率R——真正例中真正例佔所有正例的比率:
P-R圖:以查準率爲縱軸、查全率爲橫軸作圖,得到查準率-查全率曲線。
關於P-R圖:
1. 若一個學習器的P-R曲線被另一個學習器的曲線完全“包住”,則可斷言後者的性能優於前者。
2. 如果發生了交叉,可以在某一查準率或查全率的條件下進行比較,或者比較面積。
3. 比較平衡點(BEP)——“查準率=查全率”時的取值
4. BEP太過簡單,常用F1
5. F1的一般形式——
6. 若希望在n個二分類混淆矩陣上綜合考察查準率和查全率,有兩種做法:1)、先在各混淆矩陣上分別計算出查準率和查全率,再計算平均值,得到“宏查準率(macro-P)”“宏查全率(macro-R)”並可計算得“宏F1”
2.3.3 ROC與AUC
ROC:受試者工作特徵。
我們根據學習器的預測結果對樣例進行排序,按此順序逐個把樣本作爲正例進行預測。
縱軸是“真正例率”——真正例在所有正例中的比率。
顯示ROC曲線的圖稱爲“ROC圖”,對角線對應於“隨機猜測”模型,而點(0,1)則對應於將所有正例排在所有反例之前的“理想模型”。(着重理解下=-=)
若一個學習器的ROC曲線被另一個學習器的曲線完全“包住”,則可斷言後者的性能優於前者;若兩個學習器的ROC發生交叉,可以比較ROC曲線下的面積,即AUC。AUC可估算爲
給定
2.3.4 代價敏感錯誤率與代價曲線(沒有仔細看)
在非均等代價下,我們所希望的不再是簡單的最小化錯誤次數,而是希望最小化“總體代價”。可以推導出“代價敏感”錯誤率,精度的代價敏感版本等等。
在非均等代價下,ROC曲線不能直接反映出學習器的期望總體代價,而“代價曲線”則可達到該目的。代價曲線圖的橫軸是取值爲[0,1]的正例概率代價
2.4 比較檢驗(這裏不懂!各種檢驗什麼的)
機器學習中性能比較涉及的因素:
1. 希望對比泛化性能,然而得到的是測試集上的性能,兩者未必相同。
2. 測試集上的性能與測試集本身有很大的關係。
3. 機器學習算法本身有一定的隨機性,運行結果可能不同。
本節默認以錯誤率爲性能度量,用
2.4.1 假設檢驗
假設檢驗中的“假設”是對學習器泛化錯誤率的某種判斷或猜想。
泛化錯誤率爲
在包含了m個樣本的測試集上,泛化錯誤率爲
給定測試錯誤率,解
“二項檢驗”可對“
此時若測試錯誤率
t檢驗
常使用多次重複留出法或交叉驗證法進行多次訓練/測試,得到多個測試錯誤率。
平均測試錯誤率
這k個測試錯誤率可看做泛化錯誤率
對於假設“
上述兩種方法都是對關於單個學習器泛化性能的假設進行檢驗。
2.4.2 交叉驗證t檢驗
思想:若兩個學習器的性能想通,則它們使用相同的訓練/測試集得到的測試錯誤率應相同,即
對k折交叉驗證產生的k對測試錯誤率:先對每對結果求差,
2.4.3 McNemar檢驗
對於二分類問題,可獲得列聯表:
若我們做的假設是兩學習器性能相同,則應有
2.4.4 Friedman檢驗與Nemenyi後續檢驗
交叉驗證t檢驗和McNemar檢驗都是在一個數據集上比較兩個算法的性能。
現在在一個數據集上比較多個算法。常用基於算法排序的Friedman檢驗。
首先,使用留出法或交叉驗證法得到每個算法在每個數據集上的測試結果,然後得到每個算法在各個數據集上性能的平均序值。然後,使用Friedman檢驗來判斷這些算法是否性能都相同——平均序值是否相同。若不相同,則需進行“後續檢驗”來進一步區分各算法。常用Nemenyi後續檢驗。(關於Friedman和Nemenyi的具體公式在此略去~)
2.5 偏差和方差
對學習算法除了通過實驗估計其泛化性能,人們往往還希望瞭解它“爲什麼”具有這樣的性能。“偏差-方差分解”是解釋學習算法泛化性能的重要工具。
偏差度量了學習算法的期望預測與真是結果的偏離程度,即刻畫了學習算法本身的你和能力。
方差度量了同樣大小的訓練集的變動所導致的學習性能的變化,即刻畫了數據擾動所造成的影響。
噪聲則表達了在當前任務上任何學習算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度。
偏差-方差分解說明,泛化性能是由學習算法的能力、數據的充分性以及學習任務本身的難度所共同決定的。給定學習任務,爲了取得好的泛化性能,則需使偏差較小,即能夠充分擬合數據,並且使方差較小,即是的數據擾動產生的影響小。
偏差與方差有衝突——“偏差-方差窘境”