Machine Learning Algorithms Study Notes(6)—遺忘的數學知識

機器學習中遺忘的數學知識 php

最大似然估計( Maximum likelihood ) html

最大似然估計,也稱爲最大概似估計,是一種統計方法,它用來求一個樣本集的相關機率密度函數的參數。這個方法最先是遺傳學家以及統計學家羅納德·費雪爵士在1912年至1922年間開始使用的。web

最大似然估計的原 算法

給定一個機率分佈,假定其機率密度函數(連續分佈)或機率質量函數(離散分佈)爲,以及一個分佈參數,咱們能夠從這個分佈中抽出一個具備個值的採樣,經過利用,咱們就能計算出其機率 apache

可是,咱們可能不知道的值,儘管咱們知道這些採樣數據來自於分佈。那麼咱們如何才能估計出呢?一個天然的想法是從這個分佈中抽出一個具備個值的採樣,而後用這些採樣數據來估計.網絡

一旦咱們得到,咱們就能從中找到一個關於的估計。最大似然估計會尋找關於的最可能的值(即,在全部可能的取值中,尋找一個值使這個採樣的"可能性"最大化)。這種方法正好同一些其餘的估計方法不一樣,如非偏估計,非偏估計未必會輸出一個最可能的值,而是會輸出一個既不高估也不低估的app

要在數學上實現最大似然估計法,咱們首先要定義似然函數:機器學習

而且在的全部取值上,使這個函數最大化(一階導數)。這個使可能性最大的值即被稱爲最大似然估計分佈式

注意:ide

  • 這裏的似然函數是指不變時,關於的一個函數
  • 最大似然估計函數不必定是唯一的,甚至不必定存在

 

離散分佈,離散有限參數空間

考慮一個拋硬幣的例子。假設這個硬幣正面跟反面輕重不一樣。咱們把這個硬幣拋80次(即,咱們獲取一個採樣並把正面的次數記下來,正面記爲H,反面記爲T)。並把拋出一個正面的機率記爲,拋出一個反面的機率記爲(所以,這裏的即至關於上邊的)。假設咱們拋出了49個正面,31個反面,即49次H,31次T。假設這個硬幣是咱們從一個裝了三個硬幣的盒子裏頭取出的。這三個硬幣拋出正面的機率分別爲, , .這些硬幣沒有標記,因此咱們沒法知道哪一個是哪一個。使用最大似然估計,經過這些試驗數據(即採樣數據),咱們能夠計算出哪一個硬幣的可能性最大。這個似然函數取如下三個值中的一個

咱們能夠看到當時,似然函數取得最大值。這就是的最大似然估計

1.3. 離散分佈,連續參數空間

如今假設例子1中的盒子中有無數個硬幣,對於中的任何一個, 都有一個拋出正面機率爲的硬幣對應,咱們來求其似然函數的最大值

其中. 咱們可使用微分法來求最值。方程兩邊同時對微分,並使其爲零

其解爲, ,以及.使可能性最大的解顯然是(由於這兩個解會使可能性爲零)。所以咱們說最大似然估計值

這個結果很容易通常化。只須要用一個字母代替49用以表達伯努利試驗中的被觀察數據(即樣本)的"成功"次數,用另外一個字母表明伯努利試驗的次數便可。使用徹底一樣的方法便可以獲得最大似然估計值:

對於任何成功次數爲,試驗總數爲的伯努利試驗


連續分佈,連續參數空間

最多見的連續機率分佈正態分佈,其機率密度函數以下

如今有個正態隨機變量的採樣點,要求的是一個這樣的正態分佈,這些採樣點分佈到這個正態分佈可能性最大(也就是機率密度積最大,每一個點更靠近中心點),其個正態隨機變量的採樣的對應密度函數(假設其獨立並服從同一分佈)爲

或:

,

這個分佈有兩個參數:.有人可能會擔憂兩個參數與上邊的討論的例子不一樣,上邊的例子都只是在一個參數上對可能性進行最大化。實際上,在兩個參數上的求最大值的方法也差很少:只須要分別把可能性 在兩個參數上最大化便可。固然這比一個參數麻煩一些,可是一點也不復雜。使用上邊例子一樣的符號,咱們有.

最大化一個似然函數同最大化它的天然對數是等價的。由於天然對數log是一個連續且在似然函數的值域嚴格遞增的上凸函數。[注意:可能性函數(似然函數)的天然對數跟信息熵以及Fisher信息聯繫緊密。]求對數一般可以必定程度上簡化運算,好比在這個例子中能夠看到

這個方程的解是.這的確是這個函數的最大值,由於它是裏頭唯一的一階導數等於零的點而且二階導數嚴格小於零

同理,咱們對求導,並使其爲零

這個方程的解是.

所以,其關於最大似然估計

 Jensen不等式

回顧優化理論中的一些概念。設f是定義域爲實數的函數,若是對於全部的實數x,,那麼f是凸函數。當x是向量時,若是其hessian矩陣H是半正定的(),那麼f是凸函數。若是或者,那麼稱f是嚴格凸函數。

Jensen不等式表述以下:

若是f是凸函數,X是隨機變量,那麼

 

 

特別地,若是f是嚴格凸函數,那麼當且僅當,也就是說X是常量。

這裏咱們將簡寫爲。

若是用圖表示會很清晰:

圖中,實線f是凸函數,X是隨機變量,有0.5的機率是a,有0.5的機率是b。(就像擲硬幣同樣)。X的指望值就是a和b的中值了,圖中能夠看到成立。

當f是(嚴格)凹函數當且僅當-f是(嚴格)凸函數。

Jensen不等式應用於凹函數時,不等號方向反向,也就是。

 

 奇異值分解

 

奇異值分解,singular value decomposition(SVD)是線性代數中一種重要的矩陣分解

奇異值和特徵值基礎知識

特徵值分解和奇異值分解在機器學習領域都是屬於滿地可見的方法。二者有着很緊密的關係,我在接下來會談到,特徵值分解和奇異值分解的目的都是同樣,就是提取出一個矩陣最重要的特徵。先談談特徵值分解吧:

 

特徵值

若是說一個向量v是方陣A的特徵向量,將必定能夠表示成下面的形式:

    這時候λ就被稱爲特徵向量v對應的特徵值,一個矩陣的一組特徵向量是一組正交向量。特徵值分解是將一個矩陣分解成下面的形式:

    其中Q是這個矩陣A的特徵向量組成的矩陣,Σ是一個對角陣,每個對角線上的元素就是一個特徵值。我這裏引用了一些參考文獻中的內容來講明一下。首先要明確的是一個矩陣其實就是一個線性變換,由於一個矩陣乘以一個向量後獲得的向量,其實就至關於將這個向量進行了線性變換。好比說下面的一個矩陣:

它其實對應的線性變換是下面的形式:

由於這個矩陣M乘以一個向量(x,y)的結果是:

上面的矩陣是對稱的,因此這個變換是一個對xy軸的方向一個拉伸變換(每個對角線上的元素將會對一個維度進行拉伸變換,當值>1時,是拉長,當值<1時時縮短),當矩陣不是對稱的時候,假如說矩陣是下面的樣子:

它所描述的變換是下面的樣子:

這實際上是在平面上對一個軸進行的拉伸變換(如藍色的箭頭所示),在圖中,藍色的箭頭是一個最主要的變化方向(變化方向可能有不止一個),若是咱們想要描述好一個變換,那咱們就描述好這個變換主要的變化方向就行了。反過頭來看看以前特徵值分解的式子,分解獲得的Σ矩陣是一個對角陣,裏面的特徵值是由大到小排列的,這些特徵值所對應的特徵向量就是描述這個矩陣變化方向。

    當矩陣是高維的狀況下,那麼這個矩陣就是高維空間下的一個線性變換,這個線性變化可能無法經過圖片來表示,可是能夠想象,這個變換也一樣有不少的變換方向,咱們經過特徵值分解獲得的前N個特徵向量,那麼就對應了這個矩陣最主要的N個變化方向。咱們利用這前N個變化方向,就能夠近似這個矩陣(變換)。也就是以前說的:提取這個矩陣最重要的特徵。總結一下,特徵值分解能夠獲得特徵值與特徵向量,特徵值表示的是這個特徵到底有多重要,而特徵向量表示這個特徵是什麼,能夠將每個特徵向量理解爲一個線性的子空間,咱們能夠利用這些線性的子空間幹不少的事情。不過特徵值分解也有不少的侷限,好比說變換的矩陣必須是方陣。 \

   奇異值

    下面談談奇異值分解。特徵值分解是一個提取矩陣特徵很不錯的方法,可是它只是對方陣而言的,在現實的世界中,咱們看到的大部分矩陣都不是方陣,好比說有N個學生,每一個學生有M科成績,這樣造成的一個N * M的矩陣就不多是方陣,咱們怎樣才能描述這樣普通的矩陣呢的重要特徵呢?奇異值分解能夠用來幹這個事情,奇異值分解是一個能適用於任意的矩陣的一種分解的方法

假設A是一個N * M的矩陣,那麼獲得的U是一個N * N的方陣(裏面的向量是正交的,U裏面的向量稱爲左奇異向量),Σ是一個N * M的矩陣(除了對角線的元素都是0,對角線上的元素稱爲奇異值),V'(V的轉置)是一個N * N的矩陣,裏面的向量也是正交的,V裏面的向量稱爲右奇異向量),從圖片來反映幾個相乘的矩陣的大小可得下面的圖片

 

 

那麼奇異值和特徵值是怎麼對應起來的呢?首先,咱們將一個矩陣A的轉置 * A,將會獲得一個方陣,咱們用這個方陣求特徵值能夠獲得:   

這裏獲得的v,就是咱們上面的右奇異向量。此外咱們還能夠獲得:

這裏的σ就是上面說的奇異值,u就是上面說的左奇異向量。奇異值σ跟特徵值相似,在矩陣Σ中也是從大到小排列,並且σ的減小特別的快,在不少狀況下,前10%甚至1%的奇異值的和就佔了所有的奇異值之和的99%以上了。也就是說,咱們也能夠用前r大的奇異值來近似描述矩陣,這裏定義一下部分奇異值分解:

    r是一個遠小於mn的數,這樣矩陣的乘法看起來像是下面的樣子:

   

右邊的三個矩陣相乘的結果將會是一個接近於A的矩陣,在這兒,r越接近於n,則相乘的結果越接近於A。而這三個矩陣的面積之和(在存儲觀點來講,矩陣面積越小,存儲量就越小)要遠遠小於原始的矩陣A,咱們若是想要壓縮空間來表示原矩陣A,咱們存下這裏的三個矩陣:UΣV就行了。

 

Spark MLlib實現SVD計算

示例數據

1 0 0 0 2

0 0 3 0 0

0 0 0 0 0

0 4 0 0 0

 

示例代碼

 

Java code

public static void main(String[] args) {

SparkConf conf = new SparkConf().setAppName("SVDTest").setMaster("local[2]");

 

JavaSparkContext sc = new JavaSparkContext(conf);

JavaRDD<String> data = sc.textFile("/home/yurnom/data/svd.txt");

JavaRDD<Vector> rows = data.map(s -> {

double[] values = Arrays.asList(SPACE.split(s))

.stream()

.mapToDouble(Double::parseDouble)

.toArray();

return Vectors.dense(values);

});

 

RowMatrix mat = new RowMatrix(rows.rdd());

//第一個參數3意味着取top 3個奇異值,第二個參數true意味着計算矩陣U,第三個參數意味小於1.0E-9d的奇異值將被拋棄

SingularValueDecomposition<RowMatrix, Matrix> svd = mat.computeSVD(3, true, 1.0E-9d);

RowMatrix U = svd.U(); //矩陣U

Vector s = svd.s(); //奇異值

Matrix V = svd.V(); //矩陣V

System.out.println(s);

System.out.println("-------------------");

System.out.println(V);

}

 

示例結果

[4.0,3.0,2.23606797749979]

-------------------

0.0 0.0 -0.44721359549995787

-1.0 0.0 0.0

0.0 1.0 0.0

0.0 0.0 0.0

0.0 0.0 -0.8944271909999159

 

 

參考文獻

 

[1] Machine Learning Open Class by Andrew Ng in Stanford http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=MachineLearning

[2] Yu Zheng, Licia Capra, Ouri Wolfson, Hai Yang. Urban Computing: concepts, methodologies, and applications. ACM Transaction on Intelligent Systems and Technology. 5(3), 2014

[3] Jerry Lead http://www.cnblogs.com/jerrylead/

[3]《大數據-互聯網大規模數據挖掘與分佈式處理》 Anand Rajaraman,Jeffrey David Ullman著,王斌譯

[4] UFLDL Tutorial http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

[5] Spark MLlib之樸素貝葉斯分類算法 http://selfup.cn/683.html

[6] MLlib - Dimensionality Reduction http://spark.apache.org/docs/latest/mllib-dimensionality-reduction.html

[7] 機器學習中的數學(5)-強大的矩陣奇異值分解(SVD)及其應用 http://www.cnblogs.com/LeftNotEasy/archive/2011/01/19/svd-and-applications.html

[8] 淺談 mllib 中線性迴歸的算法實現 http://www.cnblogs.com/hseagle/p/3664933.html

[9] 最大似然估計 http://zh.wikipedia.org/zh-cn/%E6%9C%80%E5%A4%A7%E4%BC%BC%E7%84%B6%E4%BC%B0%E8%AE%A1

[10] Deep Learning Tutorial http://deeplearning.net/tutorial/

 

 

 

 

 

 

附 錄

 Andrew Ng 在斯坦福大學的CS229機器學習課程內容

Andrew Ng -- Stanford University CS 229 Machine Learning

This course provides a broad introduction to machine learning and statistical pattern recognition.

Topics include:

supervised learning (generative/discriminative learning, parametric/non-parametric learning, neural networks, support vector machines);

learning theory (bias/variance tradeoffs; VC theory; large margins);

unsupervised learning (clustering, dimensionality reduction, kernel methods);

reinforcement learning and adaptive control. The course will also discuss recent applications of machine learning, such as to robotic control, data mining, autonomous navigation, bioinformatics, speech recognition, and text and web data processing.

 

 中英文詞語對照

neural networks 神經網絡

activation function 激活函數

hyperbolic tangent 雙曲正切函數

bias units 偏置項

activation 激活值

forward propagation 前向傳播

feedforward neural network 前饋神經網絡(參照Mitchell的《機器學習》的翻譯)

 

Softmax迴歸 Softmax Regression

有監督學習 supervised learning

無監督學習 unsupervised learning

深度學習 deep learning

logistic迴歸 logistic regression

截距項 intercept term

二元分類 binary classification

類型標記 class labels

估值函數/估計值 hypothesis

代價函數 cost function

多元分類 multi-class classification

權重衰減 weight decay

 

深度網絡 Deep Networks

深度神經網絡 deep neural networks

非線性變換 non-linear transformation

激活函數 activation function

簡潔地表達 represent compactly

"部分-總體"的分解 part-whole decompositions

目標的部件 parts of objects

高度非凸的優化問題 highly non-convex optimization problem

共軛梯度 conjugate gradient

梯度的彌散 diffusion of gradients

逐層貪婪訓練方法 Greedy layer-wise training

自動編碼器 autoencoder

微調 fine-tuned

自學習方法 self-taught learning

相關文章
相關標籤/搜索