首先介紹統計學習的定義,研究對象和方法;而後敘述監督學習;接着統計學習方法的三要素:模型,策略和算法;介紹模型選擇,包括正則化,交叉驗證和學習的泛化能力;介紹生成模型與判別模型;最後介紹監督學習方法的應用:分類,標註和迴歸html
統計學習(statistical learning)是關於計算機基於數據構建機率統計模型並運用模型對數據進行預測與分析的一門學科,統計學習也稱爲統計機器學習(statistical machine learning)python
統計學習的主要特色是:web
統計學習的對象是數據(data),它從數據出發,提取數據的特徵,抽象出數據的模型,發現數據中的知識,又回到對數據的分析與預測中去.數據時多樣的,包括存在於計算機及網絡上的各類數字,文字,圖像,視頻,音頻數據以及它們的組合算法
統計學習用於對數據進行預測與分析,特別是對未知新數據進行預測與分析,對數據的預測可使計算機更加智能化網絡
統計學習的方法是基於數據構建統計模型從而對數據進行預測與分析.統計學習方法包括模型的假設空間,模型選擇的準則以及模型學習的算法,稱其爲統計學習方法的三要素,簡稱:模型(model),策略(strategy)和算法(algorithm)app
實現統計學習方法的步驟以下:dom
監督學習(supervised learning)的任務是學習一個模型,使模型可以對任意給定的輸入,對其相應的輸出作出一個好的預測機器學習
輸入空間,特徵空間與輸出空間svg
在監督學習中,將輸入與輸出全部可能取值的集合分別稱爲輸入空間(input space)與輸出空間(output space),輸入與輸出空間能夠是有限元素的集合,也能夠是整個歐式距離函數
每一個具體的輸入是一個實例(instance),一般由特徵向量(feature vector)表示,這時,全部特徵向量存在的空間稱爲特徵空間(feature space)
向量均爲列向量,輸入實例x的特徵向量記做:
表示x的第i個特徵,請注意,與不一樣,用表示多個輸入變量中的第i個,即:
監督學習從訓練數據(training data)集合中學習模型,對測試數據(test data)進行預測,訓練數據的輸入(或特徵向量)與輸出對組成,訓練集一般表示爲:
監督學習利用訓練數據集學習一個模型,再用模型對測試樣本集進行預測(prediction)
from IPython.display import Image Image(filename="./data/1_1.png",width=500)
統計學習方法都是由模型,策略和算法構成的,即統計學習方法由三要素構成,能夠簡單地表示爲:
方法=模型+策略+算法
在監督學習過程當中,模型就是所要學習的條件機率分佈或決策機率
實現引入損失函數與風險函數的概念,損失函數度量模型一次預測的好壞,風險函數度量平均意義下模型預測的好壞
損失函數和風險函數
監督學習問題是在假設空間 中選取模型f做爲決策函數,對於給定的輸入X,由f(X)給出相應的輸出Y,這個輸出的預測值f(X)與真實值Y可能一致也可能不一致,用一個損失函數(loss function)或代價函數(cost function)來度量預測錯誤的程度,損失函數是f(X)和Y的非負實值函數,記做:
統計學習經常使用的損失函數有如下幾種:
損失函數越小,模型就越好.因爲模型的輸入,輸出(X,Y)是隨機變量,遵循聯合分佈P(X,Y),因此損失函數的指望是:
這是理論上模型f(X)關於聯合分佈P(X,Y)的平均意義下的損失,稱爲風險函數(risk function)或指望損失(expected loss)
算法是指學習模型的具體計算方法,統計學習基於訓練數據集,根據學習策略,從假設空間中選擇最優模型,最後須要考慮用什麼樣的計算方法求解最優模型
統計學習的目的是使學到的模型不只對已知數據並且未知數據都能有很好的預測能力,不一樣的學習方法會給出不一樣的模型.當損失函數給定時,基於損失函數的模型的訓練偏差(training error)和模型的測試偏差(test error)就天然成爲學習方法評估的標準
假設學習到的模型是,訓練偏差是模型關於訓練數據集的平均損失:
其中N是訓練樣本容量
測試偏差是模型關於測試數據集的平均損失:
其中是測試樣本容量
例如,當損失函數是0-1損失時,測試偏差就變成了常見的測試數據集上的偏差率(error rate):
這裏I是指示函數(indicator function),即時爲1,不然爲0
相應地,常見的測試數據集上的準確率(accuracy)爲:
顯然:
測試偏差反映了學習方法對未知的測試數據集的預測能力.顯然測試偏差小的方法具備更好的預測能力,一般將學習方法對未知數據的預測能力稱爲泛化能力(generalization ability)
當假設空間含有不一樣複雜度的模型時,就要面臨模型選擇(model selection)的問題.具體來說,所選擇的模型要與真模型的參數個數相同,所選擇的模型的參數向量與模型的參數向量相近
若是一味追求提升對訓練數據的預測能力,所選模型的複雜度則每每會比真模型更高,這種現象稱爲過擬合(over-fitting).過擬合是指學習是選擇的模型所包含的參數過多,以致於出現這一模型對已知數據預測得很好,但對未知數據預測不好的現象,能夠說模型選擇旨在避免過擬合併提升模型的預測能力
下面,以多項式函數擬合問題爲例,說明過擬合與模型選擇,這是一個迴歸問題:
假設給定一個訓練數據集:
式中x是單變量輸入,是M+1個參數
解決這個問題的方法能夠是:首先肯定模型的複雜度,即肯定多項式的次數;而後在給定的模型複雜度下按照經驗風險最小化的策略求解參數,即多項式的參數.具體地,求如下經驗風險最下化:
這是一個簡單的最優化問題,將模型與訓練數據代入上式:
對
求偏導數並令其爲0,可得:
因而求得擬合多項式係數:
%matplotlib inline import numpy as np import matplotlib.pyplot as plt import scipy as sp from scipy.optimize import leastsq
def real_func(x): return np.sin(2*np.pi*x) def fit_func(p,x): f=np.poly1d(p) return f(x) def residuals_func(p,x,y): ret=fit_func(p,x)-y return ret
x=np.linspace(0,1,10) x_points=np.linspace(0,1,1000) y_=real_func(x) y=[np.random.normal(0,0.1)+y1 for y1 in y_]
def fitting(M=0): p_init=np.random.rand(M+1) p_lsq=leastsq(residuals_func,p_init,args=(x,y)) print("Fitting Parameters:",p_lsq[0]) plt.plot(x_points,real_func(x_points),label="real") plt.plot(x_points,fit_func(p_lsq[0],x_points),label="fitted curve") plt.plot(x,y,"bo",label="noise") plt.legend() return p_lsq
p_lsq_0=fitting(M=0)
Fitting Parameters: [0.00045968]
p_lsq_1=fitting(M=1)
Fitting Parameters: [-1.31770047 0.65930992]
p_lsq_1=fitting(M=3)
Fitting Parameters: [ 22.1088372 -32.88036488 10.98233944 -0.06303643]
p_lsq_1=fitting(M=9)
Fitting Parameters: [-1.44212173e+04 6.23491084e+04 -1.12265979e+05 1.08933199e+05 -6.15084724e+04 2.03467575e+04 -3.75406545e+03 3.24046465e+02 -3.23017791e+00 -4.08582404e-04]
若是M=0,多項式曲線是一個常數,數據擬合效果不好;若是M=1,多項式曲線是一條直線,數據擬合效果也不好;相反若是M=9,多項式曲線經過每一個數據點,訓練偏差爲0,效果最好.可是由於訓練數據自己存在噪聲,這種擬合曲線對未知數據的預測能力每每並非最好的,在實際學習中並不可取,這時過擬合現象就會發生
from IPython.display import Image Image(filename="./data/1_2.png",width=500)
模型選擇的典型方法是正則化(regulartion).正則化的結構風險最小化策略的實現.是在檢驗風險上加一個正則化項(regularizer)或罰項(penalty term).正則化項通常是模型複雜度的單調遞增函數,模型越複雜,正則化值就越大.好比正則化項能夠是模型參數向量的範數
正則化通常具備以下形式:
其中:第1項是經驗風險,第2項是正則化項,≥0爲調整二者之間關係的係數
正則化項能夠取不一樣的形式.例如迴歸問題中,損失函數是平方損失,正則化項能夠是參數向量的L範數:
這裏,||w||表示參數向量w的L範數
正則化項也能夠是參數向量的
範數:
這裏,||w||_表示參數向量w的L_範數
正則化的做用是選擇經驗風險與模型複雜度同時較小的模型
若是給定的樣本數據充足,進行模型選擇的一種簡單方法是隨機地將數據集切分紅三部分,分別是訓練集(train set),驗證集(validation set)和測試集(test set).訓練集用來訓練模型,驗證集用於模型的選擇,而測試集用於最終對學習方法的評估,在學習到的不一樣複雜度的模型中,選擇對驗證集有最小預測偏差的模型.因爲驗證集有足夠的數據,用它對模型進行選擇也是有效的
簡單交叉驗證方法是:首先隨機地將已給數據分爲兩部分,一部分做爲訓練集,另外一部分做爲測試集;而後在測試集上評價各個模型的測試偏差,選出測試吾儕最小的模型
應用最多的是S折交叉驗證(S-fold cross validation),方法以下:首先隨機地將已給數據切分爲S個互不相交的大小相同的子集;而後利用S-1個子集的數據訓練模型,利用餘下的子集測試模型;將這一過程可能的S種選擇重複進行;最後選出S次評測中平均測試偏差最小的模型
學習方法的泛化能力(generalization ability)是指由該方法學習到的模型對未知數據的預測能力,是學習方法本質上重要的性質
首先給出泛化偏差的定義,若是學到的模型是
,那麼用這個模型對未知數據預測的偏差即爲泛化偏差(generalization error)
泛化偏差反映了學習方法的泛化能力,若是一種方法學習的模型比另外一種方法學習的模型具備更小的泛化偏差,那麼這種方法就更有效
對於二分類問題經常使用的評價指標是精確率(precision)與召回率(recall):
精確率定義爲:
召回率定義爲: