Introduction
什么是Machine Learning
Andrew給出了幾種定義如下:
Arthur Samuel給了一個較老的定義:
He defined machine learning as the field of study that gives computers the ability to learn without being explicitly programmed.
also Tom Mitchell 給了一個較新的定義
He says, a computer program is said to learn from experience E, with respect to some task T, and some performance measure P, if its performance on T as measured by P improves with experience E.
這里機器學習就是指一個計算機程序可以通過學習經(jīng)驗E扰路,然后去執(zhí)行任務(wù)T,并通過表現(xiàn)P來判定學得好壞颗搂,最后這個程序可以不斷的進化改進P來執(zhí)行T通過學習E
有哪些類型的機器學習
總體上來說雨膨,機器學習分為以下兩種:
- 監(jiān)督式機器學習(supervised machine learning): 即我們需要一個數(shù)據(jù)集,并且在這個數(shù)據(jù)集中含有正確的答案扔茅。比如課堂上舉例關(guān)于房價的預測模型已旧,其訓練集中必須含有房價這個正確的答案。
- 無監(jiān)督機器學習(unsupervised machine learning): 在下一節(jié)講到了無監(jiān)督學習召娜,無監(jiān)督學習一般不會有明確的分類標簽运褪,只是告訴模型我這里有一些數(shù)據(jù),你看看能分成幾類玖瘸,可以怎么分類秸讹。(常見的聚類算法就是用于無監(jiān)督學習)
機器學習要解決的問題,可以分為兩種類型:
- 回歸問題:輸出結(jié)果是一個連續(xù)值雅倒,比如預測房價
- 分類問題:輸出結(jié)果非連續(xù)璃诀,比如預測是和否之類的問題。
此小節(jié)還提到一個問題蔑匣,即現(xiàn)實工程中劣欢,我們可能有無窮多的屬性,而這些屬性可以通過數(shù)學技巧來解決其存儲問題殖演。不過并沒有細講氧秘。
這里我的問題是真的需要無窮多的屬性嗎?通過有限的屬性趴久,比如幾千個屬性值不可以嗎丸相?
無監(jiān)督學習
Andrew給出了什么是無監(jiān)督學習的定義,無監(jiān)督學習首先是沒有所謂的正確答案的彼棍,它只是有一堆數(shù)據(jù)灭忠,輸入給這些無監(jiān)督學習的算法,然后讓算法將這些數(shù)據(jù)分類座硕。Andrew還給出了幾個例子弛作,比如Google News就是通過將網(wǎng)上的新聞通過無監(jiān)督學習算法進行自動分類,從而可以使得相同story的新聞聚合华匾。還比如有一堆用戶的數(shù)據(jù)映琳,可以讓聚合算法自動聚類,將客戶分類(這里我感覺可以用于推薦,聚合不同類型的客戶萨西,然后推薦此類客戶近期購買過的其它類型的產(chǎn)品)有鹿;另外還有一種是非聚類算法(non-clustering algorithm)
最后,Andrew還推薦了Octave谎脯,因為使用Octave或者Matlab可以快速實驗原型葱跋,可以快速的幾行代碼就寫出算法的原型。這里還涉及到了一個概念叫奇異值分解(singular value decomposition)源梭,就是課程講的雞尾酒算法的數(shù)學表達吧娱俺?
- clustering: 算法自動分類,但我們事先并不知道分的什么類型废麻,也就是我們不知道分類的標簽是什么
- non-clustering: 比如將不同聲源的聲音分離
Model and Cost Function
Model Representation
針對訓練集的數(shù)據(jù)荠卷,用如下符號來標記一些東西:
m: 訓練集的樣本數(shù)
x: 輸入骇两,variables/features x(i)表示第i行的輸入
y: 輸出的結(jié)果,所謂right answer y(i) 表示第i個樣本的輸出
(x, y)來表示一個樣本
h: 算法函數(shù) hypothesis. h maps from x to y. 就是一個映射函數(shù)载庭,可以通過給定的X輸出Y
# ? refers to theta
# 實際就是一個一元線性函數(shù)
h(x) = ?0 + ?1x
我們通常把這種線性函數(shù)叫做linear regression with one variable 或者 univariate linear regression
本質(zhì)上又碌,所有機器學習算法其實都是一個映射函數(shù),通過訓練徊哑,找到合適的參數(shù),從而可以實現(xiàn)這樣一種映射,即給定一組輸入值社牲,可以輸出一個值,而這個輸出值就是我們的預測值
cost function
如下公式就是一個cost function悴了,實際是一個類平方差的公式搏恤,關(guān)于平方差請參考文章《統(tǒng)計基礎(chǔ)一》,但是平方差的計算并不會除2湃交,這里之所以乘以1/2熟空,是為了后續(xù)做梯度下降(gradient descent)方便
這個cost function最終是要測度h(x)與y之間的距離,我們也叫這個cost function為square error function. square error function對于線性回歸問題是非常通用的cost function搞莺,當然還有一些其它的cost function息罗,但是square error function更常用。
Cost Function Intuition1
為了簡化問題才沧,先假設(shè)?0 = 0迈喉,J(?0, ?1) -> J(?1)
h(x)是關(guān)于x的函數(shù);而J(?1)是關(guān)于?1的函數(shù)温圆,即這個函數(shù)的橫坐標是?1挨摸。
課程假定有三個樣本(1, 1), (2, 2), (3, 3),這時,如果?1=1岁歉,那么h(x) = x得运,根據(jù)J(?1)的公式,可以計算如下
J(?1) = (1/2*3) * ( (1-1)**2 + (2-2)**2 + (3-3)**2) = 0
假設(shè)?1= 2,計算如下:
J(?1) = (1/6) * ((2-1)**2 + (4-2)**2 + (6- 3)**2) = (1/6) * 14 ≈ 2.33
以此類推熔掺,最終的J(?)函數(shù)的圖形如下:
我們知道這個平方差函數(shù)是用來測度h(x)的預測值和實際樣本的y的距離彬檀,因此距離越小說明我們選取的參數(shù)越準確,因此瞬女,我們的目標是尋找J(?)的最小值窍帝,這個時候的?值就可以產(chǎn)生最優(yōu)的h(x)算法。
實際運用時诽偷,我們可以通過程序自動尋找這個最小值坤学。
Cost Function Intuition2
這一小節(jié)主要講了當?0 != 0時的情況,這時cost function就成了J(?0, ?1)报慕,由于有兩個variables深浮,因此其函數(shù)表示就成了三維的圖像,如下:
這里有個問題眠冈,為啥不把?0飞苇, ?1的0點放在一起?是為了展示的圖形更直觀蜗顽?
但通常我們使用contour plot來表示J(?0, ?1)布卡,這個contour plot實際是上邊那個3-D的平面投影,同一個等高線對應相同的函數(shù)值雇盖。contour plot如下圖:
從這個圖可以看出中心點那個值是J(?0, ?1)的最小值忿等,也就是說這個時候的h(x)最接近實際情況。
Parameter Learning
Gradient Decent
我們在尋找特定的θ0和θ1并使得J(θ0, θ1)可以獲得最小值時崔挖,我們就需要gradient decent function(梯度下降函數(shù))贸街。首先來直觀看下如何尋找θ0, θ1使得J(θ0, θ1)最小:
這個過程非常像我們站在山上往山下走狸相,一直走到最低處薛匪。但是這里可能存在這樣的情況:即當我們的初始點不同時,可能最后下降到不同的低點(這里可以看Andrew的視頻脓鹃,講得非常清楚)逸尖,所以我們說局部最小值 (local minimum value)。
這里有個問題将谊,就是有沒有數(shù)學方法可以找到全局最小值呢冷溶?
走的過程是分步走的,每走一步都會停下來看看往哪個方向走可以下降得更快尊浓,然后再往那個方向走下一步逞频。我們是通過導數(shù)(derivative)來判斷方向的,導數(shù)就是函數(shù)曲線在某一個點的切線的斜率(The slope of the tangent is the derivative at that point)栋齿,我們就是根據(jù)這個斜率來判斷哪個方向可以最陡下降(steepest descent)苗胀。
先來看看梯度下降的公式
這個公式中的??就是所謂的learning rate襟诸,它來決定步子邁多大。
梯度下降的過程就是不斷迭代梯度下降的公式基协,直到收斂(convergence), 即達到最低點歌亲。這里需要注意的是,每次迭代澜驮,θ0和θ1必須同時計算陷揪,如下圖所示:
Gradient Descent Intuition
從圖中我們可以看到上方的圖表明,其導數(shù)為正時杂穷,θ會減一個正數(shù)(這個數(shù)的大小顯然跟??有關(guān))悍缠,因此θ值會向左移動,因此向local minimum value收斂耐量。下邊的圖類似飞蚓,只是θ會向右移動收斂。
上邊的坐標圖表明當??很小時廊蜒,收斂的非常慢趴拧,因為邁的步子小啊
下邊的坐標圖說明當??很大時,會導致收斂失敗山叮,因為會導致離最小值點越來越遠
所以著榴,當收斂時間非常長或者收斂失敗時,說明我們的??設(shè)置的不合適聘芜。
這幅圖說明了當我們采用一個固定的??時兄渺,收斂的step也會越來越小(因為斜率越來越小)缝龄,直到最終收斂汰现,所以最終我們是可以收斂成功的。
Gradient Descent For Linear Regression
要進行梯度下降叔壤,就需要迭代地計算θ0和θ1瞎饲,根據(jù)前面的課程我們知道需要知道J(θ)導數(shù)才能計算,這個涉及到微積分的知識炼绘,暫且不表嗅战,先看下求導后的公式:
注意:θ1與θ0是不同的,這是求導后的結(jié)果
求導的過程如下:
梯度下降的過程就是尋找J(θ)最小值的過程俺亮,針對線性回歸這種特殊情況驮捍,J(θ)實際上是一個二次的凸函數(shù)(convex quadratic function),因此只有一個最小值脚曾,即我們找到的這個局部最小值一定是全局最小值东且。
另外,還涉及到一個概念叫batch gradient decent
, 這是由于我們每次迭代的時候本讥,都需要針對所有的樣本進行計算再求和珊泳,因此我們說是batch
鲁冯。Andrew還提到了某些其它的方式可以不用全部的樣本進行計算,每次只需要樣本的一個子集即可色查,后續(xù)課程再講薯演。
另外,線性代數(shù)還有一個叫做normal equations
的方法可以不需要迭代的方法來找到最小值秧了,這個也是以后會涉及到跨扮。
Linear Algebra Review
Matrices and Vectors
矩陣請參考線性代數(shù)之矩陣
向量vector即n x 1的矩陣,即只有一個column的矩陣验毡。
向量通常使用小寫字母表示好港,而matrix通常使用大寫字母表示
在表示向量的元素的時候,其下標可以從0開始米罚,也可以從1開始钧汹,從0開始就是0-indexed vector,而從1開始就是1-indexed vector录择。
另外拔莱,
"Scalar" means that an object is a single value, not a vector or matrix.
? refers to the set of scalar real numbers.
??? refers to the set of n-dimensional vectors of real numbers.
Addition and Scalar Multiplication
本節(jié)相對簡單,主要是矩陣加減運算以及標量與矩陣相乘隘竭。不再贅述
需要注意的是塘秦,在矩陣的加減運算時,兩個矩陣必須是相同的維數(shù)动看。
Matrix Vector Multiplication
本節(jié)主要講了Matrix和Vector的乘
矩陣與向量的乘本質(zhì)上就是對多元方程式的計算尊剔,可以想象矩陣的每一行都是一個樣例的特征(每個特征值都是對應一個變量值x, y, z...),而向量就是方程的θ0, θ1, ....θn菱皆,通過相乘须误,實際上就可以計算出對應的h(x)結(jié)果。需要注意的是仇轻,在構(gòu)筑的時候京痢,常數(shù)項也需要構(gòu)筑一列,即把變量當做1
假設(shè)我們有房價的尺寸數(shù)據(jù)[123; 234; 555; 666]篷店, h(x) = 40 + 2x
那么我們在使用矩陣計算時祭椰,需要構(gòu)筑如下矩陣
A = [1, 123; 1, 234; 1, 555; 1, 666]
v = [40; 2]
h(x) = A * v
通過這種方式不僅代碼會變得簡單,而且計算時會更加有效率
另外疲陕,矩陣的乘是有順序的方淤,且前一個矩陣的column必須與后一個矩陣的row相等。
比如一個3 x 2矩陣只能跟一個2 x n矩陣相乘蹄殃,結(jié)果為3 x n矩陣
最后關(guān)于矩陣的乘携茂,可以參考線性代數(shù)之矩陣
Matrix-Matrix Multiplication
矩陣乘有的時候是比較繞的,我覺得Andrew講解的非常好窃爷,基本上我們需要把第二個矩陣分解成向量邑蒋,然后用第一個矩陣分別于這些向量相乘姓蜂,得到一個新的向量,最終再把所有的結(jié)果向量組合在一起就是最終結(jié)果医吊。
矩陣和矩陣乘主要用于有多個假設(shè)h(x)的時候钱慢,這個時候第二個矩陣的每個向量都對應一個假設(shè)。
這塊看Andrew的視頻會非常清楚卿堂,不再贅述束莫,需要注意的是
矩陣是有順序的,而且第一個矩陣的列數(shù)必須與第二個矩陣的行數(shù)相等
A x B草描, 如果A為m, n矩陣览绿, 那么B就必須為n,x矩陣穗慕,結(jié)果是m饿敲, x矩陣
Matrix Multiplication Properties
此小節(jié)主要介紹了矩陣乘法的幾個屬性:
- 非community屬性:community屬性指乘號兩邊的變量可以交換順序,即ab = ba逛绵,但是對于矩陣而言怀各,通常是非community的,即AB != BA
- associative屬性:指當有多個乘數(shù)的時候术浪,先計算前邊的乘和先計算后邊的乘是一樣的瓢对,即
a * b * c = a * (b * c) = (a * b) * c
,而矩陣是associative的胰苏,即A * (B * C) = (A * B) * C
之后Andrew引入了單位矩陣的概念(identity matrix)硕蛹,單位矩陣與方形矩陣相乘的時候是community的,即I * A = A * I
硕并,關(guān)于單位矩陣法焰,可以參考線性代數(shù)之矩陣
Inverse and Transpose
此小節(jié)主要講了什么是逆矩陣(inverse matrix), 以及什么是轉(zhuǎn)置矩陣(transpose of matrix)。
逆矩陣的計算比較復雜鲤孵,涉及到行列式和余子式的概念壶栋,Andrew沒有在課程上講,可以參考線性代數(shù)之矩陣以及線性代數(shù)之逆矩陣普监。Andrew演示了通過octave來自動計算逆矩陣的方式。需要注意的是琉兜,并不是所有的square matrix都有逆矩陣凯正,如果矩陣是奇異的singular或者退化的degenerate時,是沒有逆矩陣的豌蟋。
矩陣的轉(zhuǎn)置廊散,簡單來說就是把行轉(zhuǎn)為列,如下:
即一個m x n matrix轉(zhuǎn)置后變?yōu)閚 x m matrix梧疲,且滿足