機器學習(冪次學院)筆記

GitHub項目推薦:https://github.com/MLEveryday/100-Days-Of-ML-Code

機器學習常見面試題整理:http://kubicode.me/2015/08/16/Machine%20Learning/Common-Interview/


有監督學習和無監督學習的區別

  • 有監督學習:對具有標記的訓練樣本進行學習,以儘可能對訓練樣本集外的數據進行分類預測。(LR,SVM,BP,RF,GBRT)
  • 無監督學習:對未標記的樣本進行訓練學習,以發現這些樣本中的結構知識。(KMeans,DL)

監督學習,就是人們常說的分類,通過已有的訓練樣本(即已知數據以及其對應的輸出)去訓練得到一個最優模型(這個模型屬於某個函數的集合,最優則表示在某個評價準則下是最佳的),再利用這個模型將所有的輸入映射爲相應的輸出,對輸出進行簡單的判斷從而實現分類的目的,也就具有了對未知數據進行分類的能力。監督學習裏典型的例子就是KNN、SVM。

無監督學習(也有人叫非監督學習,反正都差不多)則是另一種研究的比較多的學習方法,它與監督學習的不同之處,在於我們事先沒有任何訓練樣本,而需要直接對數據進行建模。

如果我們在分類的過程中有訓練樣本(training data),則可以考慮用監督學習的方法;如果沒有訓練樣本,則不可能用監督學習的方法。但是事實上,我們在針對一個現實問題進行解答的過程中,即使我們沒有現成的訓練樣本,我們也能夠憑藉自己的雙眼,從待分類的數據中人工標註一些樣本,並把他們作爲訓練樣本,這樣的話就可以把條件改善,用監督學習的方法來做。

 

 

線性迴歸

(一)線性迴歸:通過模型來描述某一特徵x與連續輸出目標變量y之間的關係。

平時所說的向量都是列向量,所以w和x都是列向量。

多元線性迴歸:

eg:波士頓房屋數據

首先,藉助散點圖矩陣,可視化的方法彙總顯示各不同特徵兩兩之間的關係。爲了繪製散點圖矩陣,需要用到seaborn庫中的pairplot函數它是在matplotlib基礎上繪製統計圖像的Python庫。還可以做熱度圖。

基於最小二乘法構建線性迴歸模型:

可將線性迴歸模型看作通過訓練數據的樣本點來尋找一條最佳擬合直線。不過,在此既沒有對最佳擬合做出定義,也沒有研究擬合類似模型的各種技術。在接下來的部分中,通過最小二乘法估計迴歸曲線的參數w,使得迴歸曲線到樣本點垂直距離(殘差或誤差)的平方和最小,即代價函數J(w)最小。

最小二乘法:主要思想就是選擇未知參數,使得真實值和預測值之差的平方和(也就是代價函數)達到最小。

預測函數是線性函數,是連續型函數,連續性函數的主要優點在於:其代價函數/目標函數J(w)是可導的,而且是一個凸函數;這樣,可以通過簡單、高效的梯度下降優化算法來得到權重,且能保證在訓練集樣本中的代價函數最小。

代價函數:真實值減去預測值

向量w的長度是特徵的個數+1。一行是一個樣本,一列代表一個特徵。

(二)梯度下降法

(三)使用數據集中的所有變量訓練多元迴歸模型

殘差圖作爲常用的圖形分析方法,可對迴歸模型進行評估、獲取模型的異常值,同時還可檢查模型是否是線性的,以及誤差是否隨機分佈。

殘差:真實值與預測值之間的差或者垂直距離

殘差隨機分佈於中心線附近更好

MSE:均方誤差

SSE:最小化誤差平方和

SST:反應的是真實y的方差   

R2:決定係數,反應了y的波動有多少百分比能被x的波動所描述

(四)正則化:幫助減少過擬合,本質是對權重w的約束

過擬合:訓練數據過少,特徵過多,模型過於複雜

在某種程度上,越小的權重複雜度越低,因此能夠更簡單且更有效地描繪數據,所以我們傾向於選擇這樣的權重。

奧卡姆剃刀:更傾向於選擇簡單的模型,實際上簡單的模型不一定好。

正則化的兩種方法:

(1)嶺迴歸

(2)LASSO

 

 

邏輯迴歸

(一)logistic regression其實是一個分類模型。

邏輯迴歸的結果是對線性迴歸的結果增加了一個sigmoid函數處理,將值映射到[0,1]的空間,從而產生一個概率值。

機率比:特定事件發生的機率, p:正事件發生的概率,即要預測的事件,標記爲y=1  

logit函數——機率比的對數函數(對數機率)

logistic函數(sigmoid函數):

(二)先定義一個最大似然函數L,數據集中每個樣本都是相互獨立的——

目標是使用已知的n個樣本,使得這個L的概率值最大,即使得上面公式L的結果最大。

首先,在似然函數值非常小的時候,可能出現數值溢出的情況,使用對數函數降低了這種情況發生的可能性。其次,我們可以將各因子的連乘轉換爲和的形式,利用微積分中的方法,通過加法轉換技巧可以更容易地對函數求導。

可以通過梯度上升法做最大化似然函數。還可以作爲代價函數J使用梯度下降法做最小化處理。

複雜模型往往容易學習到了一些局部噪聲的影響(現實的數據總是有噪聲的)。因此當 一個複雜模型(比如一個n次多項式模型)完美擬合了特定數據集的時候,這樣的模型一般都不能很好泛化到其它數據集上,所以包含一定噪聲的線性模型在預測中會有更好的表現。

在邏輯迴歸中使用正則化:

C越大,正則化約束力越小,效果越差。0.1-10,一般在1附近取值。

 

 

決策樹

歸納分類算法,有監督,非參數學習。

貪心算法——自頂向下遞歸方式構造決策樹,在每一步選擇中都採取當前狀態下最好的選擇。

不純度衡量標準

:越小越好。系統越無序,熵越大。

信息增益:沒有分類時的熵 減去 按某一特徵分類後的熵。越大越好。對可取值數目較多的屬性有所偏好。

選擇信息增益最大的特徵進行分類,以此類推。

上述是ID3算法,C4.5是其擴充,它使用增益率來選擇最優劃分屬性。

基尼指數 反映了從數據集中隨機抽取兩個樣本,其類別標記不一致的概率,因此基尼指數越小則數據集的純度越高。在候選屬性集合中選擇那個使得劃分後基尼指數最小的屬性作爲最優劃分屬性。

 

 

k-近鄰算法(KNN)

監督學習算法,惰性學習算法,非參數化模型

參數化模型:感知器、邏輯迴歸、線性支持向量機

非參數化模型:決策樹(隨機森林)、核SVM

步驟:1、選擇近鄰的數量k和距離度量的方法

2、找到待分類樣本的k個最近鄰居

3、根據最近鄰的類標進行多數投票

歐幾里得距離爲度量標準——對數據進行標準化處理。

曼哈頓距離(計程車距離)

切比雪夫距離

閔兒科夫斯基距離

馬氏距離:數據的協方差距離

協方差:衡量兩個變量的總體誤差,判斷兩個變量在變化過程中是否同向變化,同向變化是正值

協方差數值越大,兩個變量同向程度越大

漢明距離:兩個等長字符串的漢明距離是兩個字符串相對於位置上的不同字符串的個數

餘弦相似度:兩個向量夾角的度數來度量他們的相似度

編輯距離:兩個字符串由一個轉成另一個所需的最少編輯操作次數

Jaccard係數,jaccard距離  比較布爾值屬性的對象之間的距離

KL散度:比較兩個概率分佈的接近程度

熵H

維度災難  容易過擬合

 

 

支持向量機SVM

分類效果最好的算法,感知器的擴展

感知器:最簡單的單層神經網絡

SVM的優化目標:最大化分類間隔

最靠近超平面的訓練樣本叫支持向量。

二維空間是直線,三維空間是一個面,多維空間叫超平面。

劃分超平面線性方程:

在使用svm對數據進行處理之前一定要進行標準化操作。標準化的目的是爲了不同維度的特徵統一到同一個範圍,便於數學上的優化操作,對於決策樹這種,不是對模型參數優化的,就不用的。

測試集標準化時用的是訓練集的均值和方差。

在原始空間不能劃分的特徵點映射到一個更高維空間就可以很簡單的解決。

用核函數解決非線性可分問題

核函數:高斯核、徑向基函數核(RBF)(大部分更優)最常使用

 

 

神經網絡

最簡單的MP模型:

改用二維的下標,用w(x,y)來表達一個權值,下標中的x代表後一層神經元的序號,而y代表前一層神經元的序號(序號的順序從上到下)。

偏置結點:沒有輸入,在神經網絡的每個層次中,除了輸出層以外,都會含有這樣一個偏置單元。

訓練的本質:優化損失函數,梯度方向上函數值變化最快。

損失函數   

梯度下降算法每次計算參數在當前的梯度,然後讓參數向着梯度的反方向前進一段距離,不斷重複,直到梯度接近零時截止。一般這個時候,所有的參數恰好達到使損失函數達到一個最低值的狀態。

在神經網絡模型中,由於結構複雜,每次計算梯度的代價很大。因此還需要使用反向傳播算法。

不一次計算所有參數的梯度,而是從後往前。首先計算輸出層的梯度,然後是第二個參數矩陣的梯度,接着是中間層的梯度,再然後是第一個參數矩陣的梯度,最後是輸入層的梯度。計算結束以後,所有的參數矩陣的梯度就都有了。

更新w:

 

 

深度學習

卷積神經網絡CNN

stride步長:一組一維數據步長一定,可以降低維度

padding填充:使輸出維度和輸入維度保持一致

                 前後各填充一個0,對稱填充,不能只填充一個,padding=1

二維卷積:水平方向和豎直方向的步長可以不一樣

卷積的本質是獲取圖像的特徵,不同的卷積核,獲取不同的特徵

四個步驟:①卷積convolutions         3*3的卷積核更好     卷積可逆 池化不可逆(記錄池化後的位置,逆操作的時候其他位置填0)

            ②激活/非線性處理

           ③池化或者亞採樣或下采樣spatial pooling   三種方法:最大池化(效果更好)/平均化/加和

           ④分類(全連接層)full connection   目的:使用這些特徵把輸入圖像基於訓練數據集進行分類

在神經網絡中,激活函數對線性加權結果進行一個非線性的變換,常見的激活函數包括:sigmod函數,tanh函數,ReLU函數(最好),ELU函數,PReLU函數。

池化函數可以逐漸降低輸入表示的空間尺度。特別地,池化還有其他重要功能:

  1.使輸入表示(特徵維度)變得更小,並且網絡中的參數和計算的數量更加可控的減小,因此,可以控制過擬合

  2.使網絡對於輸入圖像中更小的變化、冗餘和變換變得不變性(輸入的微小冗餘將不會改變池化的輸出——因爲在局部鄰域中使用了最大化/平均值的操作。)

  3.幫助獲取圖像最大程度上的尺度不變性。它非常的強大,因爲可以檢測圖像中的物體,無論它們位置在哪裏

交叉熵越小越好

開源深度學習框架與常見卷積網絡模型

一層卷積學到的特徵是局部的,層數越高,特徵就越全局化。

深度學習硬件加速方式:CPU  GPU(simd方式,計算能力強,並行度支持好)  FPGA   DSP   ASIC

keras已經成爲TensorFlow的高級接口   https://tensorflow.google.cn/tutorials

Google colab 谷歌實驗平臺

獨熱編碼:類別

缺省(sheng)值:

 

 

 

 

貝葉斯分類器

(一)極大似然估計

全概率公式、先驗概率、類條件概率、後驗概率:

目的:利用已知的樣本結果,反推最有可能(最大概率)導致這樣結果的參數值。

用偏導求最大值

(二)樸素貝葉斯 

在數據量很大的時候,根據中心極限定理,頻率是等於概率的。

(三)EM算法

期望值最大化

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章