Coursera-ML學(xué)習(xí)

1
1

一、課程大綱
1.1課程內(nèi)容介紹
1.1.1 Supervised Learning
關(guān)于監(jiān)督型學(xué)習(xí)方法,本課程涉及到的有Linear Regression,Logistic Regression,Neural Network,SVMs。
1.1.2 UnSupervised Learning
非監(jiān)督型方法中,本課程教授了K-means Clustering ,Principal Component Analysis和Anomaly Detection。
1.1.3 Special Application /Topic
在本課程中,除基本課程中的應(yīng)用外,還提及了幾種應(yīng)用:

  1. Recommender System(推薦系統(tǒng))
  2. Photo OCR(圖片中的文字識(shí)別)
    另外提到的主題有:
  3. Large Scale Machine Learning(在大數(shù)據(jù)量下的機(jī)器學(xué)習(xí))
  4. Advice on building a machine learning system(一些機(jī)器學(xué)習(xí)系統(tǒng)設(shè)計(jì)的建議)
  5. Bias/Variance(應(yīng)對(duì)overfit與underfit的方法,Learning Curves學(xué)習(xí)曲線等)
  6. Regularization(一種處理overfit和underfit的具體辦法)
  7. Evalution of Learning Algorithm(如何評(píng)判算法效率:F1 Score與Cross Validation)
  8. Ceiling analysis(找到機(jī)器學(xué)習(xí)系統(tǒng)的瓶頸的方法)
    1.2 課程脈絡(luò)描述
    縱觀整個(gè)課程,Andrew Ng教授對(duì)機(jī)器學(xué)習(xí)的表述是非常統(tǒng)一的,所以在課程的學(xué)習(xí)上,雖然是不同的方法,卻有很多類似的地方。下面大致描述一下課程對(duì)機(jī)器學(xué)習(xí)算法的描述方法:
  1. 所有的課程中提到的機(jī)器學(xué)習(xí)算法或工具,無(wú)論監(jiān)督方法和非監(jiān)督方法,都可以表述為一種對(duì)于模型參數(shù)進(jìn)行優(yōu)化求解的過程(Optimization),也就是說,把所有的方法過程都看成是優(yōu)化問題。(無(wú)論是SVM,Neural Network,Linear Regression, K-mean Clustering等等。)
  2. 這種表示方法有三個(gè)要素(也是Optimization的要素),分別是:
    a) h(params,x)函數(shù):hypothesis,對(duì)于所有的監(jiān)督方法,對(duì)于給定輸入樣本x,計(jì)算出輸出y的方法。
    b) J(params,x,y)函數(shù):cost function,由優(yōu)化算法所使用,給出對(duì)于樣本x,計(jì)算cost值的方法。
    c) grad(params,x,y)函數(shù):由優(yōu)化算法所使用,給出參數(shù)修正值的計(jì)算方法,為了簡(jiǎn)便起見,在本課程中,一直使用Gradient Descent(也就是對(duì)每個(gè)參數(shù)進(jìn)行求偏導(dǎo),然后使用偏導(dǎo)值進(jìn)行參數(shù)修改的方法)。
    其中上述表示方式中的參數(shù)params即是我們的模型所需要的參數(shù),也就是我們所要優(yōu)化求解的對(duì)象。(模型參數(shù)params像是Linear Regression的Theta, Neural Network的Weighted Matrix)
  3. 課程對(duì)提到的所有算法進(jìn)行闡述的時(shí)候,都采用上述的三要素進(jìn)行表示,但是雖然這些模型都有這些要素,每個(gè)模型的三要素與其他模型的差別還是非常大的。
    另外,為了描述計(jì)算方便,本課程的所有代碼均為Matlab或Octave,所有的練習(xí)也都由Matlab或Octave完成。
    下面開始對(duì)課程進(jìn)行總結(jié)。
    二、課程內(nèi)容總結(jié)
    2.1 線性回歸:Linear Regression
    線性回歸Linear Regression是Regression最簡(jiǎn)單的一種,為什么叫線性呢,因?yàn)樵谏厦嫣岬降娜刂校膆(x)函數(shù)是線性的(說白了,最簡(jiǎn)單的情況就是在一個(gè)2D的圖上有一些點(diǎn),線性回歸就是找到一條直線可以對(duì)這些點(diǎn)進(jìn)行擬合,使總體的距離誤差最少)。它的典型應(yīng)用是根據(jù)房屋的大小和臥室數(shù)目對(duì)房?jī)r(jià)進(jìn)行預(yù)測(cè)。
    它的輸入為X,y兩個(gè)矩陣,其中
    X是mn的矩陣,為m個(gè)樣本,n個(gè)特征,每行代表一個(gè)樣本房屋的所有特征。
    Y是m
    1的向量,每行代表一個(gè)樣本房屋的實(shí)際售價(jià)。
    2.1.1 Linear Regression的模型要素
    Cost Function J****和Hypothesis H****:
    本例中只有一個(gè)特征x1,所以在計(jì)算H的時(shí)候公式只有兩項(xiàng),當(dāng)特征向量X為n1時(shí),H就有n+1項(xiàng)。(為了加強(qiáng)模型準(zhǔn)確度,需要加入一個(gè)常數(shù)項(xiàng),這樣就需要在在特征X中加入一個(gè)x0=1,并且Theta中加入一個(gè)Theta(0)才能完成,所以在實(shí)際進(jìn)行計(jì)算的時(shí)候X為n+11向量,比特征數(shù)多1,而參數(shù)Theta也比特征數(shù)多1)
    Gradient Descent****:
    上面就是進(jìn)行模型參數(shù)修改的公式,需要注意的是,在一次迭代中,必須在所有的Theta(j)都已經(jīng)完成計(jì)算了之后,在能一次性修改所有的Theta,不可以一個(gè)一個(gè)對(duì)Theta(j)進(jìn)行修改。上面式中:Theta(j)減去的部分就是我們要計(jì)算的Gradient Descent。
    另外我們需要注意的是在計(jì)算Grad的時(shí)候,有一個(gè)參數(shù)alpha,此參數(shù)可以進(jìn)行手動(dòng)設(shè)定如0.01,但實(shí)際使用的時(shí)候我們一般不進(jìn)行手動(dòng)書寫優(yōu)化算法的循環(huán),而是使用Matlab的fminunc函數(shù),此參數(shù)alpha則不用我們進(jìn)行設(shè)置,算法會(huì)自動(dòng)選取。
    2.1.2 Feature Normalization
    由于我們選取的特征的值域很可能是不同的,比如房子的面積可以是100-200平方米,而房子的臥室數(shù)也就在2-5之間,這些值域不同的特征在依據(jù)上面公式計(jì)算Hypothesis的時(shí)候,不同的特征的權(quán)重是不一樣的,房子的面積這個(gè)特征就對(duì)Hypothesis的影響很大,有可能臥室數(shù)的變化根本對(duì)Hypothesis的影響不大,這樣是不對(duì)的,為了防止這種情況的發(fā)生,我們要使用一種叫Feature Normalization的計(jì)算,對(duì)特征值進(jìn)行二次計(jì)算,將其值域調(diào)整為比較小的固定區(qū)間。
    具體的做法為:對(duì)于輸入矩陣X,mn(m個(gè)樣本,n個(gè)特征),計(jì)算每個(gè)Feature(X(:,j)是個(gè)列向量哦)的平均值mean(),然后計(jì)算每個(gè)Feature的標(biāo)準(zhǔn)差std(),最后對(duì)此列特征的所有值執(zhí)行操作:
    X(:,j)=(X(:,j)-mean())/std();
    即得到了新的特征值。得到特征值之后,我們就可以帶入之前的公式計(jì)算J、H和Grad,調(diào)用優(yōu)化算法對(duì)Theta進(jìn)行求解了。不過要注意的是,在進(jìn)行預(yù)測(cè)的時(shí)候,也需要對(duì)輸入數(shù)據(jù)進(jìn)行如上的變換,之后才可以帶入H中進(jìn)行輸出值Hypothesis計(jì)算。
    2.1.3 Normal Equations:正規(guī)方程組
    上面說了那么多,其實(shí)這個(gè)Linear Regression不用優(yōu)化算法也可以直接進(jìn)行求解,經(jīng)過數(shù)學(xué)推導(dǎo)之后,Linear Regression的Theta可以直接表示為:
    我們可以直接根據(jù)輸入矩陣X和y進(jìn)行Theta的計(jì)算,直接就得到了我們Linear Regression的模型參數(shù),就直接可以執(zhí)行預(yù)測(cè)了。(PS:這種算法還不用對(duì)Feature進(jìn)行縮放處理,很強(qiáng)大,不過此方法只在線性回歸中有效,有一定局限性)
    2.2 Logistic Regression
    Logistic Regression是對(duì)Linear Regression的一種改進(jìn),主要的做法是將線性的Linear Regression中的Hypothesis函數(shù)使用一個(gè)sigmoid函數(shù)g進(jìn)行作用,將Hypothesis函數(shù)轉(zhuǎn)換為非線性的。
    Logistic Regression將線性的Linear Regression改進(jìn)為可以處理非線性Decision Boundary的算法,并且用Logistic Regression實(shí)現(xiàn)了一個(gè)分類器。另外課程中分類器是做Binary分類的,類別只有兩個(gè){0,1}。(
    也可以擴(kuò)展到多個(gè)類分類的情況,這樣需要對(duì)每個(gè)類建立一個(gè)模型,計(jì)算Theta,輸入樣本是自己類的為1,否則為0,對(duì)于預(yù)測(cè)結(jié)果來說,哪個(gè)Hypothesis*的輸出大,就識(shí)別為某個(gè)類,這樣就可以解決多類分類的問題了
    2.2.1 Logistic Regression模型要素
    Hypothesis****函數(shù):
    其中函數(shù)g是一個(gè)S型函數(shù),形狀大致是:
    在x趨近負(fù)無(wú)窮的時(shí)候,g值趨近0,在x趨近正無(wú)窮的時(shí)候,g值趨近1。
    Cost Function ****函數(shù)J****和Gradient****:
    同樣要注意的是,計(jì)算Grad的時(shí)候,需要用上一次迭代的Theta進(jìn)行計(jì)算,全都計(jì)算完畢后,才可以用Grad對(duì)Theta進(jìn)行統(tǒng)一的修改。
    2.2.2 使用Matlab的優(yōu)化函數(shù)對(duì)參數(shù)進(jìn)行求解
    在課程中我們可以使用Matlab函數(shù)fminunc來進(jìn)行優(yōu)化算法的計(jì)算,而不用自己書寫Iterator loop ,僅需要給出計(jì)算Cost 和Grad的函數(shù)即可。
    使用Matlab的計(jì)算代碼如下:其中costFunction函數(shù)返回每次循環(huán)的Cost和Grad值。
    上述代碼就完成了對(duì)Cost Function的優(yōu)化計(jì)算,求得了模型參數(shù)Theta,我們可以使用Theta直接對(duì)未知數(shù)據(jù)進(jìn)行分類預(yù)測(cè)
    2.2.3 預(yù)測(cè)分類
    在求到了Theta后,我們通過使用Hypothesis函數(shù)進(jìn)行計(jì)算,來進(jìn)行對(duì)未知數(shù)據(jù)的分類。當(dāng)H值大于某個(gè)值a---可以是0.5,我們就預(yù)測(cè)分類為1,否則就分類為0。
    這個(gè)值a,可以我們手動(dòng)給出,可以使用Cross Validation的方式進(jìn)行自動(dòng)選取,具體方式在后面會(huì)進(jìn)行說明。(大致為給出a的一系列可能值,比如從0.1到1,然后分別計(jì)算Cross Validation, 選擇Error最小的作為實(shí)際使用a)
    2.3 Regularization
    在我們使用了機(jī)器學(xué)習(xí)算法對(duì)分類器進(jìn)行實(shí)現(xiàn)之后(任何算法,可以是Logistic Regression或者Neural Network等),都可能出現(xiàn)overfitting(過擬合)或者underfitting(未擬合)的問題。為了解決overfitting(主要)和underfitting的問題,我們可以采用一種叫做Regularization的方法。
    在應(yīng)對(duì)Overfitting的時(shí)候,我們可以選擇減少特征個(gè)數(shù)或者是使用Regularization。其中使用Regularization的優(yōu)點(diǎn)是不用減少特征個(gè)數(shù),且在特征數(shù)比較多的時(shí)候很使用。其思想就是在計(jì)算Cost和Grad的時(shí)候,使用模型參數(shù)Theta來對(duì)其進(jìn)行修正。修改后的Cost和Grad公式如下。
    2.3.1 Logistic Regression with Regularization
    Regularization方法適用在很多模型上,但是在不同的模型上的公式修改不同。在Logistic Regression上,使用了Regularization的Cost和Grad計(jì)算公式修改為如下:
    Cost Function****:
    要注意的是,在計(jì)算Regularization部分的時(shí)候,不要計(jì)算用于修正模型的Theta(1)(Matlab中索引從1開始),計(jì)算Theta(2:n+1)即可。
    另外,在計(jì)算Regularization部分的時(shí)候,有一個(gè)參數(shù)lambda,是Regularization的參數(shù),lambda很大的時(shí)候,會(huì)出現(xiàn)underfitting的情況,lambda很小的時(shí)候,會(huì)出現(xiàn)overfitting的情況,關(guān)于lambda的選取,可以使用手動(dòng)設(shè)定或者是自動(dòng)選擇的方法,在下面介紹。
    Gradient Decent****:
    通樣,在計(jì)算Grad的時(shí)候,也不要對(duì)Theta(1)進(jìn)行計(jì)算,在Matlab中可以通過獲取一個(gè)臨時(shí)ThetaTemp,并將其ThetaTemp(1)=0,來進(jìn)行計(jì)算,簡(jiǎn)化邏輯。
    2.3.2 自動(dòng)選擇Regularization參數(shù)lambda
    lambda的自動(dòng)選擇算法可以描述為如下幾步:
  4. 給出可能的lambda選值(每個(gè)建議為*3的關(guān)系),如[0.001 ; 0.003 ; 0.01 ; 0.03 ; 0.1 ;0.3 ; 1 ; 3 ;10 ;30 ;100]
  5. 分別使用上述可選的lambda對(duì)模型進(jìn)行計(jì)算,求得Theta
  6. 使用Theta在Test集上進(jìn)行計(jì)算,求得誤差和Error
  7. 比較Error,選擇使得Error最小的lambda的實(shí)際使用的lambda
    (其他模型中參數(shù)的選擇也類似的方法)。
    2.4 Neural Network
    Neural Network可以算得上是機(jī)器學(xué)習(xí)或是人工智能領(lǐng)域最常用,也比較經(jīng)典的算法了,在這里不在贅述Neural Network的實(shí)現(xiàn)方式,僅僅給出模型描述和具體的實(shí)現(xiàn)方式。在課程中,Andrew Ng教授給處了一種用Neural Network模擬邏輯操作(與或門)等的方式,并且實(shí)現(xiàn)了一個(gè)使用3層的Neural Network進(jìn)行手寫數(shù)字識(shí)別的工具。
    和其他提到的模型一樣,如Logistic Regression,Neural Network一樣有自己的模型元素和模型參數(shù),不同的是它的參數(shù)是權(quán)重矩陣Weighted Matrix。
    2.4.1 Neural Network模型要素
    對(duì)于一個(gè)3層的Neural Network分類器來講,Input layer的節(jié)點(diǎn)數(shù)應(yīng)該就是Feature的個(gè)數(shù)feature_num,hidden layer的節(jié)點(diǎn)數(shù)可以隨意指定,假設(shè)為hidder_layer_size,output layer的節(jié)點(diǎn)數(shù)則是具體的分類的個(gè)數(shù)classes_num。圖示如下:
    我們注意到在實(shí)際的Neural Network中,Input Layer和Hidden Layer都多了一個(gè)只輸出1的節(jié)點(diǎn),用于對(duì)模型進(jìn)行調(diào)整,所以在實(shí)際的使用中,Input Layer和Hidden Layer個(gè)數(shù)各子加1。
    圖中的Theta1和Theta2即為Neural Network的模型參數(shù)Weighted Matrix,它們的維度隨著Input Layer和Hidden Layer加1也要修改。
    Hypothesis****函數(shù):
    在上圖中,其中output layer的輸出a3,即為我們的Hypothesis,它的計(jì)算方法是一次forward propagation的過程,注意每層的輸入到輸出過程中使用了sigmoid函數(shù)g,它的定義和Logistic Regression中一致。
    使用Regularization****的Cost Function****函數(shù):
    需要注意的是,在計(jì)算Regularization部分的時(shí)候,要忽略Input Layer和Hidden Layer中只輸出1的調(diào)整節(jié)點(diǎn)的參數(shù)Theta
    Grad****函數(shù)計(jì)算:Neural Network的Grad計(jì)算方式很特別,在下面給出具體步驟。
    2.4.2 Neural Network Back propagation
    注意到在上面的模型元素中,我們沒有提到Grad的計(jì)算方法,這是因?yàn)镹eural Network的Grad計(jì)算方法比較特別,需要用到back propagation技術(shù),在這里單獨(dú)描述。
    Back propagation的具體想法大致為:從Output Layer的輸出開始與實(shí)際輸出y進(jìn)行Error計(jì)算,將此Error沿著Neural Network反向計(jì)算,一直到Input Layer輸出,計(jì)算對(duì)Weighted Matrix Theta1 和Theta2的Grad修正值。
    對(duì)于一個(gè)3層Neural Network,Back propagation大致算法如下:
    在實(shí)現(xiàn)上述算法的時(shí)候,我們需要寫一個(gè)for i=1: size(X,1)的循環(huán),對(duì)每個(gè)樣本循環(huán)計(jì)算,
    在循環(huán)中進(jìn)行一次forward propagation,得出每層的輸出,然后根據(jù)步驟2-4進(jìn)行delta_1和delta_2的統(tǒng)計(jì)。循環(huán)外部計(jì)算Grad_1和Grad_2。大致代碼如下:
    以上算法是計(jì)算不帶Regularization的Gradient Decent,帶Regularization的需要將上述求得的Theta1_grad和Theta2_grad加上Regularization部分。
    Grad使用Regularization的公式如下:
    需要注意的是,在計(jì)算Regularization的時(shí)候,我們對(duì)調(diào)整節(jié)點(diǎn)(Bias Node)的相關(guān)Theta值不能處理。
    2.4.3 Gradient Checking---驗(yàn)證Gradient Descent計(jì)算是否正確的方式
    有時(shí)候我們需要確定我們的Gradient Descent是否計(jì)算的正確(尤其像Neural Network這種需要很大計(jì)算,并且很容易出錯(cuò)的算法),Gradient Checking就是一種計(jì)算Gradient Descent的輔助驗(yàn)證手法。
    因?yàn)镚radient Descent是一種計(jì)算Cost Function對(duì)于每個(gè)模型參數(shù)的偏導(dǎo)的方式,那我們就可以用簡(jiǎn)單的數(shù)學(xué)上知識(shí)對(duì)此進(jìn)行驗(yàn)證,Gradient Checking就是這個(gè)想法。具體步驟如下:
    上面的計(jì)算公司給出了我們一種模擬計(jì)算偏導(dǎo)的好方法,通過對(duì)小數(shù)據(jù)量上的數(shù)據(jù)進(jìn)行Gradient Checking,我們就可以驗(yàn)證Gradient Descent的正確性。(由Gradient Checking和Gradient Descent對(duì)于Gradient的計(jì)算結(jié)果進(jìn)行比較,他們的誤差應(yīng)該非常小。)這種方法不僅適合Neural Network,也適合很多其他的算法,當(dāng)你對(duì)你計(jì)算Gradient Descent的代碼不夠自信(自信其實(shí)算一下也沒錯(cuò))的時(shí)候,就是用它來Checking吧。
    2.5 Cross Validation & Bias/Variance
    2.5.1 Cross Validation
    Cross Validation,中文稱作交叉驗(yàn)證,是一種很好的對(duì)算法進(jìn)行驗(yàn)證的方法,它可以適用于任何監(jiān)督類學(xué)習(xí)算法。
    Cross Validation的思想很簡(jiǎn)單,大致為以下幾步:
  8. 訓(xùn)練集Training set劃分為兩個(gè)部分Cross-Validation set和Training set_use。
  9. 使用Training set_use來進(jìn)行算法的訓(xùn)練,計(jì)算得到的模型在Training set_use上的誤差數(shù)據(jù)J_train。
  10. 使用訓(xùn)練的結(jié)果對(duì)Cross-Validation set上的數(shù)據(jù)進(jìn)行計(jì)算Hypothesis,計(jì)算模型在Cross-Validation set上的誤差數(shù)據(jù)J_cv
  11. 根據(jù)Cross-Validation set上的模型表現(xiàn)J_cv判定算法效率。
    2.5.2 Learning Curves, Bias & Variance
    我們計(jì)算通過調(diào)整訓(xùn)練集的大小(從1到m)來計(jì)算J_train和J_cv兩個(gè)數(shù)據(jù),這樣,我們就得到了一個(gè)關(guān)于訓(xùn)練集大小和J_train/J_cv的學(xué)習(xí)曲線(Learning Curves)。它可以幫助我們更好的確定數(shù)據(jù)集的大小,以及確定當(dāng)前算法的表現(xiàn)情況。
    High Bias:underfitting,Learning Curves中的J_train和J_cv數(shù)據(jù)都很高,兩者曲線最后距離變很靠近。
    解決辦法:獲取更多的特征;使用多項(xiàng)式特征(Feature Mapping,引入特征的冪作為新特征);如果是Logistic Regression的話減少lambda。
    High Variance:overfitting,Learning Curves中的J_train值很低,J_cv數(shù)據(jù)很高,二者有明顯的差距。
    解決辦法:選擇更多的訓(xùn)練集;選擇更少的特征;如果是Logistic Regression則增加lambda。
    2.6 Error Metrics ---如何度量Skewed Classes的錯(cuò)誤
    使用機(jī)器學(xué)習(xí)的時(shí)候,我們需要一個(gè)評(píng)價(jià)得到的模型效率的的方式,使用準(zhǔn)確率來講,一般的情況就可以了,不過應(yīng)對(duì)一些特殊問題的時(shí)候,比如說小概率事件的預(yù)測(cè)上,癌癥預(yù)測(cè):平均發(fā)送比例非常小(5/1000),這種情況叫做Skewed Classes。
    在Skewed Classes問題中就算我們的算法一直預(yù)測(cè)0(正常),對(duì)于現(xiàn)實(shí)的樣本也可能得到非常高的準(zhǔn)確率,但是這明顯是不對(duì)的,所以我們需要其他的評(píng)價(jià)方式。
    下面介紹一些新的概念。
    2.6.1 Precision & Recall
    如上圖,左邊是一個(gè)22的矩陣,其中每個(gè)元素為實(shí)際模型在Test集上的表現(xiàn)數(shù)據(jù),其中
    True Positive為預(yù)測(cè)為1,實(shí)際也是1的次數(shù)
    False Positive為預(yù)測(cè)為1,實(shí)際為0的次數(shù)
    False Negative為預(yù)測(cè)為0,實(shí)際為1的次數(shù)
    True Negative為預(yù)測(cè)為0,實(shí)際也為0的次數(shù)
    我們又引入兩個(gè)概念Precision和Recall,其中Precision=tp/(tp+fp),Recall=tp/(tp+fn)。
    它們的具體計(jì)算方法如下:
    2.6.2 F1 Score
    為了計(jì)算Error Metrics for Skewed Classes,最終我們需要計(jì)算的值稱為F1 Score,它的計(jì)算公式為:
    我們最終使用F1 Score來評(píng)價(jià)不同的算法效率,對(duì)于F1 Score的值最高的算法,效率最高。(根據(jù)公式可見,F(xiàn)1 Score高的算法的Precision和Recall的值都比較高才行)
    另外,F(xiàn)1 Score的評(píng)價(jià)方法不僅局限于Skewed Classes,還可以應(yīng)用于任何其他類型的算法比較。
    2.7 SVM
    Support Vector Machine,支持向量機(jī),現(xiàn)在應(yīng)用很廣的非常好用的機(jī)器學(xué)習(xí)算法,關(guān)于此算法已有了比較成型的工具支持,如LIBSVM,使用也非常好用,在這里僅僅簡(jiǎn)單介紹SVM的一些概念。本課程中給出了一個(gè)利用SVM進(jìn)行垃圾郵件分類的工具。(
    關(guān)于SVM的具體理論很復(fù)雜,不進(jìn)行討論,只要知道如何使用就好*)
    2.7.1 SVM模型要素
    Cost Function ****和Hypothesis****:
    由上公式可見,SVM模型中有一個(gè)參數(shù)C,這個(gè)參數(shù)的大小是很重要的,它和1/lambda的概念差不多,如果C取得比較大,則SVM 訓(xùn)練到的Decision Boundary對(duì)于訓(xùn)練集數(shù)據(jù)敏感,如果C取得比較小,則Decision Boundary對(duì)訓(xùn)練集的噪聲比較不重視。
    2.7.2 Kernels核函數(shù)
    在處理非線性的Decision boundary的時(shí)候,SVM通常要將特征空間擴(kuò)展到高維空間上,而Kernel函數(shù)的主要工作是用于代替高維向量的點(diǎn)積運(yùn)算,這樣甚至我們就不用真的執(zhí)行高維空間映射就可以完成高維空間的效果。有幾種常用的Kernel函數(shù),課程中使用的Kernel函數(shù)是Gaussian Kernel。它的定義如下:
    其中xi和xj為兩個(gè)特征空間的向量。
    2.7.3 SVM的使用
    SVM的使用是比較簡(jiǎn)單的,一般我們只要給出樣本集X,y,要使用的kernel 函數(shù),以及參數(shù)C,即可。關(guān)于更多的使用,課程建議我們使用已有的SVM工具集LIBSVM。
    另外,關(guān)于多類分類的SVM使用,假設(shè)有K個(gè)分類,則我們可以訓(xùn)練K個(gè)SVMs,對(duì)每一組輸入數(shù)據(jù),進(jìn)行K個(gè)SVM的Hypothesis計(jì)算,取其中比較大的為最后的分類。
    2.8 Supervised Learning 算法的比較
    目前我們學(xué)到的Supervised Learning算法有Logistic Regression ,Neural Network和SVM。
    假設(shè)輸入樣本集為m個(gè),特征為n個(gè),我們來分情況討論上述算法的適用情況。
  12. n比m大很多:使用Logistic Regression或者Linear Kernel的SVM比較好。
  13. n比較小,m數(shù)量級(jí)適中:使用Gaussian Kernel的SVM比較好
  14. n比較小,m很大的情況:嘗試提取更多的特征,使用Logistic Regression或者使用Linear Kernel的SVM比較好。
  15. 在上述所有情況,Neural Network都可以有很好的表現(xiàn),但是訓(xùn)練的時(shí)間要很長(zhǎng)。
    2.9 Clustering:K-means
    Clustering聚類,課程涉及到的第一個(gè)非監(jiān)督算法。用來找到結(jié)構(gòu)或者模式,可以用于社交網(wǎng)絡(luò)分析、市場(chǎng)分析、優(yōu)化計(jì)算集群、天文數(shù)據(jù)分析等個(gè)個(gè)方面。
    經(jīng)典Clustering 算法:K-means。在Programming exercises中,給出了一個(gè)圖片壓縮的應(yīng)用。(圖片中保存的顏色為RGB,每個(gè)8位,我們實(shí)際可以使用16個(gè)顏色來代替其他所有的顏色,針對(duì)所有像素點(diǎn)的RGB值,作為一個(gè)3D的特征,使用K=16的K-means方法,將所有的RGB值聚類為16類,然后用這每個(gè)RGB值的從屬類RGB值代替原RGB,即完成了圖像壓縮,每個(gè)像素只用4位(2^4=16
    和監(jiān)督算法不同,非監(jiān)督算法中沒有Hypothesis函數(shù),只有Cost Function,也有Grad的形式。
    2.9.1 K-means算法
    K-means****算法的Cost Function****如下:
    由上公式我們可以看到,K-means算法的模型參數(shù)有兩組,一組是m個(gè)樣本的所屬分類情況C,另一組是K個(gè)聚類的中心點(diǎn)左邊U。通過優(yōu)化Cost Function J,我們想得到這兩組值。
    K-means****算法的過程如下:
    如上所示,算法循環(huán)中對(duì)C和U的修正,即為minimize Cost Function J的過程。
    2.9.2 K-means的初始值U和C
    K-means算法的Cost Function J可能有局部最小值,這樣就無(wú)法避免K-means算法可能會(huì)得到一個(gè)局部最小值而無(wú)法得到全局最小值。
    解決的辦法大致有二:
  1. 隨機(jī)賦值初始值U和C,并執(zhí)行K-means算法,記錄最后的Cost值,循環(huán)上述過程N(yùn)次,取其中Cost最小的U和C作為最后的全局最小值。
  2. 使用模擬退火法,修改K-means算法循環(huán)過程,加入模擬退火,防止進(jìn)入局部最小值(詳見《集體智慧編程》)。
    2.10 Principal Component Analysis
    PCA算法在機(jī)器學(xué)習(xí)的主要作用即為:對(duì)數(shù)據(jù)的降維。Programming exercises中給出的例子是對(duì)人臉圖片進(jìn)行壓縮。它可以用于我們?cè)跈C(jī)器學(xué)習(xí)訓(xùn)練時(shí)對(duì)訓(xùn)練集降維,進(jìn)而加快我們的訓(xùn)練速度等等,也可以完成數(shù)據(jù)的可視化。(n維數(shù)據(jù)降維成3維)
    PCA算法解決的主要問題是:如何在盡量保持?jǐn)?shù)據(jù)完整性情況下將n維數(shù)據(jù)降到k維(n>k)。它的想法大概是這樣:找到一個(gè)K維的超平面,它可以擬合大部分的數(shù)據(jù)集中的n維點(diǎn),然后將數(shù)據(jù)集中的n維點(diǎn)都投影(projection)到這個(gè)K維的超平面上,即完成了數(shù)據(jù)的壓縮。
    需要注意的是對(duì)于PCA算法,所有的輸入數(shù)據(jù)必須進(jìn)行Normalization,否則會(huì)出錯(cuò)。
    PCA算法的步驟和過程是固定的,下面簡(jiǎn)單進(jìn)行描述。
    2.10.1 PCA Algorithm
    PCA算法主要需要計(jì)算兩個(gè)值:一是數(shù)據(jù)的covariance matrix,二是計(jì)算principal components。
  1. 計(jì)算covariance matrix :對(duì)于數(shù)據(jù)集X,計(jì)算covariance matrix的公式如下:
  2. 計(jì)算principal components:使用matlab的svd函數(shù)計(jì)算如下:
    其中Sigma即為上面計(jì)算出的covariance matrix。
  3. 對(duì)數(shù)據(jù)X進(jìn)行降維到K得到數(shù)據(jù)集Z:(X為mn,Z為mk)
    U_reduce=U(:,1:K);
    Z=X*U_reduce;
  4. 對(duì)數(shù)據(jù)Z進(jìn)行還原得到X_approx
    X_approx=ZU_reduce’;
    2.10.2 PCA的Cost Function
    上式的左邊即為PCA算法的Cost Function,代表經(jīng)壓縮的數(shù)據(jù)相對(duì)于原數(shù)據(jù)的信息丟失程度。上式在我們進(jìn)行K的選擇的時(shí)候比較有用(比如要將數(shù)據(jù)降維,但又要保持?jǐn)?shù)據(jù)完整性)可以自動(dòng)選擇一個(gè)滿足上式的還比較小的K,滿足上式代表著經(jīng)過PCA算法的處理后,數(shù)據(jù)的信息量丟失不超過1%。
    2.11 Anomaly Detection
    異常檢測(cè),用于檢測(cè)異常的情況,如檢測(cè)用戶異常動(dòng)作或者系統(tǒng)行為等等。在Programming Exercises中,課程給出了一個(gè)根據(jù)吞吐量和延時(shí)檢測(cè)服務(wù)器異常的用例。
    在異常檢測(cè)中,所有的輸入訓(xùn)練集都是正常的訓(xùn)練集,沒有異常情況的樣例。
    課程使用了Gaussian Model的Anomaly Detection,它的思想比較簡(jiǎn)單,把所有的特征Feature都假定其滿足Gaussian的分布。
    Gaussian Distribution如下:
    我們看到Gaussian Distribution有兩個(gè)參數(shù),我們需要將樣本中的每個(gè)特征看為一組訓(xùn)練數(shù)據(jù),來求得每個(gè)特征的Gaussian分布參數(shù)。計(jì)算公式:
    2.11.1 Anomaly Detection Algorithm
    由上可見,算法在計(jì)算玩每個(gè)Feature的Gaussian分布后,對(duì)每個(gè)后來的新數(shù)據(jù)X,都要計(jì)算p(x),公式如上,如果p(x)小于特定值則判定為異常。此值可以用自動(dòng)選擇的方式進(jìn)行計(jì)算(上面討論過:使用CV和F1對(duì)不同值的算法進(jìn)行評(píng)價(jià),取最好的)。
    2.11.2 More about Anomaly Detection
    Anomaly Detection與Supervised算法是不同的,anomaly的種類有非常多,它不能像Supervised算法一樣根據(jù)之前的anomaly學(xué)習(xí),對(duì)后來的數(shù)據(jù)進(jìn)行預(yù)測(cè),因?yàn)楹髞淼腶nomaly可能和之前的是完全沒有相似性的。
    另外,在例子中我們使用的是Gaussian Model,那么在實(shí)際的使用中很可能Feature是不滿足Gaussian分布的,在這種情況下我們可以對(duì)特征進(jìn)行某種變換(某種數(shù)學(xué)計(jì)算),來使它滿足Gaussian分布即可,可自己嘗試對(duì)特征進(jìn)行變換的方法。
    2.12 Recommender System
    Recommender System推薦系統(tǒng),課程以一個(gè)對(duì)電影進(jìn)行評(píng)分的應(yīng)用展示了推薦系統(tǒng)的設(shè)計(jì)方法。
    2.12.1 Content-based recommendation
    輸入共有nm個(gè)電影,nu個(gè)用戶。輸入矩陣X,nm
    nu,其中每行是一個(gè)電影的所有用戶的評(píng)分,(從1到5,沒填即為?),而R矩陣也是nmnu的,R(i,j)=1代表用戶j對(duì)電影i進(jìn)行了評(píng)分。
    假設(shè)每個(gè)電影都有n個(gè)特征,特征值由我們自行給每個(gè)電影填上(如romantic,action)。
    對(duì)于每個(gè)用戶j,計(jì)算他相對(duì)與特征的Thetaj,計(jì)算采用優(yōu)化算法,其中要素如下:
    Cost Function****和Gradient Descent****:
    在優(yōu)化求得了Theta_1到Theta_nu之后,我們就可以使用Hypothesis函數(shù)來對(duì)用戶j對(duì)未評(píng)價(jià)的電影i進(jìn)行評(píng)分。Hypothesis如下:
    2.12.2 Collaborative filtering learning algorithm
    協(xié)同過濾算法,和基于內(nèi)容的推薦不同,對(duì)于Collaborative filtering算法,電影的特征值是不知道的,對(duì)于模型來說,參數(shù)就換成了:X_1到X_nm,Theta_1到Theta_nu。它的
    Cost Function如下:
    而它的Grad修改為:
    我們要計(jì)算兩個(gè)Grad矩陣:X_grad:nm
    n和Theta_grad:nun。
    而Collaborative filtering的Hypothesis函數(shù)還是一樣,對(duì)于h(i,j)=Theta_j’
    X(i,:)。
    這樣,Cost Function和Gradient Descent以及Hypothesis都有了,我們就可以使用優(yōu)化算法對(duì)Theta_1到Theta_nu和X_1到X_nm進(jìn)行計(jì)算。得到這些值之后,我們就可以這些值使用Hypothesis(i,j)進(jìn)行對(duì)于用戶j對(duì)于電影i的評(píng)分進(jìn)行預(yù)測(cè)了。
    2.13 Large Scale Machine Learning
    在這個(gè)議題里,我們主要討論了對(duì)于數(shù)據(jù)量比較大的情況下,如何有效地使用機(jī)器學(xué)習(xí)算法。
    2.13.1 對(duì)于Logistic Regression算法
    Logistic Regression算法中的Grad中每個(gè)元素的計(jì)算每次都要遍歷所有的輸入,這樣在數(shù)據(jù)樣本比較大時(shí)是非常耗時(shí)的,這時(shí)我們就可以使用隨機(jī)梯度下降算法(Stochastic Gradient Descent)或者M(jìn)ini-batch Gradient Descent算法。
    Stochastic Gradient Descent算法如下:
    由上圖可見,在每次循環(huán)計(jì)算Theta(j)的時(shí)候,算法不再像原始的Batch Gradient Descent一樣需要計(jì)算所有的數(shù)據(jù),只有了一條數(shù)據(jù)。減少了計(jì)算量。(當(dāng)然這樣求得的Gradient Descent就不是真正意義上的偏導(dǎo)數(shù)了,其Cost Function可能會(huì)有上升的情況,不過沒問題,經(jīng)過迭代是可以收斂的)
    Mini-batch Gradient Descent算法和Batch Gradient Descent算法(一次計(jì)算需要所有值的計(jì)算)與Stochastic Gradient Descent算法(一次計(jì)算只用一個(gè)值的計(jì)算)都不同,它每次計(jì)算使用b=mini-batch size個(gè)元素進(jìn)行計(jì)算,是上述兩種的中間算法,Gradient Descent的計(jì)算方式修改為:
    2.13.2 Online Learning
    在線學(xué)習(xí),主要的思想是根據(jù)用戶的新輸入實(shí)時(shí)的對(duì)模型參數(shù)進(jìn)行持續(xù)的在線修改,完成持續(xù)性的學(xué)習(xí)。另外的一種方式是將之前訓(xùn)練的結(jié)果加以保存,這樣可以在下次運(yùn)行時(shí)繼續(xù)持續(xù)的學(xué)習(xí)。增加了允許學(xué)習(xí)的時(shí)間。
    2.13.3 Map Reduce and Data parallelism
    使用如Map Reduce等分布式計(jì)算的工具也是一種加速我們學(xué)習(xí)的算法,可以通過將學(xué)習(xí)中的計(jì)算任務(wù)分布到不同的機(jī)器或節(jié)點(diǎn)上的方式來進(jìn)行并行化。
    2.14 Ceiling analysis
    上限分析,一種可以讓我們找到我們機(jī)器學(xué)習(xí)系統(tǒng)瓶頸的工具。一個(gè)完整的機(jī)器學(xué)習(xí)系統(tǒng)由很多部分組成,在整體系統(tǒng)的表現(xiàn)不好的時(shí)候,我們需要確定到底是那個(gè)子系統(tǒng)出了問題,我們需要集中經(jīng)歷解決哪個(gè)系統(tǒng)的問題。這時(shí)就可以使用Ceiling analysis。
    Ceiling analysis的思想也很簡(jiǎn)單,它通過用人工替換的方式,記錄在系統(tǒng)各部分依次換成人工執(zhí)行的時(shí)候,整個(gè)系統(tǒng)的表現(xiàn),在某個(gè)部分換成人工之后,系統(tǒng)性能有很明顯的提升,這就說明這個(gè)部分的表現(xiàn)決定了我們系統(tǒng)的表現(xiàn),目前是系統(tǒng)的瓶頸,是我們應(yīng)該集中精力改善的部分。
    課程以O(shè)CR(圖片文字識(shí)別)為例給出了進(jìn)行Ceiling analysis的方法。
    如圖為OCR系統(tǒng)進(jìn)行Ceiling analysis的一個(gè)例子:
    根據(jù)圖片所示系統(tǒng)目前的瓶頸在于Text detection部分。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容