第1章 統計學習方法概論
文章目錄
- 第1章 統計學習方法概論
- 前言
- 章節目錄
- 導讀
- 實現統計學習方法的步驟
- 統計學習分類
- 基本分類
- 監督學習
- 無監督學習
- 強化學習
- 按模型分類
- 概率模型與非概率模型
- 按算法分類
- 按技巧分類
- 貝葉斯學習
- 核方法
- 統計學習方法三要素
- 模型
- 模型是什么?
- 策略
- 損失函數與風險函數
- 常用損失函數
- ERM與SRM
- 算法
- 模型評估與模型選擇
- 過擬合與模型選擇
- 正則化與交叉驗證
- 正則化
- 交叉驗證
- 泛化能力
- 生成模型與判別模型
- 生成方法
- 判別方法
- 分類問題、標注問題、回歸問題
- 習題解答參考
- 參考學習路徑:
前言
章節目錄
- 統計學習
- 統計學習的分類
- 基本分類
- 按模型分類
- 按算法分類
- 按技巧分類
- 統計學習三要素
- 模型
- 策略
- 算法
- 模型評估與模型選擇
- 訓練誤差與測試誤差
- 過擬合與模型選擇
- 正則化與交叉驗證
- 正則化
- 交叉驗證
- 泛化能力
- 泛化誤差
- 泛化誤差上界
- 生成模型與判別模型
- 監督學習應用
- 分類問題
- 標注問題
- 回歸問題
導讀
-
本章最后的三個部分,即監督學習應用中的這三個問題可以對比著看,如果暫時沒有概念,略過也可以,回頭對各個算法有了感覺回頭再看這里。
這三部分怎么對比,三部分都有個圖來說明,仔細看下差異,本文后面會對此展開。 -
關于損失函數,風險函數與目標函數注意體會差異
-
后面插點從深度學習角度拿到的點
- 關于機器學習三要素, 復旦大學邱錫鵬教授也有解讀: 模型, 學習準則, 優化算法. 這個定義比較接近代碼. 以Tensorflow為例. 通常會定義一個網絡(模型), 定義Loss(學習準則), 定義優化算法(Optimizer), 然后開Session, 不停的把數據帶入用Opitmizer去最小化Loss.
- Losses, Metrics, 在Keras里面劃分了兩個模塊, 解釋是Losses是BP過程用到的, 而Metrics實際和損失函數類似, 用來評價模型的性能, 但是不參與反向傳播. 從源碼也能看到, Metrics里面import了很多Loss算法
-
書中例子1.1可以參考PRML中對應的表述, 更詳細些。
-
在監督學習中輸入和輸出對稱為樣本,在無監督學習中輸入是樣本。
-
注意在介紹輸入空間,輸出空間等概念的時候,以及這一章的很多部分都會有個帽子,
監督學習中
, 書中也明確了本書主要討論監督學習的問題
,最后的概要總結部分對監督學習有這樣的描述:監督學習可以概括如下:從給定有限的訓練數據出發,假設數據是獨立同分布的,而且假設模型屬于某個假設空間,應用某一評價準則,從假設空間中選取一個最優的模型,使它對已給的訓練數據以及未知測試數據在給定評價標準意義下有最準確的預測。
,理解下這里的假設。
幾個假設,即數據獨立同分布、模型屬于假設空間等
-
在貝葉斯學習部分,提到
將模型、為觀測要素及其參數用變量表示,使用模型的先驗分布是貝葉斯學習的特點。
注意這里面先驗是模型的先驗分布。 -
在泛化誤差部分,用了 f ^ \hat f f^?表示最優估計,這個有時候也會用 f ? f^* f?表示意思差不多。有時候表示向量又要表示估計值,用 ? * ?可能好看一點,比如 x ? ? \vec x^* x?,但是通常每本書都有自己的符號體系,向量可以通過字體表示,具體可以從書中的符號表部分了解。關于這一點,在第二版第一章就有所體現,監督和無監督學習中,模型用hat表示,在強化學習中,最優解用*表示。
實現統計學習方法的步驟
統計學習方法三要素:模型,策略,算法
- 得到一個有限的訓練數據集合
- 確定包含所有可能的模型的假設空間,即學習模型的集合
- 確定模型選擇的準則,即學習的策略
- 實現求解最優模型的算法,即學習的算法
- 通過學習方法選擇最優的模型
- 利用學習的最優模型對新數據進行預測或分析
統計學習分類
基本分類
這部分內容新增了無監督學習和強化學習。值得注意的一個點,之前因為只寫了監督學習,樣本表示(x, y)對,在無監督學習里面,樣本就是x。
監督學習
無監督學習
強化學習
按模型分類
概率模型與非概率模型
在監督學習中,概率模型是生成模型,非概率模型是判別模型。
按算法分類
在線學習和批量學習,在線學習通常比批量學習更難。
按技巧分類
貝葉斯學習
核方法
統計學習方法三要素
模型
模型是什么?
在監督學習過程中,模型就是所要學習的條件概率分布或者決策函數。
注意書中的這部分描述,整理了一下到表格里:
假設空間 F \cal F F | 輸入空間 X \cal X X | 輸出空間 Y \cal Y Y | 參數空間 | |
---|---|---|---|---|
決策函數 | F = { f θ ∣ Y = f θ ( x ) , θ ∈ R n } \cal F\it =\{f_{\theta} |Y=f_{\theta}(x), \theta \in \bf R \it ^n\} F={fθ?∣Y=fθ?(x),θ∈Rn} | 變量 | 變量 | R n \bf R\it ^n Rn |
條件概率分布 | F = { P ∣ P θ ( Y ∣ X ) , θ ∈ R n } \cal F\it =\{P|P_{\theta}(Y|X),\theta\in \bf R \it ^n\} F={P∣Pθ?(Y∣X),θ∈Rn} | 隨機變量 | 隨機變量 | R n \bf R\it ^n Rn |
書中描述的時候,有提到條件概率分布族,這個留一下,后面chap6有提到確認邏輯斯諦分布屬于指數分布族。
策略
損失函數與風險函數
損失函數度量模型一次預測的好壞,風險函數度量平均意義下模型預測的好壞。
-
損失函數(loss function)或代價函數(cost function)
損失函數定義為給定輸入 X X X的預測值 f ( X ) f(X) f(X)和真實值 Y Y Y之間的非負實值函數,記作 L ( Y , f ( X ) ) L(Y,f(X)) L(Y,f(X)) -
風險函數(risk function)或期望損失(expected loss)
這個和模型的泛化誤差的形式是一樣的
R e x p ( f ) = E p [ L ( Y , f ( X ) ) ] = ∫ X × Y L ( y , f ( x ) ) P ( x , y ) d x d y R_{exp}(f)=E_p[L(Y, f(X))]=\int_{\mathcal X\times\mathcal Y}L(y,f(x))P(x,y)\, {\rm d}x{\rm d}y Rexp?(f)=Ep?[L(Y,f(X))]=∫X×Y?L(y,f(x))P(x,y)dxdy
模型 f ( X ) f(X) f(X)關于聯合分布 P ( X , Y ) P(X,Y) P(X,Y)的平均意義下的損失(期望損失),但是因為 P ( X , Y ) P(X,Y) P(X,Y)是未知的,所以前面的用詞是期望,以及平均意義下的。這個表示其實就是損失的均值,反映了對整個數據的預測效果的好壞,P(x,y)轉換成 ν ( X = x , Y = y ) N \frac {\nu(X=x, Y=y)}{N} Nν(X=x,Y=y)?更容易直觀理解, 可以參考chap9,6.2.2節的部分描述來理解,但是真實的數據N是無窮的。
-
經驗風險(empirical risk)或經驗損失(empirical loss)
R e m p ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) R_{emp}(f)=\frac{1}{N}\sum^{N}_{i=1}L(y_i,f(x_i)) Remp?(f)=N1?∑i=1N?L(yi?,f(xi?))
模型 f f f關于訓練樣本集的平均損失
根據大數定律,當樣本容量N趨于無窮大時,經驗風險趨于期望風險 -
結構風險(structural risk)
R s r m ( f ) = 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) R_{srm}(f)=\frac{1}{N}\sum_{i=1}^{N}L(y_i,f(x_i))+\lambda J(f) Rsrm?(f)=N1?∑i=1N?L(yi?,f(xi?))+λJ(f)
J ( f ) J(f) J(f)為模型復雜度, λ ? 0 \lambda \geqslant 0 λ?0是系數,用以權衡經驗風險和模型復雜度。
常用損失函數
損失函數數值越小,模型就越好
-
0-1損失
L ( Y , f ( X ) ) = { 1 , Y ≠ f ( X ) 0 , Y = f ( X ) L(Y,f(X))=\begin{cases}1, Y \neq f(X) \\0, Y=f(X) \end{cases} L(Y,f(X))={1,Y=f(X)0,Y=f(X)? -
平方損失
L ( Y , f ( X ) ) = ( Y ? f ( X ) ) 2 L(Y,f(X))=(Y-f(X))^2 L(Y,f(X))=(Y?f(X))2 -
絕對損失
L ( Y , f ( X ) ) = ∣ Y ? f ( X ) ∣ L(Y,f(X))=|Y-f(X)| L(Y,f(X))=∣Y?f(X)∣ -
對數損失
這里 P ( Y ∣ X ) ? 1 P(Y|X)\leqslant 1 P(Y∣X)?1,對應的對數是負值,所以對數損失中包含一個負號,為什么不是絕對值?因為肯定是負的。
L ( Y , P ( Y ∣ X ) ) = ? log ? P ( Y ∣ X ) L(Y,P(Y|X))=-\log P(Y|X) L(Y,P(Y∣X))=?logP(Y∣X)
ERM與SRM
經驗風險最小化(ERM)與結構風險最小化(SRM)
- 極大似然估計是經驗風險最小化的一個例子
當模型是條件概率分布,損失函數是對數損失函數時,經驗風險最小化等價于極大似然估計 - 貝葉斯估計中的最大后驗概率估計是結構風險最小化的一個例子
當模型是條件概率分布,損失函數是對數損失函數,模型復雜度由模型的先驗概率表示時,結構風險最小化等價于最大后驗概率估計
算法
這章里面簡單提了一下,具體可以參考chap12表格中關于學習算法的描述。
模型評估與模型選擇
訓練誤差和測試誤差是模型關于數據集的平均損失。
提到一句, 統計學習方法具體采用的損失函數未必是評估時使用的損失函數
,這句理解下。參考下在數據科學比賽中給出的評分標準,與實際學習采用的損失函數之間的關系。
過擬合與模型選擇
這部分講到了最小二乘法,給了PRML中的一個例子。
這個問題中訓練數據為 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ? , ( x N , y N ) } T=\{(x_1, y_1),(x_2,y_2),\cdots,(x_N,y_N)\} T={(x1?,y1?),(x2?,y2?),?,(xN?,yN?)}
模型為
f M ( x , w ) = w 0 + w 1 x + w 2 x 2 + ? + w M x M = ∑ j = 0 M w j x j f_M(x,w)=w_0+w_1x+w_2x^2+\cdots+w_Mx^M=\sum\limits_{j=0}^Mw_jx^j fM?(x,w)=w0?+w1?x+w2?x2+?+wM?xM=j=0∑M?wj?xj
經驗風險最小化策略下
L ( w ) = 1 N ∑ i = 1 N ( f ( x i , w ) ? y i ) 2 L(w)=\frac{1}{N}\sum\limits_{i=1}^N(f(x_i,w)-y_i)^2 L(w)=N1?i=1∑N?(f(xi?,w)?yi?)2
將模型和訓練數據帶入到上式得到
L ( w ) = 1 N ∑ i = 1 N ( ∑ j = 0 M w j x i j ? y i ) 2 = 1 N ∑ i = 1 N ( w ? x i ? y i ) 2 L(w)=\frac{1}{N}\sum\limits_{i=1}^N\left(\sum\limits_{j=0}^Mw_jx_i^j-y_i\right)^2=\frac{1}{N}\sum\limits_{i=1}^N(w\cdot x_i-y_i)^2 L(w)=N1?i=1∑N?(j=0∑M?wj?xij??yi?)2=N1?i=1∑N?(w?xi??yi?)2
這個問題要求 w = ( w 0 ? , w 1 ? , ? , w M ? ) w=(w_0^*,w_1^*,\cdots,w_M^*) w=(w0??,w1??,?,wM??)
對 w w w求偏導令其為零,得到一系列方程,求解可以用梯度下降或者矩陣分解。
求解線性方程組 A x = b Ax=b Ax=b,可以表示為 x = A / b x=A/b x=A/b,問題展開之后可以涉及到矩陣分解。
正則化與交叉驗證
正則化
模型選擇的典型方法是正則化
交叉驗證
另一種常用的模型選擇方法是交叉驗證
- 簡單:例如7+3比例劃分
- S折(K折, K-Fold)
- 留一法
關于交叉驗證,這里補充一點。
數據集的劃分這個問題,書中有提到數據充足的情況下,將數據劃分為三個部分,訓練集,驗證集和測試集。看到這里,不知道大家會不會有一樣的問題:驗證集和測試集有什么區別?
注意這里,在算法學習的過程中,測試集可能是固定的,但是驗證集和訓練集可能是變化的。比如K折交叉驗證的情況下,分成K折之后,其中的K-1折作為訓練集,1折作為驗證集,這樣針對每一個模型操作K次,計算平均測試誤差,最后選擇平均測試誤差最小的模型。這個過程中用來驗證模型效果的那一折數據就是驗證集。交叉驗證,就是這樣一個使用驗證集測試模型好壞的過程。他允許我們在模型選擇的過程中,使用一部分數據(驗證集)“偷窺”一下模型的效果。
泛化能力
-
現實中采用最多的方法是通過測試誤差來評價學習方法的泛化能力
-
統計學習理論試圖從理論上對學習方法的泛化能力進行分析
-
學習方法的泛化能力往往是通過研究泛化誤差的概率上界進行的, 簡稱為泛化誤差上界(generalization error bound)
這本書里面討論的不多,在chap8里面有討論提升方法的誤差分析, 提到 A d a B o o s t AdaBoost AdaBoost不需要知道下界 γ \gamma γ。在chap2中討論算法的收斂性的時候有提到誤分類次數的上界.
注意泛化誤差的定義,書中有說事實上,泛化誤差就是所學習到的模型的期望風險
生成模型與判別模型
監督學習方法可分為生成方法(generative approach)與判別方法(discriminative approach)
生成方法
generative approach
- 可以還原出聯合概率分布 P ( X , Y ) P(X,Y) P(X,Y)
- 收斂速度快, 當樣本容量增加時, 學到的模型可以更快收斂到真實模型
- 當存在隱變量時仍可以用
判別方法
discriminative approach
- 直接學習條件概率 P ( Y ∣ X ) P(Y|X) P(Y∣X)或者決策函數 f ( X ) f(X) f(X)
- 直接面對預測, 往往學習準確率更高
- 可以對數據進行各種程度的抽象, 定義特征并使用特征, 可以簡化學習問題
分類問題、標注問題、回歸問題
Classification, Tagging, Regression
- 圖1.10和圖1.11除了分類系統和標注系統的差異外,沒看到其他差異,但實際上這兩幅圖中對應的輸入數據有差異,序列數據的 x i = ( x i ( 1 ) , x i ( 2 ) , … , x i ( n ) ) T x_i = (x_i^{(1)},x_i^{(2)},\dots,x_i^{(n)})^T xi?=(xi(1)?,xi(2)?,…,xi(n)?)T對應
- 回歸問題的產出為 Y = f ^ ( X ) Y=\hat f(X) Y=f^?(X)
習題解答參考
參考:https://datawhalechina.github.io/statistical-learning-method-solutions-manual/#/chapter01/ch01
1,Python代碼實現:
參考:Statistical-learning-method/tree/main/chap1_統計學習方法概論
2,R代碼實現:
參考:https://github.com/xlite-dev/statistic-learning-R-note?tab=readme-ov-file
參考學習路徑:
1,先自己過一遍書
2,帶著問題+網課整體梳理一遍
https://www.bilibili.com/video/BV1No4y1o7ac
https://www.bilibili.com/video/BV1W7411N7Ag
筆記整理https://github.com/SmirkCao/Lihang
3,刷題/教材code實現:
(1)Python:
https://github.com/fengdu78/lihang-code
手推算法實現:https://github.com/Dod-o/Statistical-Learning-Method_Code?tab=readme-ov-file
(2)R:
https://github.com/xlite-dev/statistic-learning-R-note?tab=readme-ov-file
4,輸出:
刷題html+ipynb在github,推文導出html整理
===>
參考:https://github.com/SmirkCao/Lihang