1. 程式人生 > >機器學習,瞭解一下?

機器學習,瞭解一下?

1. 為什麼要學?

老師上課時候就說過:傳統演算法解決確定性問題,而機器學習解決非確定性問題。

好吧,確實激起了我的興趣,所以系統學習一下吧。

文章圖片來源於 GitHub,網速不佳的朋友請點我看原文

順便軟廣一下個人技術小站:godbmw.com。歡迎常來♪(^∇^*)

2. 機器學習演算法

機器學習演算法和普通演算法還是有很大區別的。它不要求百分之百準確,並且對數學要求較高。

我認為重點有幾下 4 點:

  1. 理解演算法原理
  2. 應用實際場景
  3. 進行對比試驗
  • 不同演算法對比
  • 同一演算法不同引數對比

難點有幾下幾點:

  1. 如何評價演算法好壞
  2. 解決擬合和過擬合
  3. 如何正確調參
  4. 如何驗證演算法正確性

3. 可以解決什麼問題?

有些演算法既可以處理分類、也可以處理迴歸任務,而在一些情況下,迴歸任務可以簡化為分類任務,以方便問題解決。

3.1 分類任務

常見的有分類任務有 2 分類和多分類任務,並且兩者之間可以轉化。

比如 AlphaGo 下圍棋,可以理解成一個多分類任務:因為是在選擇棋盤上的落子點。除此之外,推箱子游戲:可能有 2-4 個方向提供選擇,也可以理解成分類任務。

3.2 多標籤分類

而在 ML 前沿領域,實現了多標籤分類:不再單純的是一個分類,而是擁有多個標籤。

例如下面這張含有多個標籤的圖片,多標籤會讓機器對它的定位更準確:

3.3 迴歸任務

機器獲得結果是一個連續的數字的值,而不是一個類別。連續的值可以劃分為無限多個小的點(可以理解成無限多個類別),又怎麼能處理成類別呢。

4. 演算法分類

4.1 監督學習

交給演算法的訓練資料已經被打了“標籤”,或者已經給出了分類。訓練後的演算法可以給新的資料打標籤或者分類。

因此,監督學習的訓練資料需要大量的人力來進行標記。

當然,在一些領域已經積累了一些被標記的資料資訊,例如大型部落格平臺,對每篇部落格都有分類和標籤。這種時候,監督學習的人力成本基本就是 0 了。

4.2 非監督學習

給機器的訓練資料沒有任何“標籤”,或者分類。訓練後的演算法仍然可以給新的資料打標籤或者分類。

經常聽到的演算法,就有聚類分析,比如每個使用者都被電商平臺劃分到某一使用者群體。

另一個非常重要的用途,是對資料進行降維處理:

  1. 特徵提取:提取重要的特徵,去除不重要的特徵。防止噪聲影響特徵提取
  2. 特徵壓縮:在保證資料資訊不被過多損害的情況下,將高維向量壓縮成低維向量,例如 PCA 演算法。在保證穩定性的情況下,提高處理速度。

另一個非常重要的用途:異常檢測。如下圖所示。以方便演算法發現一般性特徵和規律

4.3 半監督學習

一部分資料有“標籤”或分類,另一部分並沒有。

此時,一般通過無監督學習手段對資料進行處理,之後使用監督學習做模型的訓練和預測。

4.4 增強學習

根據周圍環境,採取行動,再根據行動結果,改善學習行動方式。

如下圖所示,agent 使我們的演算法,當他執行後,會根據環境反饋來執行獎賞或者懲罰,再改進行為模式。迴圈往復。

而 AlphaGo、自動駕駛等前言機器人,都使用了增強學習。

5. 更多演算法分類

5.1 批量學習和線上學習

批量學習是指:演算法一旦根據資料訓練出模型後,不會接受新的資料來優化模型。線上學習是指:演算法執行的過程中,也會把吸收新資料進行模型訓練。

優缺點顯而易見,前者更省心,但是無法適應資料快速變化的場景;後者可以及時針對不同的資料來優化模型,但是容易受到新資料中垃圾資料影響。

5.2 非引數學習和引數學習

引數學習是給出資料模型,剩下的工作就是利用演算法找出最合適引數。比如假定資料點符合y = ax + b的模型,剩下工作就是用最小二乘法之類的演算法找到(a,b)的最優解。

非引數學習相反,不對模型進行過多假設,不將問題理解成學習一些引數。

5. 學習資料