《統計學習方法》學習筆記

上學期花了一個多月讀完了李航老師的《統計學習方法》,如今帶着新入團隊的新同窗以讀書會的形式讀這本書,書裏邊全是乾貨,對於我理解基本的機器學習算法頗有幫助,也筆頭作了一些總結(不徹底基於此書),現將其摘錄於此做爲在博客園的第一篇博客。由於並非爲了掃盲,因此僅僅是抓出脈絡以及關鍵點,方便之後快速溫習,而不是預習。算法

概論

機器學習不少時候也被稱做統計機器學習,這是由於大部分機器學習方法或多或少基於統計的方法,或者有基於統計方法的版本,即使是早期不涉及統計方法的算法在後來也都有了統計學的解釋。
統計學習的三要素:模型策略算法,決定了一個統計學習的方法。整本書的算法都可從這三個思路去思考,而且從這三個思路思考能夠培養必定的統計建模的意識。機器學習

  • 模型是一個能夠根據合法輸入產生輸出的「黑盒子」,也即一個從輸入空間(或特徵空間)到輸出空間的映射。
  • 策略是衡量模型好壞的一個判斷標準,以此能夠肯定向什麼方向修改/優化模型。
  • 算法是肯定了模型和策略,爲了儘可能知足策略所採用的優化模型的作法。

簡單的說,整個學習就是要學習出一個模型,而策略決定了咱們所想要的模型,而算法是用來獲得模型參數所採用的方法而已。
這本書討論的是有監督學習,而對於有監督學習來講,共有的一個問題就是過擬合問題(overfitting),簡單地來說,這是模型過度「迎合」訓練數據而致使模型在訓練數據上表現良好,而對未知輸入的泛化能力不好的現象。
首先,過擬合是沒法避免的。畢竟統計學習在訓練時避免不了要擬合訓練數據,這是由於咱們的模型參數就是由訓練數據訓練而來的。這裏的「過」指的是模型過於複雜(迎合數據),致使泛化能力急劇降低。這裏舉個例子:
how many boxes are there behind the tree?
這裏有多少盒子在樹後?按照咱們的直覺應該是隻有一個盒子,然而事實上多是:
possible cases
顯然,根據咱們的直觀認識,對於一個未知的參數(即這裏的盒子數),越簡單可能越符合咱們的先驗知識。也即簡單的模型對未知的狀況泛化能力更高(更加多是對的)。因此「從貝葉斯估計的角度來看,正則化項對應於模型的先驗機率」,模型越複雜,先驗越小(經驗告訴咱們如此複雜的狀況不太可能)。
所以,一個天然的想法即是要在策略中限制這種複雜的模型,雖然其在訓練數據上比簡單模型的表現更好。最多見的思路的就是添加正則化項,此項表示了模型的複雜度。在策略中和原始目標求和,便可獲得既能獲得較大的目標函數值,又不使模型較爲複雜的模型參數。一個最簡單的例子就是線性迴歸。
另外一個經常使用的方法即交叉驗證,意思是將訓練數據分塊,一部分做爲訓練數據,一部分做爲測試數據,屢次不一樣地分塊之後取在測試數據上表現最優的模型參數。這種方法的缺點是計算開銷太大,畢竟要多訓練不少次模型。函數

感知機

這是一個線性的模型,意在用一條線(超平面)對訓練數據進行二分。學習

  • 輸入:訓練數據的特徵向量
  • 輸出:二值類標

前提是數據嚴格線性可分,即存在一條線(超平面)能將正負例完美分開。而學習的目的即爲學出這個分離線(超平面)。
學習的策略爲經驗風險最小化,即誤分類點數最少,而假設是線性可分,所以誤分類點數必定能夠降爲0。可是,誤分類點數並不能指導咱們如何修改模型(不能導出有效的算法),所以咱們修改了一下策略的表示,改成誤分類點到分離平面的距離之和。所以損失函數爲:
\begin{equation}
L(w, b) = -\sum\limits_{x_i\in M} y_i(w_i+b)
\end{equation}
其中,(M)爲誤分類點集,(w)和(b)爲參數,(y_i)是標準類標,乘上(y_i)乘積保證爲正。爲求其極小,分別對參數求導並令其導數爲0便可:
測試


\begin{align}\notag
&\nabla_w L(w, b) = -\sum\limits_{x_i\in M}y_ix_i \\
&\nabla_b L(w, b) = -\sum\limits_{x_i\in M}y_i
\end{align}
優化


學習算法爲梯度降低法,有原始形式和對偶形式之分。
原始形式核心遞歸式:


\begin{align}\notag
&w_{new} = w_{old}+\eta y_{i}x_{i} \\
&b_{new} = b_{old}+\eta y_{i}
\end{align}
blog


其中(\eta)爲梯度降低的步長。初始值(w)和(b)隨機初始化。
若是將(w)和(b)初始化爲0,那麼根據原始形式的遞歸式,(w)和(b)分別能夠寫做(y_{i}x_{i})和(y_{i})的線性組合形式,即:


\begin{align}\notag
&w = -\sum\limits_{i=1}^{N}\alpha_{i}y_{i}x_{i} \\
&b = -\sum\limits_{i=1}^{N}\alpha_{i}y{i}
\end{align}
遞歸


係數相同的緣由是由於每次更新w和b走過了相同個數的步長。這樣就能將對(w)和(b)的更新改成對(\alpha)和(b)的更新,節約了乘法的計算開銷。
對偶形式的核心遞歸式:


\begin{align}\notag
&\alpha_{i} = \alpha_{i}+\eta \\
&b = b+\eta y_{i}
\end{align}
博客


注意到感知機算法的梯度降低法是用的隨機梯度降低,即每次隨機選擇一個誤分點進行更新,而沒有使用批量梯度降低,這是由於感知機是必然線性可分的,也即最後超平面必然存在,即算法必然收斂,所以能夠選擇計算開銷更小的隨機梯度降低法。

KNN算法

根據近鄰來估計實例點的屬性。有兩種方式,一種是Top-K最近鄰,一種是根據距離肯定近鄰。前者算最近的k個鄰居,然後者計算離實例的距離在必定範圍之內的全部鄰居。分別適用於分佈密集和分佈稀疏的狀況。
KNN算法最大的問題在於計算pair之間的距離,這是(O(n^2))的問題,而每次增長點,都須要進行N次計算,這是不可接受的,因而對實例存在的特徵空間進行切分,具體算法即kd樹算法。按維度進行切分,思想相似於二分查找。it

樸素貝葉斯

模型爲條件機率模型,即目的爲學習一個條件機率分佈(和一個先驗分佈)。

  • 輸入:實例的特徵向量
  • 輸出:多值類標

模型假設:對於任一實例,在已知類標時,各特徵相互獨立。這實際上是將指數級參數個數((2^n))的聯合分佈降爲了線性參數個數((2n+1))的條件機率與先驗之積。
\begin{equation}
P(c_k|x_1, x_2, \dots, x_n) = \frac{P(x_1, \dots, x_n|c_k)\cdot P(c_k)}{P(x_1,x_2, \dots, x_n)}
\end{equation}
因爲分母是平凡的,對於相同實例不一樣類標都是相同的。所以能夠略去。分母中的條件機率由於模型假設,能夠寫爲:
\begin{equation}
P(x_1, \dots, x_n | c_k) = \prod\limits_{i=1}^{n}P(x_i|c_k)
\end{equation}
策略是指望風險最小化,即分類正誤的指望,可等價於後驗機率最小化(證實略)。也即只用找到後驗機率最大的類標賦給實例便可。這裏模型未知參數爲(P(x_i|c_k))和(P(c_k)),爲了估計其值,使用的是極大似然估計,通俗的說就是用訓練樣本中對應項出現的頻率來做爲估計的機率(由於極大似然估計和強假設,所以被叫作樸素貝葉斯,或者傻瓜貝葉斯)。
全部涉及到共現矩陣,也即觀測的頻率,以及機率的算法,都須要考慮機率值爲0的狀況,或者分母爲0的狀況。樸素貝葉斯加入拉普拉斯平滑使避免出現0。

決策樹

if-then結構的樹,目的即爲學習出這樣一棵樹,非葉子節點是特徵,葉子節點是類標。

  • 輸入:特徵向量
  • 輸出:多值類標

策略是特徵選擇,越靠近根的特徵應該有更好的區分能力,然而這一條件沒法直接指導算法優化,所以引入信息增益定義。
幾個定義:

  • 熵:表示隨機變量X的不肯定程度:
    \begin{equation}
    H(X) = -\sum\limits_{i=1}^{n}P_i\log P_{i}
    \end{equation}
    這裏遍歷了X可能的i個取值,限制條件爲全部取值機率之和爲1
  • 經驗熵:將數據集D作分類的不肯定程度:
    \begin{equation}
    H(D) = -\sum\limits_{k=1}^{K}\frac{\vert C_k\vert}{\vert D\vert}\log\frac{\vert C_k\vert}{\vert D\vert}
    \end{equation}
    其中D可被分紅K個類,而且第k個類的實例個數爲(\vert C_k\vert),D中實例個數爲(\vert D\vert)
  • 經驗條件熵:給定特徵下,將數據集作分類的不肯定性(用分紅某子類的機率對子類的經驗熵進行加權)。
    \begin{equation}
    \begin{aligned}
    H(D|A)&=\sum\limits_{i=1}^n\frac{|D_i|}{D}H(D_i) \\
    &=-\sum\limits_{i=1}^n\frac{|D_i|}{|D|}\sum\limits_{k=1}^K\frac{|D_{ik}|}{|D_i|}\log\frac{|D_{ik}|}{|D_i|}
    \end{aligned}
    \end{equation}

而後信息增益能夠定義爲:給定特徵A時D上的經驗熵與經驗條件熵之差。
\begin{equation}
g(D, A) = H(D)-H(D|A)
\end{equation}
定義信息增益比信息增益與數據集關於特徵A的值的熵之比。
\begin{equation}
g_{R}(D, A) = \frac{g(D, A)}{H_A(D)},
\end{equation}
其中(H_{A}(D) = -\sum\limits_{i=1}^n\frac{|D_i|}{|D|}\log\frac{|D_i|}{|D|}),n是A可取的值的個數,(D_i)是根據特徵A進行分類之後獲得的子類,能夠被看做是經驗熵。
算法中,ID3算法遞歸建樹,對每一個節點,選擇當前使信息增益最大的特徵。C4.5算法,用信息增益比來替代ID3中的信息增益。這是由於消息增益越大,代表該特徵對全局熵減小得也就最大,也即能使全局不肯定性下降最大,若一個特徵能夠取的值越多,每一個分支下的實例數就越少,相應的不肯定程度就越低,換句話說,信息增益會偏向取值更多的特徵,所以ID3算法偏向生成那種寬而淺的樹,這實際上是不合理的。而信息增益比用經驗熵作約束,懲罰了取值數多的特徵,所以能夠獲得更好的樹。
決策樹模型爲了防止過擬合,須要必定的剪枝,其作法是用節點個數做爲正則化項。
CART算法(建樹、剪枝),用即你最小化建二叉樹,即對於全部可能的特徵的全部可能取值,取基尼最大的做爲當前節點特徵。
基尼指數: \begin{equation} \text{Gini}(p) = \sum\limits_{k=1}^K p_{k}(1-p_{k})=1-\sum\limits_{k=1}^Kp_k^2 \end{equation}

相關文章
相關標籤/搜索