Scikit-Learn & TensorFlow機器學習實用指南(一):機器學習概覽

機器學習實用指南(一):機器學習概覽

作者:LeonG
本文參考自:《Hands-On Machine Learning with Scikit-Learn & TensorFlow 機器學習實用指南》,感謝中文AI社區ApacheCN提供翻譯。

1. 什么是機器學習?

對于一個問題,我們有很多的解決方法,但是對于同一類型的問題難道我們都要自己來手動解決嗎?如果沒有一套完整的解決方案,問題會變得很復雜,比如垃圾郵件分類問題。

人可以識別什么是垃圾郵件,所以我們為郵件編寫一個分類規則,比如出現限時促銷 、在線賭場等字樣,我們就可以把它歸為垃圾郵件,這種方法稱為傳統方法

但是這樣的結果就是:規則越來越復雜,錯誤率也很高,那有什么辦法讓計算機自己分析郵件呢?

機器學習可以解決上述問題

我們先來看一下專家是怎么定義機器學習的:

機器學習是通過編程讓計算機從數據中進行學習的科學(和藝術)。

機器學習是讓計算機具有學習的能力,無需進行明確編程。 —— 亞瑟·薩繆爾,1959

計算機程序利用經驗 E 學習任務 T,性能是 P,如果針對任務 T 的性能 P 隨著經驗 E 不斷增 長,則稱為機器學習。 —— 湯姆·米切爾,1997

這是我個人的理解:計算機使用某種算法對已有的數據進行學習,并能夠分析新的數據得出合適的結論。

假設有一道初中數學題,那么初中生是怎么解決這道題目的?我們看看他的學習方式:

先找來已經解決過的類似的題目,然后把這些題目做出來,邊做邊總結方法,最后用總結出來的方法解決未知的題目。

將上圖類比到機器學習,紅色箭頭就是人類需要手動做的事情,尋找數據集,測試算法模型的準確度,而黑色箭頭則是機器學習自動完成的部分,自動分析數據,自動優化算法模型。

再將這個例子和機器學習做一個類比:

根據這兩幅圖,我們可以做出總結:

計算機通過數據來優化算法模型,優化后的算法模型用于解決新的實際問題。

那么,對于機器學習來說,最重要的兩個關鍵點就是: 數據 + 算法,機器學習和人類一樣,既需要足夠多的數據(知識),也需要良好的算法(學習方法)。

回到開頭的問題,那么相較于傳統的方法,機器學習的好處有哪些?

機器學習四大優勢:

  • 簡化程序

    機器學習省略了復雜的規則編寫,只需要設計出合理的算法,并給出合適的數據集,機器學習就能提供一個效果很好的算法模型。

  • 自主學習

    機器學習可以自動的學習,通過不斷的輸入數據,調整自己的參數,這一切都不需要人手動干預。

  • 泛化能力

    傳統的方法遇到了新的問題必須自己更新規則和計算方法,工作量很大。而機器學習可以自動學習新的規則。

  • 數據挖掘

    機器學習能夠分析出數據對結果的影響,而且能將隱藏的聯系展現出來,比如當地房價和政府對城市環保的投資力度有關。人很難分析出這種隱含的關系,而機器學習可以幫助我們。

2. 機器學習的類型

機器學習按照不同的標準可以分為很多種類,我們按照三種方式將其分類:

  1. 是否在人類監督下進行訓練(監督,無監督,半監督和強化學習)
  1. 是否可以動態漸進學習(在線學習 vs 批量學習)
  1. 是否只是通過簡單地比較新的數據點和已知的數據點,或者是在訓練數據中進行模式識別,以建立一個預測模型,就像科學家所做的那樣(基于實例學習 vs 基于模型學習)

根據是否在人類監督下進行訓練的標準我們可以分為以下三種類型:

(1)監督學習

在監督學習的訓練過程中,訓練的數據都包含了標簽,那什么是標簽呢?

很好理解,我們還是拿初中生學習的例子來說。

如果把一本習題集比作我們要學習的數據,那么習題集后面的參考答案就是標簽,它為我們做題目指引了方向,做錯了就改正,做對了繼續下一題,這種學習就是監督學習。

而監督學習一般又分為一下兩類任務:

  • 分類

    顧名思義,就是通過學習已經分好的數據,對新的數據進行分類。比如垃圾郵件分類器,就是先輸入帶有是否為垃圾郵件標簽的郵件,讓計算機進行學習,再對沒有分類的郵件進行判斷。上面有示意圖。

  • 回歸

    回歸就是預測目標數值,比如我想通過研究戴爾筆記本不同型號的配置,比如cpu、內存、顯卡和它們定價之間的聯系,然后來預測最新款的筆記本價格在什么范圍內,這就是預測。

    預測new instance對應的value

(2)無監督學習

加了一個“無”字,意思就是沒有標簽咯?沒錯,無監督學習就是使用不帶標簽的數據進行學習。

這就奇怪了,如果做題目沒有答案給我參考,我怎么知道自己是不是做對了呢?

無監督學習中,數據是沒有標簽的或者是有一樣的標簽的。我們不知道數據的含義和作用,我們需要計算機自己進行分析和處理。

不用擔心看不懂,來看看無監督學習的幾個主要任務你就明白了。

  • 聚類

    聚類就是將數據自動分離成幾個部分,每個部分的內部都有相似之處。下面我們舉一個簡單的例子。

大家應該都喜歡看電影吧,一個人去看電影的孤獨想必大家都不想體會。假定你是一個大學生,那怎么樣才能在班上找到和自己興趣相投的電影愛好者呢?

我們可以收集一份班上同學的電影愛好表,然后按照大家的愛好信息將類型相近的同學分為一組,這樣我們就可以將所有的同學分成很多組,比如文藝片愛好者,動作片愛好者,科幻片愛好者。這就是一種聚類學習。

  • 降維

    降維就是剔除對數據影響較低的特征,優化數據的結構,減少數據的復雜度,還是舉一個例子。

你還是一個愛看電影的大學生,但是馬上要期末考了,不得不放下心愛的電影。由于你看電影上頭,所有的科目都還沒有復習,是不是要做一些取舍。

每一門課程對你來說重要程度肯定不一樣。比如影視鑒賞選修課,這一門聽學長說是穩過的,那我們就沒必要將精力集中在這門課上,可以從復習計劃中刪除。而高等數學成績直接影響了你整個大學生涯,所以我們要重視這門課。大學英語和專業英語是同類型課程,可以合并在一起學習。

這就是一種降維方法,將數據中不同的特征進行一些處理,分析哪些特征對結果的影響最大, 剔除對結果影響不大的特征,或者是將若干個特征進行合并,以便我們的算法更集中的分析重要的數據。

提示:在用訓練集訓練機器學習算法(比如監督學習算法)時,最好對訓練集進行降 維。這樣可以運行的更快,占用的硬盤和內存空間更少,有些情況下性能也更好。

  • 異常檢測

    我們常常使用無監督學習來分析數據里是否存在異常的數據,也就是不合群的數據。然后將這種數據剔除。

在正常的訓練過程中,遇到一個新的數據,我們也可以判斷這個數據是正常值還是異常值。

比如周末你閑賦在家,檢查了自己保存的所有電影票根,發現只有萬達影城的票特別貴,所以決定以后都不去萬達影城了。這就是異常檢測。

  • 關聯規則

    最后,另一個常見的非監督任務是關聯規則學習,它的目標是挖掘大量數據以找出數據特征之間的某些聯系

例如,寒假期間你在電影院打工,善于觀察的你發現買了爆米花的人大概率也會買可樂,因此你推薦老板將爆米花和可樂做成套餐出售,這就是關聯規則。

(3)半監督學習

一些算法可以處理部分帶標簽的訓練數據,通常是大量不帶標簽數據加上小部分帶標簽數據。這稱作半監督學習。

我們假設喜歡看電影的你,同時也愛收藏票根。有一次你在家整理電影票根,發現一部分票根上面的影城信息磨損了。我們按照小票的顏色和格式將不同的票根分類(這一步是無監督學習的方法),然后再看每一類中沒有磨損的票根上面的影城信息,就能推導出每張票來自哪個影城了。(這一步是監督學習的方法)

所以我們會發現:

多數半監督學習算法是非監督和監督算法的結合。

(4)強化學習

強化學習非常不同。學習系統在這里被稱為智能體(agent),可以對環境進行觀察,選擇和執行動作,獲得獎勵或懲罰。然后它必須自己學習哪個是最佳方法(稱為策略,policy),以得到長久的最大獎勵。策略決定了智能體在給定情況下應該采取的行動

AlphaGo就是強化學習的典型代表,它通過不斷的試錯,最后得出一套完整的圍棋制勝策略,打敗了人類的最高水平。

另一個用來分類機器學習的準則是,它是否能從導入的數據流中進行持續的學習。

(1)批量學習

批量學習是一次性將所有的數據進行學習,這樣一般會占用很多的時間和計算資源,計算完了之后再開始使用。一般的學習方式都是批量學習,因為方法簡單。

舉個例子,初中數學書是人教版的,如果我們把人教版的書和習題全部學習一遍,再去考試,這就是批量學習,學習是一次性的。

假如考試范圍不僅僅是人教版的,還有蘇教版呢,那這個學生又要重新學習一遍蘇教版的內容。

這就是批量學習的不足之處,,用全部數據訓練需要大量計算資源(CPU、內存空間、磁盤空間、磁盤 I/O、網絡 I/O等等)。如果你有大量數據,并讓系統每天自動從頭開始訓練,就會開銷很大。如果數據量巨大,甚至無法使用批量學習算法。最后,如果你的系統需要自動學習,但是資源有限(比如,一臺智能手機或火星車),攜帶大量訓練數據、每天花費數小時的大量資源進行訓練是不實際的

(2)增量學習

增量學習也叫在線學習,持續性學習,顧名思義,就是持續地輸入數據,算法根據每次輸入的數據進行相應的調整。每一個學習步驟都很快而且開銷很小。所以系統可以動態的學習新的數據。

也可以當機器的內存存不下大量數據集時,用來訓練系統(這稱作核外學習,out-of-core learning)。算法加載部分的數據,用這些數據進行訓練,重復這個過程,直到用所有數據都進行了訓練。

還有一種分類標準是判斷它們是如何進行歸納推廣的。分為基于實例的學習和基于模型的學習。

基于實例的學習是直接對數據進行記憶,然后用相似度的方式來推廣至新的數據。比如K近鄰、樸素貝葉斯。

基于模型的學習則是先選擇合適的模型,再用數據對模型進行訓練。比如多元線性回歸、支持向量機、深度學習。

比如線性回歸算法,就是先假定數據符合?這樣一個線性的擬合函數。然后通過調整?和?的值,擬合訓練數據:

3. 機器學習面臨的主要問題

簡單的來說,機器學習面臨的主要問題來自兩個方向,也就是機器學習最最重要的兩個關鍵點:數據 + 算法

  • 訓練數據少

    如果一個學生只學了幾道題目就參加期末考試,那他可能會考得一塌糊涂,計算機也是這樣,如果訓練數據太少了,多數機器學習算法就無法正常工作

    即便對于一些非常簡單的問題,也需要數千的樣本。而對于復雜的問題,比如圖像、語音識別,則可能需要數百萬的樣本。

    在2001年的一篇論文中,作者研究了不同算法在數據量級增加時表現出的性能,實驗證明一旦有大量數據進行訓練,不同算法之間的差異會大大減小。這就是傳說中的天賦不夠,努力來湊吧。

  • 數據沒有代表性

    數據具有代表性是非常重要的。舉個例子,如果很多人都跟你吐槽最近上映的一部電影很爛,你接收到的信息都是關于這部電影的缺點,那么你很有可能再還沒有看之前就把這部電影判了死刑。

    使用了沒有代表性的訓練集,我們就會得出與事實不太相符的結論。書上也舉了一個很好的例子。

    一個樣本偏差的著名案例

    也許關于樣本偏差最有名的案例發生在 1936 年蘭登和羅斯福的美國大選:《文學文摘》做了一個非常大的民調,給 1000 萬人郵寄了調查信。

    得到了 240 萬回信,非常有信心地預測蘭登會以 57% 贏得大選。然而,羅斯福贏得了 62% 的選票。

    錯誤發生在《文學文摘》的取樣方法:

    首先,為了獲取發信地址,《文學文摘》使用了電話黃頁、雜志訂閱用戶、俱樂部會員等相似的列表。所有這些列表都偏向于富裕人群,他們都傾向于投票給共和黨(即蘭登)。

    第二,只有 25% 的回答了調研。這就又一次引入了樣本偏差,它排除了不關心政治的人、不喜歡《文學文摘》的人,和其它關鍵人群。這種特殊的樣本偏差稱作無應答偏差。

  • 低質量數據

    有的數據具有明顯的異常或是缺失關鍵信息,那么這種數據就是低質量數據。系統檢測出潛在的數據規律難度就會變大,性能就會降低。事實上這個問題很嚴重,所以實際工作中我們要花很多時間在數據清洗上。

  • 不相關的特征

    有的數據特征跟你的結論毫無關聯,就需要剔除掉。

    比如影響你期末成績的課程有數學、英語、專業課,但是不應該包括你喜歡的游戲類型,如果你把你喜歡的游戲類型加進來一起分析,可能得不到任何正面的作用。

    機器學習項目成功的關鍵之一是用好的特征進行訓練。

現在數據造成的問題我們已經分析完了,再看看算法會導致的問題。

  • 欠擬合訓練數據

    假如你的算法模型過于簡單,那么就不能得到很好的擬合效果。

    比如我們想研究每個月電影上映的數量。如果用一個線性的模型來擬合顯然是不合適的,每個月上映的電影數量跟月份并不是簡單的線性關系,這樣就會出現欠擬合的現象。

    解決這個問題的選項包括:

    選擇一個更強大的模型,帶有更多參數

    用更好的特征訓練學習算法(特征工程)

    減小對模型的限制

  • 過擬合訓練數據

    相反,過擬合就是指由于訓練數據包含抽樣誤差,訓練時,復雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。

    具體表現就是最終模型在訓練集上效果好;在測試集上效果差。模型泛化能力弱。

    用數學老師的一句話描述過擬合:

    同樣的題目教了無數遍,我換兩個數字你們就不會做了??

    可能的解決方案有:

    簡化模型,可以通過選擇一個參數更少的模型(比如使用線性模型,而不是高階多項式模型)、減少訓練數據的屬性數、或限制一下模型

    收集更多的訓練數據

    減小訓練數據的噪聲(比如,修改數據錯誤和去除異常值)

4. 測試和確認

講了這么多,那如何判斷一個算法模型得出的結論是好還是壞呢?一種比較常見的方法是將數據分為訓練集和測試集兩個部分。

用訓練集訓練算法模型,再用測試集測試準確率

還是以初中生學習作為例子,一本習題冊分為10個部分,前8個部分作為學習部分,我們邊做邊對答案,然后總結解題的思路。后面2個部分作為測試,測試完之后的得分情況就代表自己對這種題目的掌握程度。

因此,評估一個模型很簡單:只要使用測試集。現在假設你在兩個模型之間猶豫不決(比如一個線性模型和一個多項式模型):如何做決定呢?一種方法是兩個都訓練,然后比較在測試集上的效果。

我們通過修改一些超參數(不能通過學習來自動調整的參數)來降低誤差,但是這種方法在實際中的應用效果卻并沒有想象的那么好。

這是因為超參數都是基于測試集來調整的,就相當于把測試集當成了訓練超參數的數據。這樣對于新的數據效果不一定會更好。

解決辦法是:

保留一個數據集作為驗證集,在這些步驟做完之后再進行最終的驗證

類比到學習問題上就是對一本習題集進行反復學習,然后做很多的模擬測試來適應考試狀態,最后進行一次考試,這樣才能檢測出你真實的學習水平。

但是這種方法會減少訓練集,有一種比較常用的方法是交叉驗證法,這里不過多贅述,在后面的章節會學習到。

交叉驗證法:訓練集分成互補的子集,每個模型用不同的子集訓練,再用剩下的子集驗證。一旦確定模型類型和超參數,最終的模型使用這些超參數和全部的訓練集進行訓練,用測試集得到推廣誤差率。

最后解決一個許多新手都有的疑惑,機器學習發展了這么多年,有沒有一種萬能的算法能解決所有的學習問題?

這就好比問數學老師,有沒有一種方法能解題思路能解開所有的數學題目?

答案是不能。在1996年的一篇著名論文中,David Wolpert證明沒有一種機器學習算法能解決所有的問題,這稱作沒有免費午餐(NFL)公理

對于一些數據集,最佳模型是線性模型,而對其它數據集則是神經網絡。沒有一個模型可以保證效果更好(如這個公理的名字所示)。所以機器學習首先面臨的問題是:

到底選擇哪一種機器學習算法得到的效果更佳?


歡迎來我的博客留言討論,我的博客主頁:LeonG的博客

本文參考自:《Hands-On Machine Learning with Scikit-Learn & TensorFlow機器學習實用指南》,感謝中文AI社區ApacheCN提供翻譯。

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容