06.08 入門機器學習,看這一篇就夠了

引言

可能你對這個名字叫

“機器學習”的傢伙不是特別的瞭解,但是相信用過iPhone的同學都知道iPhone的語音助手Siri,它能幫你打電話,查看天氣等等;相信大家尤其是美女童鞋都用過美顏相機,它能自動化的給我們拍出更漂亮的照片;逛京東淘寶的時候,細心的童鞋應該也會發現它們會有一個欄目“猜你喜歡”;最近異軍突起的新聞客戶端軟件今日頭條,它們就是會根據分析你的日常喜好給每個人推薦不同的新聞……沒錯,這些功能背後的核心就是今天要介紹的主題:機器學習

什麼是機器學習

對於這個問題的解釋,說實話我很有壓力,因為在分享篇文章之前就有朋友告訴我,這個百度上一搜一大片,還需要你講嗎?但是,我覺得並非如此。正如同一千個讀者眼裡有一千個林黛玉一樣,我解釋的當然是我個人自從讀研到工作這麼多年對機器學習的學習到應用過程的獨特見解。

首先我們看下圖瞭解一下機器學習在AI(Artificial Intelligence 人工智能)領域的地位。在圖中,我們可以看到,機器學習是人工智能的一個子領域。而現在火的不要不要的 深度學習

其實是機器學習的一個子分支。

入門機器學習,看這一篇就夠了

機器學習在人工智能中的地位

那麼到底什麼才是真正的機器學習呢?在這裡我將對比我和學術界大神的解釋:

大神的解釋

  • 機器學習研究的是計算機怎樣模擬人類的學習行為,以獲取新的知識或技能,並重新組織已有的知識結構使之不斷改善自身。簡單一點說,就是計算機從數據中學習出規律和模式,以應用在新數據上做預測的任務。

我的解釋

  • 傳統的機器學習主要做的事情就是利用統計學的基本觀點,利用要學習的問題的歷史樣本數據的分佈對總體樣本分佈進行估計。分析數據大致特性建立數學分佈模型,並利用最優化的知識對模型的參數進行調優學習,使得最終的學習模型能夠對已知樣本進行很好的模擬與估計。最終利用學習好的模型對未知標籤的樣本進行預測和估計的過程。

但是越說越覺得機器學習有距離感,雲裡霧裡高深莫測,我們不是專家,但說起算有一些從業經驗,做過一些項目在實際數據上應用機器學習。這一篇就我們的經驗和各位同仁的分享,總結一些對於初學者入門有幫助的方法和對進階有用的資料。

機器學習的基本問題

對於機器學習中的基本問題,我們將從以下幾個角度進行講解:機器學習的特點;機器學習的對象;機器學習的分類;機器學習的要素;模型的評估與選擇。

機器學習的特點

機器學習主要特點如下:

  1. 機器學習以數據為研究對象,是數據驅動的科學;
  2. 機器學習的目的是對數據進行預測與分析;
  3. 機器學習以模型方法為中心,利用統計學習的方法構建模型並且利用模型對未知數據進行預測和分析;
  4. 統計學習是概率論、統計學、信息論、計算理論、最優化理論以及計算機科學等多領域的交叉學科,並且逐漸形成自己獨自的理論體系和方法論。
入門機器學習,看這一篇就夠了

機器學習的一般訓練過程

機器學習的對象

機器學習研究的對象是多維向量空間的數據。它從各種不同類型的數據(數字,文本,圖像,音頻,視頻)出發,提取數據的特徵,抽象出數據的模型,發現數據中的知識,又回到數據的分析與預測中去。

機器學習的分類

對於機器學習的分類,絕大多數人只簡單的分為有監督學習和無監督學習這兩類。嚴格意義上來講應該分為四大類:有監督學習無監督學習半監督學習強化學習。下面對這四種學習做一下簡要的介紹:

  • 有監督學習

有監督學習是指進行訓練的數據包含兩部分信息:特徵向量 + 類別標籤。也就是說,他們在訓練的時候每一個數據向量所屬的類別是事先知道的。在設計學習算法的時候,學習調整參數的過程會根據類標進行調整,類似於學習的過程中被監督了一樣,而不是漫無目標地去學習,故此得名。

  • 無監督學習

相對於有監督而言,無監督方法的訓練數據沒有類標,只有特徵向量。甚至很多時候我們都不知道總共的類別有多少個。因此,無監督學習就不叫做分類,而往往叫做聚類。就是採用一定的算法,把特徵性質相近的樣本聚在一起成為一類。

  • 半監督學習

半監督學習是一種結合有監督學習和無監督學習的一種學習方式。它是近年來研究的熱點,原因是在真正的模型建立的過程中,往往有類標的數據很少,而絕大多數的數據樣本是沒有確定類標的。這時候,我們無法直接應用有監督的學習方法進行模型的訓練,因為有監督學習算法在有類標數據很少的情況下學習的效果往往很差。但是,我們也不能直接利用無監督學習的方式進行學習,因為這樣,我們就沒有充分的利用那些已給出的類標的有用信息。

入門機器學習,看這一篇就夠了

典型半監督訓練過程

  • 強化學習

所謂強化學習就是智能系統從環境到行為映射的學習,以使獎勵信號(強化信號)函數值最大,強化學習不同於連接主義學習中的監督學習,主要表現在教師信號上,強化學習中由環境提供的強化信號是對產生動作的好壞作一種評價(通常為標量信號),而不是告訴強化學習系統RLS(reinforcement learning system)如何去產生正確的動作。由於外部環境提供的信息很少,RLS必須靠自身的經歷進行學習。通過這種方式,RLS在行動-評價的環境中獲得知識,改進行動方案以適應環境。

機器學習的要素

簡單地說,機器學習的三要素就是:模型、策略和算法。

  • 模型 其實就是機器學習訓練的過程中所要學習的條件概率分佈或者決策函數。
  • 策略 就是使用一種什麼樣的評價度量模型訓練過程中的學習好壞的方法,同時根據這個方法去實施的調整模型的參數,以期望訓練的模型將來對未知的數據具有最好的預測準確度。
  • 算法 算法是指模型的具體計算方法。它基於訓練數據集,根據學習策略,從假設空間中選擇最優模型,最後考慮用什麼樣的計算方法去求解這個最優模型。

入門方法與學習路徑

總的來說,機器學習的學習門檻還是蠻高的。當然,也得看你的目標是什麼了。如果你的目標只是為了用機器學習的一些算法解決一些簡單的分類迴歸問題,那麼其實也不難。但是,如果你的目標是成為機器學習科學家,提出並改進一些算法的新的應用場景或者是算法的執行性能的話,那麼你的學習難度和學習週期必定是很艱辛和漫長的。

本文對所有的讀者的假設是前者,因此我們也制定了與機器學習科學家不一致的學習道路。大致的學習過程如下圖所示:

入門機器學習,看這一篇就夠了

機器學習的入門過程

對於上圖,之所以最左邊寫了『數學基礎』 『經典算法學習』 『編程技術』 三個並行的部分,是因為機器學習是一個將數學、算法理論和工程實踐緊密結合的領域,需要紮實的理論基礎幫助引導數據分析與模型調優,同時也需要精湛的工程開發能力去高效化地訓練和部署模型和服務。

在互聯網領域從事機器學習的人基本上屬於以下兩種背景:其中絕大部分是程序員出身,這類童鞋工程經驗相對會多一些;另一部分是學數學統計領域的,這部分童鞋理論基礎相對紮實一些。因此對比上圖,這二類童鞋入門機器學習,所欠缺和需要加強的部分是不一樣的。

下面就從三個基本技能講起。

數學基礎

曾經有無數的滿懷激情,誓要在機器學習領域有一番作為的同學,在看到公式的一刻突然就覺得自己狗帶了。是的,機器學習之所以門檻高並且顯得高大上的主要原因就是數學。每一個算法,要在訓練集上最大程度擬合同時又保證泛化能力,需要不斷分析結果和數據,調優參數,這需要我們對數據分佈和模型底層的數學原理有一定的理解。所幸的是如果只是想合理應用機器學習,而不是做相關方向高精尖的研究,所需要的數學知識讀完本科的理工科童鞋還是能很容易的把這些數學知識學明白的。

基本所有常見機器學習算法需要的數學基礎,都集中在微積分、線性代數和概率與統計當中。下面我們先過一過知識重點,文章的後部分會介紹一些幫助學習和鞏固這些知識的資料。

微積分

微分的計算及其幾何、物理含義,是機器學習中大多數算法的求解過程的核心。比如算法中運用到梯度下降法、牛頓法等。如果對其幾何意義有充分的理解,就能理解“梯度下降是用平面來逼近局部,牛頓法是用曲面逼近局部”,能夠更好地理解運用這樣的方法。

凸優化和條件最優化的相關知識在算法中的應用隨處可見,如果能有系統的學習將使得你對算法的認識達到一個新高度。

入門機器學習,看這一篇就夠了

梯度下降法示意圖

線性代數

大多數機器學習的算法要應用起來,依賴於高效的計算,這種場景下,程序員童鞋們習慣的多層for循環通常就行不通了,而大多數的循環操作可轉化成矩陣之間的乘法運算,這就和線性代數有莫大的關係了。向量的內積運算更是隨處可見。矩陣乘法與分解在機器學習的主成分分析(PCA)和奇異值分解(SVD) 等部分呈現刷屏狀地出現。

入門機器學習,看這一篇就夠了

奇異值分解過程示意圖

概率與統計

從廣義來說,機器學習在做的很多事情,和統計層面數據分析和發掘隱藏的模式,是非常類似的。

極大似然思想、貝葉斯模型 是理論基礎,樸素貝葉斯(NaiveBayes)、語言模型(Ngram)、隱馬爾科夫(HMM)、隱變量混合概率模型是他們的高級形態。常見分佈如高斯分佈是混合高斯模型(GMM)等的基礎。

入門機器學習,看這一篇就夠了

樸素貝葉斯算法的基本原理

經典算法學習

絕大多數平常的應用中,經典的機器學習算法就能夠解決其中絕大多數的問題。因此,對機器學習經典算法的學習和掌握是相當有必要的。

接下來我們會分門別類的介紹一下:

  • 分類算法: 邏輯迴歸(LR),樸素貝葉斯(Naive Bayes),支持向量機(SVM),隨機森林(Random Forest),AdaBoost,GDBT,KNN,決策樹……
  • 迴歸算法: 線性迴歸(Linear Regression),多項式迴歸(Polynomial Regression),逐步迴歸(Stepwise Regression),嶺迴歸(Ridge Regression),套索迴歸(Lasso Regression)
  • 聚類算法: K均值(K-Means),譜聚類、DBSCAN聚類、模糊聚類、GMM聚類、層次聚
  • 降維算法: PCA(主成分分析)、SVD(奇異值分解)
  • 推薦算法:
    協同過濾算法

在這裡,我還是希望解釋一下 算法 這個概念在不同的地方出現的意義給廣大的讀者帶來的疑惑。本文介紹的機器學習算法和我們程序員所說的“數據結構與算法分析”裡的算法略有不同。前者更關注結果數據的召回率、精確度、準確性等方面,後者更關注執行過程的時間複雜度、空間複雜度等方面。 當然,實際機器學習問題中,對效率和資源佔用的考量是不可或缺的。

編程技術

技術選擇

編程技術無非是語言和開發環境了。在此,對初入門學習機器學習的小白童鞋來說,我的個人建議是:Python + PyCharm。如下圖所示是他們的Logo。

入門機器學習,看這一篇就夠了

Python 與 PyCharm 軟件示意圖

語言和工具選擇好了,對於小白來說,我們當然使用成熟的機器學習庫。那麼對於python機器學習來說,毫無疑問我們選擇的是scikit-learn。

軟件安裝

關於在Windows下安裝python和scikit-learn的方法步驟,請參閱我的CSDN博客Windows下安裝Scikit-Learn。對於PyChram的下載,請點擊PyCharm官網去下載,當然windows下軟件的安裝不用解釋,傻瓜式的點擊下一步就行了。

實戰操作

  • 創建項目
  • 打開 PyCharm,點擊 Create New Project
入門機器學習,看這一篇就夠了

  • 接下來選擇Pure Python,並選擇程序目錄同時設置項目名稱為 MLDemo,點擊右下角的 Create
入門機器學習,看這一篇就夠了

  • 在生成的項目MLDemo 上右擊,依次選擇 New —> Python,命名
    MLDemo
入門機器學習,看這一篇就夠了

  • 編寫如下代碼,然後右擊代碼區,點擊 Run MLDemo
入門機器學習,看這一篇就夠了

入門機器學習,看這一篇就夠了

  • 對運行結果進行解釋
入門機器學習,看這一篇就夠了

源程序調用了sklearn包的svm類,用於後續程序的分類器是訓練:

入門機器學習,看這一篇就夠了

你是否真的準備好了?

說完了機器學習的入門過程,我得給大家潑點冷水。雖然說目前AI真的很火熱,就在剛剛,我寫累了休息看新聞的時候就有新聞推送給我:商湯科技B輪融資4.5億美元。這場革命是機遇,但是它真的適合你嗎?我可以很肯定的說,並不是所有人都適合轉行AI。

下面是的總結,想轉行的人可以自我對照:

  1. 如果你天生感覺學習數學很吃力,並且代碼能力很一般的人。我可以很負責人的告訴你,轉行AI,學習機器學習算法將會是你人生的災難。對於這類 猿友 你一定不能轉行AI;
  2. 如果你數學一般,但是編程能力非常好,你曾經有著用代碼改變世界的雄心。對於這一類 猿友 ,我覺得你轉行也行,但是你一定要走應用化的AI道路。因為數學是你的天花板,你註定成不了 Hinton 那樣的學術大牛;
  3. 如果你數學很好,但是編程薄弱。恭喜你,你具備了轉行AI的先天優勢。對於這類 猿友,我覺得你可以轉行AI,但是你得努力把編程水平提上來。
  4. 如果你數學很牛,曾經與菲爾茲獎擦肩而過,曾經給Apache頂級項目貢獻N萬行核心代碼。恭喜你,AI領域需要的就是你,你就是未來的
    Hinton吳恩達……

參考文獻:

  1. 李航. 統計學習方法[M]. 清華大學出版社, 2012.
  2. 周志華. 機器學習 : = Machine learning[M]. 清華大學出版社, 2016.
  3. Windows下安裝Scikit-Learn
  4. Scikit-learn實戰之SVM分類


分享到:


相關文章: