1. 程式人生 > >機器學習實戰(1)—— 機器學習基礎

機器學習實戰(1)—— 機器學習基礎

機器學習實戰(1)—— 機器學習基礎

在這裡插入圖片描述

老闆:小韓啊,來來來!工程是不是寫夠了啊?

我:(what!!!)emmmm,還行還行。

老闆:一看你就是寫夠了。最近公司要搞機器學習,你帶頭來學習一下吧!

我:行啊,工程程式碼我早就不想寫了。那就學習一下吧!

老闆:好,那就先去看《機器學習》吧!

自己現在是一名大四的學生,準備讀研,當然沒有工作,老闆也是我捏造的。

荒廢了大四好久的時間,最近,自己總算是慢慢提起學習的興趣,開始學習機器學習了。以前從來沒有接觸過機器學習,所以在學習的初期,自己也向學長學姐請教了一下,於是決定從《機器學習實戰》這本書開始入門機器學習。

為什麼選擇這本書,其實,總體來看,這本書比較基礎,適合入門。對於一些數學定理,也就是拿過來用,並不注重這些定理的高深的推導過程。這對我一個數學渣渣來說,正好可以接受。

作為一名標準的理工男,我也算是第一次寫文章,可能會有語病問題。有些東西可能寫的不好,說的不明白,還望大家見諒。

好了,開篇的廢話我也不多說了,直接進入“機器學習”的世界!

1.1 何謂機器學習

除卻一些無關緊要的情況,我們很難直接從原始資料本身獲得所需資訊。

例如,對於垃圾郵件的檢測,偵測一個單詞是否存在並沒有太大的作用,然而當某幾個特定單詞同時出現時,再輔 以考察郵件長度及其他因素,我們就可以更準確地判定該郵件是否為垃圾郵件。

簡單地說,機器學習就是把無序的資料轉換成有用的資訊,讓機器向我們的大腦一樣去學習去判斷。

其實,書中還有更多的資訊去介紹機器學習的背景,因為大部分都是理論套話,這裡我就不給大家列出了,有興趣的可以直接去看《機器學習實戰》這本書。

我們接下來直接看一下與機器學習有關的術語。

1.2 關鍵術語

在踏入任何一個領域之前,我們都有必要去了解該領域所讀應的術語,機器學習也不例外。

好了,老闆來了。

老闆:小韓啊,看的怎麼樣了?機器學習裡面的一些術語明白了嗎??

我:明白了!明白了!So Easy!

老闆:hhhh,好。那你給我係統的介紹一下吧。

我:好嘞!(求升職加薪臉)

下面,我們就從一個鳥類分類系統來介紹機器學習中的相關術語。

這類系統非常有趣,通常與機器學習中的專家系統有關。開發出能夠識別鳥類的計算機軟體,鳥類學者就可以退休了。因為鳥類學者是研究鳥類的專家,因此我們所以說建立的是一個專家系統。

下表是我們用於區分不同鳥類需要使用的四個不同的屬性值,我們選用體重、翼展、有無腳蹼以及後背顏色作為評測基準。現實中,你可能會想測量更多的值。通常的做法是測量所有可測屬性,而後再挑選出重要部分。下面測量的這四種值稱之為特徵,也可以稱作屬性,我們接下來一律將其稱為特徵。表中的每一行都是一個具有相關特徵的例項

體重(克) 翼展(釐米) 腳蹼 後背顏色 種屬
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 黑色 象牙喙啄木鳥

老闆:等一下,你這光有文字,太抽象了。

我:那你等一下,我給你畫張圖,你就明白了。

在這裡插入圖片描述

老闆:不錯不錯,這樣好理解多了!

如果你看到了一隻象牙喙啄木鳥,請馬上通知我!而且千萬不要告訴任何人。在我到達之前, 一定要看住它,別讓它飛跑了。(任何發現活的象牙喙啄木鳥的人都可以得到5萬美元的獎勵)

機器學習的主要任務就是分類。接下來我們就利用上表進行分類,標識出象牙喙啄木鳥從而獲取5萬美元的獎勵。

大家都想從眾多其他鳥類中分辨出象牙喙啄木鳥,並從中獲利。

簡單的做法是安裝一個餵食器,然後僱用一位鳥類學者,觀察在附近進食的鳥類。如果發現象牙喙啄木鳥,則通知我們。這種方法太昂貴了,而且專家在同一時間只能出現在一個地方。

我們可以自動化處理上述過程,安裝多個帶有照相機的餵食器,同時接入計算機用於標識前來進食的鳥。 同樣我們可以在餵食器中放置稱重儀器以獲取鳥的體重,利用計算機視覺技術來提取鳥的翅長、 腳的型別和後背色彩。假定我們可以得到所需的全部特徵資訊,那該如何判斷飛入進食器的鳥是 不是象牙喙啄木鳥呢?

這個任務就是分類,有很多機器學習演算法非常善於分類。本例中的類別就是鳥的物種,更具體地說,就是區分是否為象牙喙啄木鳥。 最終我們決定使用某個機器學習演算法進行分類,首先需要做的是演算法訓練,即學習如何分類。 通常我們為演算法輸入大量已分類資料作為演算法的訓練集訓練集是用於訓練機器學習演算法的資料樣本集合,那麼上表是包含六個訓練樣本的訓練集,每個訓練樣本有4種特徵、一個目標變數。目標變數是機器學習演算法的預測結果,在分類演算法中目標變數的型別通常是標稱型的, 而在迴歸演算法中通常是連續型的。訓練樣本集必須確定知道目標變數的值,以便機器學習演算法可以發現特徵和目標變數之間的關係。正如前文所述,這裡的目標變數是物種,也可以簡化為標稱型的數值。我們通常將分類問題中的目標變數稱為類別,並假定分類問題只存在有限個數的類別。

老闆:那你繼續畫圖!

我:遵命!

在這裡插入圖片描述

注意:特徵或者屬性通常是訓練樣本集的列,它們是獨立測量得到的結果,多個特徵聯絡在一 起共同組成一個訓練樣本。

好了,我們現在已經有了資料,也做好了分類訓練的工作,接下來就是測試工作了。

為了測試機器學習演算法的效果,通常使用兩套獨立的樣本集:訓練資料測試資料

  1. 當機器學習程式開始執行時,使用訓練樣本集作為演算法的輸入,訓練完成之後輸入測試樣本。
  2. 輸入測試樣本時並不提供測試樣本的目標變數,由程式決定樣本屬於哪個類別。比較測試樣本預測的目標變數值與實際樣本類別之間的差別,就可以得出演算法的實際精確度。

後面我們將會引入更好地使用測試樣本和訓練樣本資訊的方法,這裡就不再詳述。

假定這個鳥類分類程式,經過測試滿足精確度要求,是否我們就可以看到機器已經學會了如何區分不同的鳥類了呢?這部分工作稱之為***知識表示***,某些演算法可以產生很容易理解的知識表示,而某些演算法的知識表示也許只能為計算機所理解。知識表示可以採用規則集的形式,也可以採用概率分佈的形式,設定可以是訓練樣本集中的一個例項。在某些場合中,人們可能並不想建立一個專家系統,而僅僅對機器學習演算法獲取的資訊感興趣。此時,採用何種方式表示知識就顯得非常重要了。


好了,說了這麼多,可能會有點多,這裡因為是術語,定義我也不能自己胡謅,我就結合西瓜書,給大家稍微總結一下基本的術語,可能說的不是很清楚,如果有什麼不對的地方,歡迎大家指正。當然,在後面的學習中,我們會接觸到更多的術語,這裡我就不多贅述了。

  1. 例項(樣本):表中每一行是關於一個事件或者物件的描述。
  2. 特徵(feature):反映事件或物件在某方面的表現或性質的事項,也叫做屬性(attribute),例如體重、是否有腳蹼等。
  3. 屬性值(attribute value):屬性上的取值。
  4. 資料集(data set):樣本的集合。
  5. 訓練集(training set):用作訓練的資料集。
  6. 測試集(test set):用作測試的資料集。

老闆:小夥子幹得不錯啊!

我:還行,還行!

老闆:今晚給你加雞腿,你就在公司好好幹!

我:(臉上笑嘻嘻,內心mmp)

1.3 機器學習的主要任務

上面的例子中,我們已經介紹了機器學習是如何解決分類問題的,它的主要任務就是將例項資料劃分到合適的分類中去。

機器學習的另一項任務是迴歸(regression),它用於預測數值型資料。大多數人都見多回歸的例子——資料擬合曲線:通過給定資料點的最優擬合曲線。

分類和迴歸術語監督學習,之所以稱之為監督學習,是因為這類演算法必須知道預測什麼,即目標變數的分類資訊。

與監督學習相對應的就是無監督學習,此時資料沒有類別資訊,也不會給定目標值。

  1. 將資料集合分成由類似的物件組成的多個類的過程被稱為聚類
  2. 將尋找描述資料統計值 的過程稱之為密度估計

此外,無監督學習還可以減少資料特徵的維度,以便我們可以使用二維或三維圖形更加直觀地展示資料資訊。

下面這個表格是《機器學習實戰》這本書上的,因為我也是入門級,所以就直接拿過來用了。

監督學習的用途
分類 迴歸
k-近鄰演算法 線性迴歸
樸素貝葉斯演算法 區域性加權線性迴歸
支援向量機(SVM) Ridge線性迴歸
決策樹 Lasso最小回歸係數估計
無監督學習的用途
聚類 密度估計
K-均值 最大期望演算法
DBSCAN Parzen窗設計

好吧,這麼多東西都是啥玩意?我也不知道。後面,我們慢慢學習,揭開這神祕的面紗!

1.4 如何選擇合適的演算法

老闆:小韓啊,最近機器學期看得怎麼樣了啊?

我:還行還行啦,基本的術語都搞明白了啊,也瞭解了一些演算法和機器學習的分類了。

老闆:不錯,不錯。那你知道如何選擇合適的機器學習演算法嗎?

我:那當然了。書上寫的還是很明白的!

老闆:那你給我講講!

老闆啊,這麼多機器學習演算法,我們該如何進行選擇呢?其實,有兩個問題需要我們考慮。

  1. 我們使用機器學習演算法的目的,想要演算法完成何種任務。比如,是預測明天下雨的概率還是對投票者按照興趣分組呢?
  2. 需要分析和收集的資料是什麼

簡單點,就是目的和資料,也就是我們用什麼資料做什麼用。

**首先考慮使用機器學習演算法的目的。**如果想要預測目標變數的值,則可以選擇監督學習演算法, 否則可以選擇無監督學習演算法。確定選擇監督學習演算法之後,需要進一步確定目標變數型別,如果目標變數是離散型,如是/否、1/2/3、A/B/C或者紅/黃/黑等,則可以選擇分類器演算法;如果目標變數是連續型的數值,如0.0~100.00、-999~999或者+∞~-∞等,則需要選擇迴歸演算法。 如果不想預測目標變數的值,則可以選擇無監督學習演算法。進一步分析是否需要將資料劃分為離散的組。如果這是唯一的需求,則使用聚類演算法;如果還需要估計資料與每個分組的相似程度,則需要使用密度估計演算法。

好吧,這麼多字,有點煩哦,不如來一張圖片。

在這裡插入圖片描述

在大多數情況下,上面給出的選擇方法都能幫助讀者選擇恰當的機器學習演算法,但這也並非一成不變。

其次需要考慮的是資料問題。我們應該充分了解資料,對實際資料瞭解得越充分,越容易建立符合實際需求的應用程式。主要應該瞭解資料的以下特性:

  1. 特徵值是離散型變數還是連續型變數
  2. 特徵值中是否存在缺失的值
  3. 何種原因造成缺失值
  4. 資料中是否存在異常值
  5. 某個特徵發生的頻率如何(是否罕見得如同海底撈針)等等。

充分了解上面提到的這些資料特性可以縮短選擇機器學習演算法的時間。

我們只能在一定程度上縮小演算法的選擇範圍,一般並不存在好的演算法或者可以給出好結果的演算法,同時還要嘗試不同演算法的執行效果。對於所選的每種演算法,都可以使用其他的機器學習技術來改進其效能。在處理輸入資料之後,兩個演算法的相對效能也可能會發生變化。後續章節我們將進一步討論此類問題,一般說來發現好演算法的關鍵環節是反覆試錯的迭代過程。

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

在《機器學習實戰》這本書中,開發和使用機器學習演算法開發應用程式,通常遵循以下的步驟。

  1. 收集資料。我們可以使用很多方法收集樣本資料,如:製作網路爬蟲從網站上抽取資料、 從RSS反饋或者API中得到資訊、裝置傳送過來的實測資料(風速、血糖等)。提取資料的方法非 常多,為了節省時間與精力,可以使用公開可用的資料來源。
  2. 準備輸入資料。得到資料之後,還必須確保資料格式符合要求。在這本書中採用的格式是Python語言的List。使用這種標準資料格式可以融合演算法和資料來源,方便匹配操作。此外還需要為機器學習演算法準備特定的資料格式,如某些演算法要求特徵值使用特定的格式, 一些演算法要求目標變數和特徵值是字串型別,而另一些演算法則可能要求是整數型別。
  3. 分析輸入資料。此步驟主要是人工分析以前得到的資料。為了確保前兩步有效,簡單的方法是用文字編輯器開啟資料檔案,檢視得到的資料是否為空值。此外,還可以進一步瀏覽資料,分析是否可以識別出模式;資料中是否存在明顯的異常值,如某些資料點與資料集中的其他 值存在明顯的差異。通過一維、二維或三維圖形展示資料也是不錯的方法,然而大多數時候我們 得到資料的特徵值都不會低於三個,無法一次圖形化展示所有特徵。本書的後續章節將會介紹提 煉資料的方法,使得多維資料可以壓縮到二維或三維,方便我們圖形化展示資料。 這一步的主要作用是確保資料集中沒有垃圾資料。如果是在產品化系統中使用機器學習演算法 並且演算法可以處理系統產生的資料格式,或者我們信任資料來源,可以直接跳過第3步。此步驟需要人工干預,如果在自動化系統中還需要人工干預,顯然就降低了系統的價值。
  4. 訓練演算法。機器學習演算法從這一步才真正開始學習。根據演算法的不同,第4步和第5步是機器學習演算法的核心。我們將前兩步得到的格式化資料輸入到演算法,從中抽取知識或資訊。這裡 得到的知識需要儲存為計算機可以處理的格式,方便後續步驟使用。 如果使用無監督學習演算法,由於不存在目標變數值,故而也不需要訓練演算法,所有與演算法相關的內容都集中在第5步。
  5. 測試演算法。這一步將實際使用第4步機器學習得到的知識資訊。為了評估演算法,必須測試演算法工作的效果。對於監督學習,必須已知用於評估演算法的目標變數值;對於無監督學習,也必須用 其他的評測手段來檢驗演算法的成功率。無論哪種情形,如果不滿意演算法的輸出結果,則可以回到第 4步,改正並加以測試。問題常常會跟資料的收集和準備有關,這時你就必須跳回第1步重新開始。
  6. 使用演算法。將機器學習演算法轉換為應用程式,執行實際任務,以檢驗上述步驟是否可以 在實際環境中正常工作。此時如果碰到新的資料問題,同樣需要重複執行上述的步驟。

好吧,上面都不是我寫的,這些都是書上的原內容,我覺得總結得很好,所以就直接拿過來給大家看了。

老闆:小韓啊,機器學習你也算是基本入門了。不僅掌握了機器學習的相關術語,還掌握瞭如何選擇機器學習演算法和開發機器學習應用程式的步驟,總的來說還是很不錯的!

我:謝謝老闆誇獎,那加工資不?

老闆:你說啥?工作太輕鬆了?好,那明天就給你安排新的任務,幹得好可以考慮加雞腿!!!

我:溜了溜了,今天就到這裡了!


最後,歡迎大家關注我的公眾號,有什麼事情歡迎大家給我留言!!!

小白的七日之旅