使用機器學習解決問題 : 探索書籍風格

緯緯道來
·
·
IPFS
·

前言 & 概述

本篇為機器學習觀念入門的第 9 篇文章。在前一篇文中,我們說明如何透過機器學習五步驟 (定義問題建立資料集模型訓練模型評估模型推論) 解決「房價預測」的問題。

房價預測屬於監督式學習 (Supervised Learning),在本篇文章中將會以「探索書籍風格」作為非監督式學習 (Unsupervised Learning) 的例子。

Step 1 : 定義問題

假設你是一間大型書店的店長,你想探索過去一年來書店售出的所有書籍的風格。雖然每一本書籍都有其分類,例如:英文證照、程式語言、自然科學,等等。然而,你想了解的不單單只是「大方向」的風格,而是希望能夠掌握更深入的細節。

如果去年書店業績不好,只賣出了 10 本書,也許你可以毛起來把這十本書讀完,就能夠大致了解客人的喜好。然而,如果銷量超過了 1000 本該怎麼辦呢?此時,我們就可以透過機器學習的技術,幫助我們找出這 1000 本書籍的潛在風格。

我們假設每一本書籍都附有摘要,可以概括的理解書籍的內容。我們會輸入這 1000 本書籍的摘要到模型中,模型根據這些摘要探索其中的風格,並將風格類似的書籍歸屬在同一個群組中。

在上述的過程中,我們只有輸入每本書籍的摘要到模型,並沒有先定好每一份摘要的風格,風格將由模型自己探索。因為我們沒有提供正確答案 (標籤) 給模型,因此屬於「非監督式學習」。

此外,模型會根據書籍的摘要找出書籍與書籍之間的潛在關係,將關係較為接近的書籍歸屬在同一個群組中,因此屬於「分群 (Clustering) 任務」。

Step 2 : 建立資料集

建立資料集的過程主要可以分為以下階段:

  • 收集資料 (Data Collection)
    收集資料的方法相當多元,我們可以聘請工讀生把每一本書籍的摘要在電腦上打出來,或是以爬蟲的方式在網路上收集這些書籍的摘要。
  • 資料探索 (Data Exploration) 與資料清理 (Data Cleaning)
    - 在此階段中,我們會深入理解我們所收集到的資料,並將資料處理為適合輸入模型的形式。舉例來說,我們所準備的資料為「摘要」,由許多句子所組成。句子中可能包含許多不重要的元素,我們可以先將其剔除,以英文語句來說:
    - 刪除標點符號 (, . ! ?)
    - 刪除不重要的字詞 (a, an, the)
    - 將大寫轉為小寫 (White => white)
    - 將動詞的時態統一轉為現在式 (did => does)
    - 將資料進行清理過後,必須將資料由「字串類型」轉為「數值類型」才能輸入到模型中,這個過程稱為 Data Vectorization

Step 3 : 模型訓練

建立資料集後,進入模型的建立以及訓練階段。在定義問題中,我們已經知道「探索書籍風格」任務屬於「分群 (Clustering) 問題」,解決 Clustering 問題最常見的模型為 K-Means。在本篇文章中,我們不會深入介紹 K-Means 的原理。

如同上圖所示,每一個點點都代表一本書籍的摘要,透過 K-Means 模型,我們可以將這些點點 (書籍) 分成多個群組。當我們指定 k=2 時,會將所有點點分成兩個群組 (如上圖左);設定 k=3 時,則會將所有的點點分成三個群組 (如上圖右)。

Step 4 : 模型評估

在模型評估階段,我們可以透過多種統計的指標 (metrics) 評估模型的好壞。如上圖所示,我們希望找到最適合的 Cluster 數目 (k),使得所有類似的書籍都能夠被歸類到同一個群組。我們可以使用 silhouette coefficient 幫助我們找到最適合的 k。

透過 silhouette coefficient,我們可以觀察不同的 k 之下,模型的好壞。如下圖所示,最佳的 k 值為 19。

當我們找到最適合的 k 後,我們就可以去觀察最大的 Cluster,也就是包含最多樣本 (書籍) 的 Cluster。透過該 Cluster 中的書籍摘要,就可以更深入的了解最熱門的書籍風格。

Step 5 : 模型推論

在模型推論階段,我們可以開始使用模型。輸入新的書籍摘要到模型中,觀察這個摘要被分到哪一個 Cluster,或是觀察其他 Cluster 中的書籍摘要,了解在同一個 Cluster 中的書籍存在著什麼樣的類似風格,而被機器學習模型歸類為同一個群組。

結語

在本篇文章中,我們透過機器學習五步驟,解決「探索書籍風格」這個非監督式學習的例子,也了解到 K-Means Model 與 silhouette coefficient 指標的應用。在下一篇文章中,我們將會介紹更厲害的模型 (Neural Network) 解決更困難的問題。

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

緯緯道來研究所學生,主修資訊工程,熱衷於深度學習與機器學習。初期先以基本的程式教學為主,希望我的文章能夠幫助到你!(https://linktr.ee/johnnyhwu)
  • 来自作者
  • 相关推荐

Python 中 if __name__ == “__main__” 有什麼用處

近期的心情寫照

Python Module 觀念解析