# 3.1.1 餐車利潤問題 * 資料中,第一列為城市人口,第二列為個城市餐車利潤。以下程式從文字檔中讀取資料並輸出前五筆結果。 ```python= x, y = [], [] with open('food_truck_data.txt') as A: for eachline in A: s = eachline.split(',') x.append(float(s[0])) y.append(float(s[1])) for i in range(5): print(x[i], y[i]) ``` * 可以將人口作為x座標,餐車利潤作為y座標繪製資料集在二維平面上的分布情形。並藉此預測其他城市的餐車利潤。 # 3.1.2 機器學習與人工智慧 ## 機器學習 * 樣本特徵:x。 * 樣本標籤:y,也稱為真實值、目標值。 * 目標:根據一個數學模型(函數 y=f(x))來從樣本特徵預測目標值。 * 求解的過程即為訓練模型(尋找預測值和目標值的最小誤差)。 ## 機器學習的分類 * 監督式學習 * 需要訓練樣本 * 設計可以良好刻劃sample data <->sample label 關係的函數 * 選擇合理的損失函數,描述誤差。 * 訓練模型 * 使用模型 * 非監督式學習:自行尋找規律和答案 * 強化學習:與環境的經驗互動訓練。 # 3.1.3 什麼是線性回歸 * 以線性函數y = f(x) = wx + b 表示x和y的關係,參數不同,所表示的線性關係就不同。 * 以 f(i) 表示:令函數 f(x) 的預設值 f(x(i)) 。 * 方差 (f(i)-y(i))平方 表示單一樣本誤差,所有樣本的誤差則表為: ![image](https://hackmd.io/_uploads/rytFYIMqT.png) * L(w,b)為損失函數(誤差函數),模型訓練就是尋找最小參數w,b的解。 * 為簡化損失函數,可將等號右邊的式子除以2。 ![image](https://hackmd.io/_uploads/By3viIz5T.png) * 求參數w,b的最小值有兩種方法,分別是正規方程式法(3.1.4)和梯度下降法(3.1.5)。 # 3.1.4 用正規方程式法求解線性回歸問題 * 損失函數L(w,b)的偏導數如下,若滿足最小值,梯度等於0。 ![image](https://hackmd.io/_uploads/ByRZpLf5p.png) ![image](https://hackmd.io/_uploads/rkLBTIGcp.png) ![image](https://hackmd.io/_uploads/BJ7OpIzca.png) * W的正規方程式(Normal Equation)如下: ![image](https://hackmd.io/_uploads/rk59pIG5p.png) # 3.1.5 用梯度下降法求解線性回歸問題 * 正規方程式法需要計算矩陣的乘積和反矩陣,但若資料特徵或樣本數量過多,則耗時較長。因此一般用梯度下降法求解。 * 從(w0,b0)出發,以下列公式疊代更新: ![image](https://hackmd.io/_uploads/S1WpVDGcT.png) * 藉由計算疊代的參數損失可以繪製損失曲線,曲線應逐漸下降,即疊代是逐漸收斂的。反之有可能是程式存在問題或學習率不合適。 # 3.1.6 偵錯學習率 * 偵錯學習率的過程是以不同的學習率嘗試的過程。 * 學習率越小,疊代的次數越多,但若是學習率過大,則梯度前進時可能越過最佳解,導致代價是發散的。 # 3.1.7 梯度驗證 * 執行前,應進行梯度驗證,以保證梯度和函數值的計算正確。 * 對於線性回歸問題,應以下列梯度公式來檢驗: ![image](https://hackmd.io/_uploads/H1AXOwzcp.png) * 計算分析梯度 ```python= import numpy as np dw = np.mean((w*x+b-y)*x) db = np.mean((w*x+b-y)) ``` * 問題:學習率太大或太小會在尋求最小值的過程造成什麼問題?