讓咱們以預測住房價格的例子開始:首先要使用一個數據集,數據集包含不一樣房屋尺寸所售出的價格,根據數據集畫出個人圖表。比方說,若是你朋友的房子是 1250 平方尺大小,你要告訴他們這房子能賣多少錢。那麼,你能夠作的一件事就是構建一個模型,也許是條直線,從這個數據模型上來看,也許你能夠告訴你的朋友,他能以大約220000(美圓)左右的價格賣掉這個房子。這就是監督學習算法的一個例子。html
總結來講,須要作的就是利用數據集中的數據,找出能夠描述該數據集中輸入和輸出的關係的數學模型。在程序中咱們要首先設定這麼一個函數h(假設函數)。算法
咱們將要用來描述這個迴歸問題的標記以下:微信
𝑚 ——表明訓練集中實例的數量機器學習
𝑥 ——表明特徵/輸入變量函數
𝑦 ——表明目標變量/輸出變量 學習
(𝑥, 𝑦) —— 表明訓練集中的實例 spa
(𝑥(𝑖), 𝑦(𝑖)) ——表明第𝑖 個觀察實例 3d
h ——表明學習算法的解決方案或假設函數(hypothesis) htm
對於只有一個輸入的問題,咱們能夠將h表達爲:ℎ𝜃(𝑥) = 𝜃0 + 𝜃1𝑥。只含有一個特徵/輸入變量的問題叫作單變量線性迴歸問題。blog
由上節可知,問題的核心在於找到一種能夠描述數據集中輸入和輸出的關係的數學模型,即求解假設函數ℎ𝜃(𝑥) = 𝜃0 + 𝜃1𝑥。求解假設函數要作的就是爲該函數選擇合適的參數(parameters)𝜃0 和 𝜃1。咱們選擇的參數決定了咱們獲得的直線相對於咱們的訓練集的準確程度,模型所預測的值與訓練集中實際值之間的差距(下圖中藍線所指)就是建模偏差(modeling error)。
咱們的目標即是選擇出可使得建模偏差的平方和可以最小的模型參數。 即便得代價函數最小。找到了最小的代價函數,就找到了最能準確表達輸入和輸出之間關係的數學模型。
對於代價函數J,咱們能夠繪製出選擇不一樣的參數𝜃0 和 𝜃1時,J的等高線圖。從圖中能夠看出,在三維空間中存在一個使得𝐽(𝜃0, 𝜃1)最小的點。
可是,繪出圖形而後人工的方法來讀出這些點的數值,找到最小的J,顯然是個很麻煩的辦法。所以須要找到一種算法,能夠自動找到能使代價函數J最小化的參數𝜃0和𝜃1的值。梯度降低算法就是一種較好的選擇。
梯度降低的思想:
批量梯度降低(batch gradient descent)算法的公式爲:
其中𝑎是學習率(learning rate),它決定了咱們沿着能讓代價函數降低程度最大的方向向下邁出的步子有多大。
值得注意的是:parameters:𝜃0, 𝜃1, . . . , 𝜃𝑛要同時更新。
梯度降低的算法以下:
描述:對𝜃賦值,使得𝐽(𝜃)按梯度降低最快方向進行,一直迭代下去,最終獲得局部最小值。其中𝑎是學習率(learning rate),它決定了咱們沿着能讓代價函數降低程度最大的方向向下邁出的步子有多大。
經過上圖對梯度降低的過程進行理解:①若是函數處於降低趨勢,則代價函數J的偏導數爲負數,減去一個負數等於加上一個正數,那麼𝜃的值就會變大,隨着𝜃的變大,代價函數J逐漸減少,達到了下降J的目的;
②若是函數處於上升趨勢,則代價函數J的偏導數爲正數,減去一個正數,那麼𝜃的值就會變小,隨着𝜃的變小,代價函數J逐漸減少,一樣也達到了下降J的目的。
再來看看學習率𝑎:①若𝑎過小,那麼數據的挪動很是細緻,一樣也很是慢,須要不少步才能到達最低點。②若是𝑎太大,那麼梯度降低法可能會越過最低點,甚至可能沒法收斂,甚至發散。
將梯度降低應用在線性迴歸中,具體的程序實現爲:
%單變量線性迴歸中的梯度降低 for iter = 1:num_iters theta = theta-alpha*(1/m)*X'*((theta'*X')'-y); %求解參數𝜃 J_history(iter) = computeCost(X, y, theta); %計算代價函數J end
以上,就是吳恩達機器學習課程第二章的主要內容。