機器學習,瞭解一下?
1. 為什麼要學?
老師上課時候就說過:傳統演算法解決確定性問題,而機器學習解決非確定性問題。
好吧,確實激起了我的興趣,所以系統學習一下吧。
文章圖片來源於 GitHub,網速不佳的朋友 請點我看原文 。
順便軟廣一下個人技術小站: godbmw.com 。歡迎常來♪(^∇^*)
2. 機器學習演算法
機器學習演算法和普通演算法還是有很大區別的。它不要求百分之百準確,並且對數學要求較高。
我認為重點有幾下 4 點:
- 理解演算法原理
- 應用實際場景
- 進行對比試驗
- 不同演算法對比
- 同一演算法不同引數對比
難點有幾下幾點:
- 如何評價演算法好壞
- 解決擬合和過擬合
- 如何正確調參
- 如何驗證演算法正確性
3. 可以解決什麼問題?
有些演算法既可以處理分類、也可以處理迴歸任務,而在一些情況下,迴歸任務可以簡化為分類任務,以方便問題解決。
3.1 分類任務
常見的有分類任務有 2 分類和多分類任務,並且兩者之間可以轉化。
比如 AlphaGo 下圍棋,可以理解成一個多分類任務:因為是在選擇棋盤上的落子點。除此之外,推箱子游戲:可能有 2-4 個方向提供選擇,也可以理解成分類任務。
3.2 多標籤分類
而在 ML 前沿領域,實現了 多標籤分類 :不再單純的是一個分類,而是擁有多個標籤。
例如下面這張含有多個標籤的圖片,多標籤會讓機器對它的定位更準確:

3.3 迴歸任務
機器獲得結果是一個連續的數字的值,而不是一個類別。連續的值可以劃分為無限多個小的點(可以理解成無限多個類別),又怎麼能處理成類別呢。
4. 演算法分類
4.1 監督學習
交給演算法的訓練資料已經被打了“標籤”,或者已經給出了分類。訓練後的演算法可以給新的資料打標籤或者分類。
因此,監督學習的訓練資料需要大量的人力來進行標記。
當然,在一些領域已經積累了一些被標記的資料資訊,例如大型部落格平臺,對每篇部落格都有分類和標籤。這種時候,監督學習的人力成本基本就是 0 了。
4.2 非監督學習
給機器的訓練資料沒有任何“標籤”,或者分類。訓練後的演算法仍然可以給新的資料打標籤或者分類。
經常聽到的演算法,就有聚類分析,比如每個使用者都被電商平臺劃分到某一使用者群體。
另一個非常重要的用途,是對資料進行降維處理:
- 特徵提取:提取重要的特徵,去除不重要的特徵。 防止噪聲影響特徵提取 。
- 特徵壓縮:在保證資料資訊不被過多損害的情況下,將高維向量壓縮成低維向量,例如 PCA 演算法。 在保證穩定性的情況下,提高處理速度。
另一個非常重要的用途:異常檢測。如下圖所示。 以方便演算法發現一般性特徵和規律 。
4.3 半監督學習
一部分資料有“標籤”或分類,另一部分並沒有。
此時,一般通過無監督學習手段對資料進行處理,之後使用監督學習做模型的訓練和預測。
4.4 增強學習
根據周圍環境,採取行動,再根據行動結果,改善學習行動方式。
如下圖所示,agent 使我們的演算法,當他執行後,會根據環境反饋來執行獎賞或者懲罰,再改進行為模式。迴圈往復。
而 AlphaGo、自動駕駛等前言機器人,都使用了增強學習。
5. 更多演算法分類
5.1 批量學習和線上學習
批量學習是指:演算法一旦根據資料訓練出模型後,不會接受新的資料來優化模型。線上學習是指:演算法執行的過程中,也會把吸收新資料進行模型訓練。
優缺點顯而易見,前者更省心,但是無法適應資料快速變化的場景;後者可以及時針對不同的資料來優化模型,但是容易受到新資料中垃圾資料影響。
5.2 非引數學習和引數學習
引數學習是給出資料模型,剩下的工作就是利用演算法找出最合適引數。比如假定資料點符合 y = ax + b
的模型,剩下工作就是用最小二乘法之類的演算法找到 (a,b)
的最優解。
非引數學習相反,不對模型進行過多假設,不將問題理解成學習一些引數。
5. 學習資料
- 線上課程:
Python3 入門機器學習 經典演算法與應用 - 書籍:《python 機器學習實戰》