機器學習的定義
“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.”
程序根據任務T和性能度量P對經驗E進行學習,它在以P衡量的任務T中,性能會隨着E增加。
機器學習的分類
監督學習和非監督學習(supervise learning & unsupervise learning)
- 監督學習是給定了正確答案的機器學習,又分類爲迴歸(regression)和分類(classification)兩種類型
- 非監督學習沒有給定結果和標籤,非監督學習不會對預測結果產生反饋,分爲聚類(cluster)和非聚類(non-cluster)兩種。
表示
vector表示向量,通常都是列向量,n×1的矩陣,如
數據縮放(scaling)
在使用梯度下降算法時需要使用數據縮放,在使用解方程的方法解決線性迴歸問題的時候不需要使用數據縮放
其實是一種正則化,使得每個特徵的取值範圍不至於相差過大。
其中,是平均值,是 最大值-最小值
梯度下降中學習率的選取
- 通過繪畫 迭代次數-誤差函數 圖來確定梯度下降算法是否出現問題
正常情況下,將會越來越小
- 如果學習率過大,算法通常不收斂,甚至誤差會越來越大
或者 - 如果學習率過小,則收斂速度非常慢
線性迴歸拓展爲多項式迴歸
線性迴歸的常規形式是,這其中的可以換成其他變量的非線性組合,比如等等。但是要記得對變量進行scaling,方法仍然是
參數優化的算法
除了最常見的梯度下降(gradient descend)之外,還有不少好的算法:
- Conjugate gradient 共軛梯度
- BFGS 被認爲是數值效果最好的擬牛頓法,並且具有全局收斂性和超線性收斂速度。
- L-BFGS 也就是Limited-memory BFGS
(這幾種優化算法的數學推導和實現較爲困難,但是不需要詳細瞭解也不妨礙使用,用就行了不需要自己去實現)
將二分類拓展爲多分類:One vs. All
這種方法的基本思想是:先將某一類作爲正例,剩下的類別統統作爲反例,這樣就得到一個二分類的情景,以此訓練一個分類器;然後將另一個類作爲正例,剩下的都作爲反例,以此類推,一共要訓練m個分類器(m爲所有的類別數)
一共有m=3個分類:
分別將class1、class2、class3作爲正例,剩下的作爲反例,訓練3個分類器
使用時,將測試樣本分別輸入3個分類器,選取使得分類器結果爲正例的概率最大的分類結果爲該測試樣本的分類。
過擬合問題
- underfit 欠擬合,也稱爲high bias
- overfit 過擬合,也稱爲high variance
過擬合:對訓練集擬合的非常好,但是對新數據的預測不好,無法泛化到新的數據集中。
過擬合的可能原因:
- 特徵太多而訓練數據太少
- 擬合函數(hypothesis)過於複雜
解決辦法:
- 減少特徵
- 更換模型算法
- 正則化(regularization) 保留所有的特徵變量,但是會減小特徵變量的數量級(參數數值的大小θ(j))
梯度量化
梯度是一個關於權重的函數,我們在進行梯度下降的時候,希望能知道梯度是否真的在下降,之前我們採用可視化代價函數值的方式,但是代價函數值在下降並不意味着梯度真的在下降,因此有必要將梯度可視化。
採用近似的方法:
通常取量級的數。
網絡結構的選取
- 輸入層的節點數是訓練數據的特徵數
- 輸出層的節點是是分類的類別數
- 隱藏層通常都是一層,也可以選取多層,每層具有同樣數量的節點,一般來說,層數越多,性能越好,但是計算花銷就更大。
確定模型之後的優化策略
- 更多的訓練數據
- 增加/減少特徵數量
- 增加多項式特徵()
- 增大/減小正則化項參數
訓練集與測試集
-
一般來說,訓練集:測試集=7:3
最好先進行隨機排序,保持訓練集的數據與測試集的數據相差不至於太大 -
另一種劃分方法:
訓練集:驗證集:測試集=6:2:2
爲什麼要加入驗證集:假如我們有多個模型,需要選擇一個,我們在訓練集訓練之後如果直接用測試集來測,那麼其實這之中多了一個參數:模型的不同。別忘了我們的測試集是爲了檢測最終模型的泛化誤差的,不應該讓模型見過多餘的知識(其他參數)。所以我們要引入驗證集,用來選擇其中最合適的模型/參數集。通常,驗證集的誤差要比測試集的誤差要 小(因爲驗證集多了一個參數:模型的不同)
偏差與方差
偏差(bias):是指模型的期望值值與真實值之間的差,描述一個模型的擬合能力。偏差通常是由欠擬合造成的。
方差(variance):是指模型的期望值與預測值之間的差的平方,描述一個模型的穩定性。方差通常是由過擬合造成的。
如圖,如果訓練誤差高,驗證集誤差高->偏差大,欠擬合
訓練誤差低,驗證集誤差高->方差大,過擬合
與正則化的關係:
正則項越大,在訓練集上擬合的越差,偏差就越高,但是方差越小。
正則項越小,在訓練集上擬合的越好,偏差就越低,但是方差越大。
大致如下圖:
解決機器學習項目的一般過程
- 快速的構建一個簡單的算法,實現它,然後將它在驗證集上測試。
- 畫學習曲線,決定是需要添加更多的特徵還是更多的訓練數據。
- 挑選出那些預測錯誤的數據,手動分析,以添加特定的特徵解決這些問題。
一個很重要的點是要將錯誤率進行量化,也就是要算出當前的特徵以及參數下這個模型的錯誤率是多少,進行調整之後的錯誤率又是多少,這樣能很直觀的知道對模型的改進是否有用。
準確率與召回率
混淆矩陣:
- 準確率是指:在預測爲class=1的樣本中,有多少個是真的爲class=1
$$
precision=\frac{true ; positive}{true ; positive + false ; positive}
$$
- 召回率是指:在所有class=1的樣本中,預測出了其中的多少個
幾個問題
- 數據集的規模對過擬合/欠擬合有影響嗎?
大量的數據集可以改善過擬合(防止過擬合),但是小的數據集影響不了過擬合。 大量的數據集對欠擬合問題沒有幫助,小個數據集對欠擬合問題也沒有幫助。
- 在邏輯迴歸的模型中,由線性函數通過sigmoid函數轉換成output的時候,閾值一定要設爲0.5嗎(也就是使=0.5作爲output y=1或y=0的界限)?
不一定,雖然一般情況下是以0.5作爲閾值,但是這不是硬性規定的,可以按照對精確率(precision)和召回率(recall)的特殊要求進行調整。影響效果如下:當閾值>0.5時,精確率提高,但是召回率下降;當閾值<0.5時,準確率下降,但是召回率提高。
- 精確率(precision)和準確率(accuracy)是同一個東西嗎?
不是同一個東西,精確率是指在預測爲1的例子中實際上爲1的比值有多少,準確率是指所有的預測中預測正確的比值是多少,他們的公式如下: