1. 程式人生 > 其它 >《機器學習實戰》 | 第1章 機器學習基礎

《機器學習實戰》 | 第1章 機器學習基礎

系列文章:《機器學習實戰》學習筆記

這是《機器學習實戰》的第一章,本章簡要介紹了下什麼是機器學習、機器學習的主要任務和本書中將要用到的Python語言。現在機器學習(Machine learning)與人工智慧(Artificial intelligence)這麼火,介紹機器學習的文章網上有很多,有很多已經寫得相當好了,比如這篇:從機器學習談起,值得好好看看。本文肯定不會介紹得那樣全,只是討論《機器學習實戰》這本書中提到的一些機器學習基礎知識。

機器學習能讓我們自資料集中受到啟發,換句話說,我們會利用計算機來彰顯資料背後的真實含義。它既不是隻會徒然模仿的機器人,也不是具有人類感情的仿生人。

現今,機器學習已應用於多個領域,遠超出大多數人的想象——

  • 搜尋引擎結果排序
  • 垃圾郵件過濾器
  • 商品推薦
  • 手寫識別軟體
  • 貸款信用判定
  • ……

一、何謂機器學習

簡單來說,機器學習是一個從無序資料中提取有用資訊的過程。它橫跨電腦科學、工程技術和統計學等多個學科,需要多學科的知識。

網際網路時代,人們製造、收集了大量的資料,如何從這些資料中抽取出有價值的資訊是一個非常值得研究的課題。現在也是個“資料為王”的年代,各個公司都在瘋狂得蒐集使用者資料,個人資訊、使用習慣、搜尋記錄、觀看記錄甚至電子郵件內容……希望能從中發現使用者的喜好,挖掘使用者的需求。可謂誰擁有資料,誰就有下一個機會。然而光有這些資料是不夠的,海量的資料已經超出了直接計算的可行性,想要從中高效地提取資訊就需要專門的學習演算法,這就是機器學習的作用所在。我們需要機器學習演算法,避免我們“迷失”在資料中,而找到更多的可用資訊。

1.機器學習與統計學

順便說一句,機器學習同統計學有著很深的淵源。在計算機出現以前,統計學家早就做著分析、預測的工作。機器學習可以說是電腦科學同統計學的一個結合點,利用計算機工具將統計學理論轉化為程式碼,應用在了更多領域。而機器學習和統計學現在也有一些區別,這也不單是理論與應用的問題,還有一些不同的關注點和側重點。關於這方面的討論也有很多可讀的文章:

2.關鍵術語

書中使用了一個簡單的“鳥類分類系統”作為切入點,介紹了機器學習演算法中常用到的基本術語。這個系統用到的鳥物種分類表如下:

序號 體重(克) 翼展(釐米) 腳蹼 後背顏色 種屬
1 1000.1 125.0 棕色 紅尾鵟
2 3000.7 200.0 灰色 鷺鷹
3 3300.0 220.3 灰色 鷺鷹
4 4100.0 136.0 黑色 普通潛鳥
5 3.0 11.0 綠色 瑰麗蜂鳥
6 570.0 75.0 黑色 象牙喙啄木鳥

我們稱其為一個專家系統,因為它可以像一個研究鳥類的專家一樣識別鳥類的種屬。表中使用了四種不同的屬性值來區分不同鳥類。現實中,你可能會想測量更多的值。通常的做法是測量所有可測屬性,而後再挑選出重要部分。我們稱使用的這四種屬性為特徵。 表中的每一行都是一個具有相關特徵的例項或稱樣本

  1. 特徵數值的型別

    表中的前兩種特徵是連續型數值型)的,即它的取值是連續的實數;第三種特徵是二值型的,只可以取是或否;第四種特徵是基於有限顏色範圍的列舉型。我們稱二值型、列舉型這樣只可以取有限個值的特徵為離散型標稱型)的。

  2. 機器學習的任務——分類

    鳥類分類系統完成的是一個分類任務。這很好理解,因為這個系統要做的事是分給未知的(鳥類)樣本一個已知的種類。

  3. 機器學習演算法的流程

    我們首先要做的是演算法訓練,即學習如何分類。即為演算法輸入大量已分類資料作為演算法的訓練集。訓練集是用於訓練機器學習演算法的資料樣本集合。表中即包含六個訓練樣本的訓練集。每個訓練樣本有若干個特徵(本例為4個)和一個目標變數(表示樣本所屬的類別)。目標變數是機器學習演算法的預測結果,在分類演算法中目標變數的型別通常是標稱型的。我們通常將分類問題中的目標變數稱為類別,並假定分類問題只存在有限個數的類別。

    為了測試機器學習演算法的效果,通常將現有資料分為兩套獨立的資料集:訓練資料和測試資料。當機器學習程式開始執行時,使用訓練樣本作為演算法的輸入,訓練完成之後輸入測試樣本。輸入測試樣本時並不提供測試樣本的目標變數,而是由程式決定樣本的類別。通過比較程式預測的樣本類別與實際樣本類別(目標變數)之間的差異,就可以得出演算法的實際精確度。

    我們稱演算法輸出的結果為模型。經過訓練、測試準確率良好的模型就可以被儲存下來,用於對未知的鳥類樣本分類。

廢了半天話,是時候祭出這張經典的流程圖了(圖自李航《統計學習方法》):

  1. 機器學習的其他任務

    機器學習的另一項任務是迴歸,它主要用於預測數值型資料。一個很經典的例子就是統計學中的資料擬合曲線:給定資料點,計算最優擬合曲線,目標變數即這條曲線的引數。

    分類和迴歸均屬於監督學習Supervised learning),即這類演算法知道預測什麼(存在目標變數)。

    與之對應的是無監督學習Unsupervised learning),此時資料沒有類別資訊,也不會給定目標值。在無監督學習中,將資料集合分成由類似的物件組成的多個類的過程被稱為聚類;將尋找描述資料統計值的過程稱之為密度估計。此外,還包括減少資料特徵的維度的演算法,被稱為降維

二、尋找合適的機器學習演算法

為一個實際問題應用機器學習演算法時,可以從如下方面分別考慮:

  1. 使用機器學習演算法的目的(目標任務)。如果已有部分樣本和目標變數,想要預測未知樣本的目標變數的值,則可以選擇監督學習演算法——根據目標變數的型別可以進一步分為分類演算法(對離散型目標變數)和迴歸演算法(對連續型目標變數)。如果沒有或不存在樣本型別資訊,則可以選擇無監督學習演算法——使用聚類演算法將資料劃分為若干類;使用密度估計演算法估計資料與每個分類的相似度(匹配度)。

  2. 其次需要考慮的是資料問題。我們應該充分了解資料的特性,沒有統一的學習演算法,(任何問題)都需要根據具體的資料做相應處理。需要考慮的問題有——資料的特徵數量,特徵值是離線型變數還是連續型變數,特徵值的取值範圍,特徵值的分佈(是否分佈不均、有些值很少出現),特徵值中是否存在缺失的值,造成缺失的原因,資料中是否存在異常的值(資料是否完全可信),等等。

  3. 多次試驗。一般並不存在最好的演算法,嘗試不同演算法的執行效果,比較其準確率、計算時間,綜合決定最終使用的機器學習演算法。

三、開發機器學習應用程式的步驟

  1. 收集資料。有很多方法收集樣本資料,如:製作網路爬蟲從網站上抽取資料、從API中得到資訊、裝置感測器發來的實測資料等等。
  2. 準備輸入資料。將資料轉換為計算機可處理的格式,如將離散資料轉換為整數值、填充缺失資料為特定的值。
  3. 分析輸入資料。如果資料的特徵值低於三維,可以將這些資料點繪製出來,人工分析資料的特徵,看是否有明顯的分佈模式、是否存在明顯的異常值。對於大於三維的資料,可以使用降維的方法壓縮到三維以下,方便我們圖形化展示資料。這一步的主要作用是確保沒有垃圾資料,否則將降低演算法效能。
  4. 訓練演算法。機器學習演算法從這一步才真正開始學習。對於無監督學習,因為不存在目標變數值,故不需要訓練演算法,所有的演算法集中在第五步。
  5. 測試演算法。對於監督學習,在測試的步驟使用測試資料檢測演算法的準確率(效能);對於無監督學習,執行機器學習演算法,並使用其它方式檢驗演算法效能。
  6. 使用演算法。將機器學習演算法轉換為應用程式,執行實際任務,以檢驗上述步驟是否可以在實際環境中正常工作。

四、使用Python語言實現機器學習演算法

本書中使用Python語言編寫實際程式碼。Python語言具有很多優點(清晰的語法結構、可讀性、豐富的函式庫、高階的語法特性……),使其很適合用來實現機器學習演算法。但是效能問題始終是Python語言最大的問題。由於它是一門解釋性語言,始終過不了效能這道坎兒。對此,可以使用PyPy這類帶有JIT的Python發行版,但是追求效能的場合終究還是逃不掉C和C++的。

——沒關係,把Python作為機器學習的教學語言還是足夠的。

書中的附錄部分有簡單介紹Python的語法,在本文中再寫這些就沒意思了。Python的入門門檻很低,網上有很多優秀的教程可供參考(比如這個:簡明Python教程)。

書中廣泛使用了Python的一個函式庫:NumPy,這個可謂Python做線性代數運算的必備函式庫,廣泛應用於不僅機器學習的各個數學計算領域。

在這裡假設已經安裝了Python開發環境和NumPy函式庫。

在Python shell中輸入下列命令,將NumPy函式庫中的所有模組匯入當前的名稱空間:

from numpy import *

生成一個4x4的隨機陣列(array):

random.rand(4,4)

可見其資料型別為array,這是NumPy中的兩大主要型別之一。

將陣列轉換為矩陣:

randMat = mat(random.rand(4,4))

可見其資料型別為mat,這是NumPy中的另一個主要型別。

矩陣求逆:

invRandMat = randMat.I

矩陣乘法:

randMat * invRandMat

獲得一個4x4單位矩陣:

myEye = eye(4)

\[QAQ \]

學習資源彙總

部落格文章:《從機器學習談起》《Brief History of Machine Learning》

書籍:李航《統計學習方法》

線上學習資源:Coursera公開課 - Machine LearningCoursera公開課 - 機器學習基石 (Machine Learning Foundations)(中文的哦),這兩個課程的老師分別是Andrew Ng和林軒田,也都是這個領域的大牛。

Python線上學習資源:簡明Python教程

以及隆重推薦這位大神的部落格:

http://blog.csdn.net/stdcoutzyx

The desire of his soul is the prophecy of his fate
你靈魂的慾望,是你命運的先知。