week 1
- 什么是機器學習?
它包含兩個定義:
1.較老的,非正式的定義:"the field of study that gives computers the ability to learn without being explicitly programmed."
2.一個更現(xiàn)代的定義: "A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E."

通常,任何機器學習問題都可以分配到兩個廣泛的分類之一:
監(jiān)督學習和無監(jiān)督學習
- 什么是監(jiān)督學習
在有監(jiān)督的學習中,我們得到一個數(shù)據(jù)集,并且已經(jīng)知道我們的正確輸出應該是什么樣的,并且認為輸入和輸出之間存在關系。
- 監(jiān)督學習問題分為“回歸”和“分類”問題。
1.在回歸問題中,我們試圖在連續(xù)輸出中預測結果,這意味著我們正在嘗試將輸入變量映射到某個連續(xù)函數(shù)。
2.在分類問題中,我們試圖在離散輸出中預測結果。 換句話說,我們正在嘗試將輸入變量映射到離散類別。

解析:
給出房地產(chǎn)市場房屋面積的數(shù)據(jù),請嘗試預測房價。
給出房地產(chǎn)市場房屋面積的數(shù)據(jù),請嘗試預測房子“賣得多于還是低于要價”。
這是兩種不同的類別。
- 什么是無監(jiān)督學習?
無監(jiān)督學習使我們能夠在很少或根本不知道我們的結果應該是什么樣的情況下處理問題。我們可以從數(shù)據(jù)中導出結構,我們不一定知道變量的影響。我們可以通過基于數(shù)據(jù)中變量之間的關系對數(shù)據(jù)進行聚類來推導出這種結構。在無監(jiān)督學習的情況下,沒有基于預測結果的反饋。

雞尾酒會問題和基因自動分組。
- 模型表示
為了建立未來使用的符號,我們定義了輸入變量(輸入要素)x(i)、試圖預測的“輸出”或目標變量y(i)、訓練示例(x(i),y(i)) 、數(shù)據(jù)集(x(i),y(i));i=1,...,m
請注意,符號中的上標“(i)”只是訓練集的索引,與取冪無關。
我們還將使用X來表示輸入值的空間,并使用Y來表示輸出值的空間。
為了更加正式地描述監(jiān)督學習問題,我們的目標是,在給定訓練集的情況下,學習函數(shù)h:X→Y,使得h(x)是y的對應值的“好”預測器。 由于歷史原因,該函數(shù)h被稱為假設。 從圖中可以看出,這個過程是這樣的:

當我們試圖預測的目標變量是連續(xù)的時,例如在我們的住房示例中,我們將學習問題稱為回歸問題。 當y只能承受少量離散值時(例如,如果給定生活區(qū)域,我們想要預測住宅是房屋還是公寓),我們將其稱為分類問題。
- 代價函數(shù)
我們可以使用代價函數(shù)來衡量我們的假設函數(shù)的準確性。這需要假設的所有結果與來自x和實際輸出y的輸入的平均差異(實際上是平均值的更高版本)。

如果把代價函數(shù)通過幾何進行表述:訓練數(shù)據(jù)集分散在x-y平面上。 我們正在努力做一條直線,使它通過這些分散的數(shù)據(jù)點。
1.代價函數(shù)描述(一)
對于一個簡單的模型(θ0 = 0)描述:

當θ1 = 1時,我們得到的斜率為1,它遍歷模型中的每個數(shù)據(jù)點。當θ1 = 0.5時,發(fā)現(xiàn)從我們的擬合到數(shù)據(jù)點的垂直距離增加。

繪制其他幾個點會產(chǎn)生如下圖(J(θ1)函數(shù)圖):

因此,為了最小化代價函數(shù),應該選取θ1 = 1。
2.代價函數(shù)解釋(二)
對于θ0 != 0的情況:
首先,用等高線圖(雙變量函數(shù)的輪廓線在同一行的所有點處具有恒定值)描述二維模型。

沿著'圓'得到的是相同的代價函數(shù)值 J(θ0,θ1), 例如,上面綠線上的三個綠點具有相同的值。取另一個h(x)并繪制其等高線圖,可得到以下圖表:

當θ0 = 360,θ1 = 0,得到的新圖標在等高線圖中靠近中心,減少了成本函數(shù)誤差。下面給出假設函數(shù)可以正好地擬合數(shù)據(jù)圖。

上圖最小化了代價函數(shù),此時θ0 = 250,θ1 = 0.12,在我們的圖表右側繪制這些值似乎將我們的觀點置于最內(nèi)圈“圓圈”的中心。
- 梯度下降
所以我們有假設函數(shù),我們有一種方法可以衡量它與數(shù)據(jù)的匹配程度。現(xiàn)在我們需要估計假設函數(shù)中的參數(shù)。這就是梯度下降的地方。
我們不是繪制x和y本身,而是我們的假設函數(shù)的參數(shù)范圍以及選擇一組特定參數(shù)所產(chǎn)生的代價。
我們把0θ畫在x軸、θ1畫在y軸上,在垂直z軸上表示代價函數(shù)。 我們的圖上的點將是代價函數(shù)的結果,使用我們的假設和那些特定的θ參數(shù)。

當我們的代價函數(shù)位于圖中凹坑的最底部時,即當它的值最小時,我們就知道我們已經(jīng)成功了。 紅色箭頭顯示圖表中的最小點。
我們這樣做的方法是采用我們的代價函數(shù)的導數(shù)(一個函數(shù)的切線)。 切線的斜率是該點的導數(shù),它將為我們提供朝向的方向。 我們在最陡下降的方向上降低成本函數(shù)。每個步驟的大小由參數(shù)α確定,該參數(shù)稱為學習率。例如,上圖中每個“星”之間的距離表示由參數(shù)α確定的步長。 較小的α將導致較小的步長,較大的α將導致較大的步長。采取步驟的方向由J(θ0, θ1)的偏導數(shù)確定。根據(jù)圖表的開始位置,可能會在不同的點上結束。上圖顯示了兩個不同的起點,最終出現(xiàn)在兩個不同的地方。
梯度下降算法是:

重復直到收斂
注意:在每次迭代j中,應該同時更新參數(shù)θ0, θ1...θn,在第j次迭代計算另一個參數(shù)之前更新特定參數(shù)將導致錯誤的實現(xiàn)。

- 梯度下降
我們現(xiàn)在令θ0 = 0,只使用一個參數(shù)θ1,繪制其代價函數(shù)以實現(xiàn)梯度下降。單個參數(shù)公式是:

無論偏導數(shù)的大小,即斜率正負,θ1最終都將收斂到最小值。

另外,我們應該調(diào)整參數(shù)α以確保梯度下降算法在合理的時間內(nèi)收斂。 沒有收斂或太多時間來獲得最小值意味著我們的步長是錯誤的。

參數(shù)α過小將導致收斂緩慢。過大將導致無法收斂(發(fā)散)。
- 為什么最終會收斂?
當我們接近凸函數(shù)的底部時,偏導數(shù)(斜率)變成0,從而得到:


即隨著梯度下降的不斷進行,學習速率α(偏導項)會自動變小,所以迭代過程中不需要調(diào)整參數(shù)α。
- 線性回歸的梯度下降
當特別應用于線性回歸的情況時,可以導出梯度下降方程的新形式。 我們可以替換我們的實際代價函數(shù)和我們的實際假設函數(shù),并將等式修改為(求偏導):

求偏導過程(推導):

所有這一切的要點是,如果我們開始猜測我們的假設,然后重復應用這些梯度下降方程,我們的假設將變得越來越準確。
因此,這只是原始代價函數(shù)J的梯度下降。該方法在每個步驟中查看整個訓練集中的每個示例,并稱為*批量梯度下降。 請注意,雖然梯度下降一般易受局部最小值的影響,但我們在線性回歸中提出的優(yōu)化問題只有一個全局,而沒有其他局部最優(yōu)。 因此,梯度下降總是收斂(假設學習率α不是太大)到全局最小值。 實際上,J是凸二次函數(shù)。下面是梯度下降的示例,因為它是為了最小化 二次函數(shù)而運行的。

上面顯示的橢圓是二次函數(shù)的輪廓。 還示出了梯度下降所采用的軌跡,其在(48,30)處初始化。 圖中的x(由直線連接)標記了當它收斂到其最小值過程中漸變下降經(jīng)歷的連續(xù)值θ。
- 矩陣和向量
矩陣是二維數(shù)組;向量是一個包含一列和多行的矩陣,因此,向量是矩陣的子集。
符號和術語:
1.Aij指矩陣A的第i行和第j列中的元素。
2.具有'n'行的向量被稱為'n'維向量。
3.vi指向量的第i行中的元素。
4.通常,我們所有的向量和矩陣都是1索引的。 請注意,對于某些編程語言,數(shù)組是0索引的。
5.矩陣通常用大寫名稱表示,而向量是小寫。
6.“標量”表示對象是單個值,而不是向量或矩陣。
7.R是指一組標量實數(shù)。
8.Rn指實數(shù)的n維向量集。
9.運行下面的單元格以熟悉Octave / Matlab中的命令。 隨意創(chuàng)建矩陣和向量,并嘗試不同的東西。
% The ; denotes we are going back to a new row.
A = [1, 2, 3; 4, 5, 6; 7, 8, 9; 10, 11, 12]
% Initialize a vector
v = [1;2;3]
% Get the dimension of the matrix A where m = rows and n = columns
[m,n] = size(A)
% You could also store it this way
dim_A = size(A)
% Get the dimension of the vector v
dim_v = size(v)
% Now let's index into the 2nd row 3rd column of matrix A
A_23 = A(2,3)
- 加法和標量乘法
加法和減法是逐元素的,因此您只需添加或減去每個相應的元素:

減去矩陣:

要添加或減去兩個矩陣,它們的尺寸必須相同。
在標量乘法中,我們簡單地將每個元素乘以標量值:

在標量除法中,我們只需將每個元素除以標量值:

- 矩陣向量乘法
我們將矢量列映射到矩陣的每一行,將每個元素相乘并對結果求和。

結果是一個向量。 矩陣的列數(shù)必須等于向量的行數(shù)。
m×n矩陣乘以n×1向量導致m×1向量。
- 矩陣 - 矩陣乘法
我們將兩個矩陣乘以幾個向量乘法并將結果連接起來。

m×n矩陣乘以n×o矩陣得到m×o矩陣。 在上面的例子中,3×2矩陣乘以2×2矩陣產(chǎn)生3×2矩陣。
為了乘以兩個矩陣,第一矩陣的列數(shù)必須等于第二矩陣的行數(shù)。
- 矩陣乘法屬性
1.矩陣不是可交換的:AB ≠ B
2.矩陣是關聯(lián)的:(AB)C = A(BC)
單位矩陣乘以相同維度的任何矩陣時,得到原始矩陣。 這就像是將數(shù)字乘以1。單位矩陣在對角線上只有1個(左上角到右下角),而0在其他地方。

當在一些矩陣(A * I)之后乘以單位矩陣時,方形單位矩陣的維度應該與其他矩陣的列匹配。 當在一些其他矩陣(I * A)之前乘以單位矩陣時,方形單位矩陣的維度應該與其他矩陣的行匹配。
- 反轉和轉置
矩陣A的逆矩陣表示為 A-1。乘以單位矩陣的逆結果。
非方矩陣不具有逆矩陣。 我們可以用pinv(A)函數(shù)計算八度矩陣的逆,用Matlab和inv(A)函數(shù)計算矩陣的逆。 沒有逆的矩陣是奇異的或簡并的。
矩陣的轉置就像將矩陣沿順時針方向旋轉90°然后將其反轉。我們可以使用轉置(A)函數(shù)或A'計算matlab中矩陣的轉置:


即:

A*inv(A) = I