目錄
一、什麼是機器學習
機器學習是一門能夠讓編程計算機從數據中學習的計算機科學(和藝術)。
工程化定義:
一個計算機程序在完成任務T之後,獲得經驗E,其表現效果爲P,如果任務T的性能表現,也就是用以衡量的P,隨着E的增加而增加,可以稱之爲機器學習。
二、爲什麼要使用機器學習
(1)通過機器學習算法可以簡化那些現有解決方案需要大量手動調整或者規則列表超長的問題的代碼,並且提升執行表現;
- 比如用傳統編程技術編寫垃圾郵件過濾器
(2)解決傳統技術手段根本無法解決的複雜問題;
- 語音識別問題
(3)在環境波動中適應新的數據;
- 新寫法的垃圾郵件
(4)從複雜問題和海量數據中獲得洞見。
- 通過研究訓練效果優秀的學習算法的數據,瞭解人類沒有發現的數據中的關聯性或新趨勢
三、機器學習系統的種類
3.1 監督/無監督學習
標準:是否在人類的監督下訓練。
(1)監督學習
重要的監督學習算法:
- K-近鄰算法(KNN)
- 線性迴歸(LR)
- 邏輯迴歸(LR)
- 支持向量機(SVM)
- 決策樹和隨機森林(DT RF)
- 一部分神經網絡(NN)
(2)無監督學習
聚類算法(比如,檢測相似訪客的分組)
- K-平均算法(K-means)
- 層次聚類分析(HCA)
- 最大期望算法(EM)
可視化和降維(可視化,便於人理解數據怎麼組織)(降維,用來做特徵提取,減小數據所佔空間,提高速度,有可能提高性能)
- 主成分分析(PCA)
- 核主成分分析(Kernel PCA)
- 局部線性嵌入(LLE)
- t-分佈領域嵌入算法(t-SNE)
關聯規則學習(發現數據屬性間的聯繫:比如超市的商品)
- Apriori
- Eclat
3.2 半監督學習
- 大量未標記數據和少量已標記數據
- 大多數半監督算法採用無監督和監督算法結合
- 深度信念網絡(DBN)基於一種互相疊加的非監督組件(受限玻爾茲曼機),然後用監督學習進行微調
3.3 強化學習
學習系統,又稱爲智能體,能夠觀察環境,作出選擇,執行操作,並獲得回報,或者以負面回報的形式獲得懲罰。
- 比如:AlphaGo
3.4 批量學習與線上學習
標準:是否能從導入的數據流進行持續學習。
(1)批量學習
必須使用所有的可用數據進行訓練,一般採用離線學習的方式,即先訓練系統,然後將其投入生產環境,這時候學習過程停止,只是將所學的應用處理。只是每次更新數據的時候,重新訓練的成本較大。
(2)線上學習
又稱爲增量學習,持續接收數據流,並同時對數據流的變化做出快速或自主的反應,可以解決超大數據集的訓練問題。需要指出的是,整個訓練通常也是離線完成的,“在線學習”具有歧義性,稱爲增量學習更合適。
3.5 基於實例學習與基於模型的學習
是將新的數據和已知的數據進行匹配,還是對訓練數據進行模式檢測,進而建立預測模型。根據如何泛化來分類。
(1)基於實例的學習
將所有的訓練數據全部記住,然後根據某種相似度度量方式將其泛化到新的實例。
(2)基於模型的學習
構建符合訓練數據特徵的模型,然後根據模型來預測。
- 研究數據;
- 選擇模型;
- 用訓練數據進行訓練(即,學習算法搜尋模型參數值,使代價函數最小);
- 最後,使用模型對新案例進行預測(這稱作推斷),但願這個模型推廣效果不差。
四、機器學習的主要挑戰
4.1 訓練數據的數量不足
目前大部分機器學習算法都需要大量的數據才能正常工作(除非重用現有模型的某些部分)。
4.2 數據的不合理有效性
2001年,微軟有研究員表明,截然不同的機器學習算法(包括最簡單的算法)在自然語言歧義消除這個複雜問題的表現上,幾乎完全一致
這些數據表明,和算法開發上,數據的建設尤爲重要。
4.3 訓練數據不具代表性
如果有部分數據缺失,則會是模型的預測不準確。
五、過擬合和欠擬合
(1)過擬合
警告:過擬合發生在相對於訓練數據的量和噪聲,模型過於複雜的情況。可能的解決方案有:
- 簡化模型,可以通過選擇一個參數更少的模型(比如使用線性模型,而不是高階多項式模型)、減少訓練數據的屬性數、或限制一下模型
- 收集更多的訓練數據
- 減小訓練數據的噪聲(比如,修改數據錯誤和去除異常值)
(2)欠擬合
與過擬合相反,產生的原因是對於訓練數據來說,模型過於簡單,比如用線性模型預測幸福值,就屬於擬合不足,因爲實際情況顯然比這要複雜的多。
解決方式:
- 選擇一個更強大的模型,帶有更多參數
- 用更好的特徵訓練學習算法(特徵工程)
- 減小對模型的限制(比如,減小正規化超參數)
六、測試和驗證
瞭解一個模型對於新場景的泛化能力的唯一方法就是,讓模型真實的取處理新場景。
6.1 測試集
做法之一是將模型部署到新場景,然後監控它的輸出。但這樣如果模型效果不好,用和肯定會抱怨,所以這顯然不是最好的辦法。
更好的選擇是將數據分割成兩部分:訓練集和測試集。顧名思義,訓練集用來訓練模型,測試集用來測試模型,應對新場景的誤差率稱爲泛化誤差。通過測試集來評估模型,就可以得到對這個誤差的評估。這個評估可以知道模型在處理新場景的能力如何。 如果訓練誤差很低(模型對於訓練集很少出錯),但是泛化誤差很高,那說明模型對於訓練數據存在過度擬合。
通常採用2/8定律,20%用於測試,80%用於訓練。
6.2 交叉驗證
評估一個模型,可以採用測試集,那麼對於多個模型呢?(比如線性模型和多項式模型)
這時候,千萬不要用測試集去驗證,這樣仍然會出現過擬合。正確的做法是交叉驗證,通過將訓練機分成若干個互補的子集,然後將多個模型,在這些子集的不同組合進行訓練,再用剩下的子集進行驗證,從而選定最好的模型,最後再用測試集來測試泛化誤差。
七、沒有免費午餐公理
模型是觀察的簡化,這個簡化是丟棄了那些不大可能泛化到新實例上的多餘細節。要確定捨棄什麼數據、保留什麼數據,必須要做假設。例如,線性模型的假設是數據基本上是線性的,實例和模型直線間的距離只是噪音,可以放心忽略。
1996年,David Wolpert提到,如果沒有對數據做出假設,那麼就沒有理由更偏好於哪個模型,那麼想要知道哪個模型最好的方式,就是對所有模型進行評估。但實際上是不可能的,所以需要對數據做出一些合理的假設。
例如,對於簡單任務,你可能是用不同程度的正規化評估線性模型,對於複雜問題,你可能要評估幾個神經網絡模型。
八、總結
- 機器學習是讓機器通過學習數據對某些任務做得更好,而不使用確定的代碼規則;
- 有許多不同類型的機器學習系統:監督或非監督,批量或線上,基於實例或基於模型,等等;
- 在機器學習項目中,訓練集來收集數據,然後對學習算法進行訓練。如果算法是基於模型的,就調節一些參數,讓模型擬合到訓練集(即,對訓練集本身作出好的預測),然後希望它對新樣本也能有好預測。如果算法是基於實例的,就是用記憶學習樣本,然後用相似度推廣到新實例;
- 如果訓練集太小、數據沒有代表性、含有噪聲、或摻有不相關的特徵(垃圾進,垃圾出),系統的性能不會好。最後,模型不能太簡單(會發生欠擬合)或太複雜(會發生過擬合)。