當研究院和企業能獲取足夠的專項研究預算之後,能從數據和用戶輸入中學習的智能應用程序將變得更加常見。人們對機器學習技巧(比如說集群、協作篩選和分類)的需求前所未有地增長,無論是查找一大群人的共性還是自動標記海量 Web 內容。Apache Mahout 項目旨在幫助開發人員更加方便快捷地創建智能應用程序。Mahout 的創始者 Grant Ingersoll 介紹了機器學習的基本概念,並演示了如何使用 Mahout 來實現文檔集群、提出建議和組織內容。
在信息時代,公司和個人的成功越來越依賴於迅速有效地將大量數據轉化為可操作的信息。無論是每天處理數以千計的個人電子郵件消息,還是從海量博客文章中推測用戶的意圖,都需要使用一些工具來組織和增強數據。這其中就蘊含著機器學習 領域以及本文章所介紹項目的前景:Apache Mahout(見 參考資料)。
機器學習是人工智慧的一個分支,它涉及通過一些技術來允許計算機根據之前的經驗改善其輸出。此領域與數據挖掘密切相關,並且經常需要使用各種技巧,包括統計學、概率論和模式識別等。雖然機器學習並不是一個新興領域,但它的發展速度是毋庸置疑的。許多大型公司,包括 IBM®、Google、Amazon、Yahoo! 和 Facebook,都在自己的應用程序中實現了機器學習演算法。此外,還有許多公司在自己的應用程序中應用了機器學習,以便學慣用戶以及過去的經驗,從而獲得收益。
在簡要概述機器學習的概念之後,我將介紹 Apache Mahout 項目的特性、歷史和目標。然後,我將演示如何使用 Mahout 完成一些有趣的機器學習任務,這需要使用免費的 Wikipedia 數據集。
機器學習 101
機器學習可以應用於各種目的,從遊戲、欺詐檢測到股票市場分析。它用於構建類似於 Netflix 和 Amazon 所提供的系統,可根據用戶的購買歷史向他們推薦產品,或者用於構建可查找特定時間內的所有相似文章的系統。它還可以用於根據類別(體育、經濟和戰爭等)對網頁自動進行分類,或者用於標記垃圾電子郵件。本文無法完全列出機器學習的所有應用。如果您希望更加深入地探究該領域,我建議您參閱 參考資料。
可以採用一些機器學習方法來解決問題。我將重點討論其中最常用的兩個 — 監管 和無監管 學習 — 因為它們是 Mahout 支持的主要功能。
監管學習的任務是學習帶標籤的訓練數據的功能,以便預測任何有效輸入的值。監管學習的常見例子包括將電子郵件消息分類為垃圾郵件,根據類別標記網頁,以及識別手寫輸入。創建監管學習程序需要使用許多演算法,最常見的包括神經網路、Support Vector Machines (SVMs) 和 Naive Bayes 分類程序。
無監管學習的任務是發揮數據的意義,而不管數據的正確與否。它最常應用於將類似的輸入集成到邏輯分組中。它還可以用於減少數據集中的維度數據,以便只專註於最有用的屬性,或者用於探明趨勢。無監管學習的常見方法包括 k-Means、分層集群和自組織地圖。
在本文中,我將重點討論 Mahout 當前已實現的三個具體的機器學習任務。它們正好也是實際應用程序中相當常見的三個領域:
在研究它們在 Mahout 中的實現之前,我將從概念的層面上更加深入地討論這些任務。
協作篩選
協作篩選 (CF) 是 Amazon 等公司極為推崇的一項技巧,它使用評分、單擊和購買等用戶信息為其他站點用戶提供推薦產品。CF 通常用於推薦各種消費品,比如說書籍、音樂和電影。但是,它還在其他應用程序中得到了應用,主要用於幫助多個操作人員通過協作來縮小數據範圍。您可能已經在 Amazon 體驗了 CF 的應用,如 圖 1 所示:
CF 應用程序根據用戶和項目歷史向系統的當前用戶提供推薦。生成推薦的 4 種典型方法如下:
所有 CF 方法最終都需要計算用戶及其評分項目之間的相似度。可以通過許多方法來計算相似度,並且大多數 CF 系統都允許您插入不同的指標,以便確定最佳結果。
集群
對於大型數據集來說,無論它們是文本還是數值,一般都可以將類似的項目自動組織,或集群,到一起。舉例來說,對於全美國某天內的所有的報紙新聞,您可能希望將所有主題相同的文章自動歸類到一起;然後,可以選擇專註於特定的集群和主題,而不需要閱讀大量無關內容。另一個例子是:某台機器上的感測器會持續輸出內容,您可能希望對輸出進行分類,以便於分辨正常和有問題的操作,因為普通操作和異常操作會歸類到不同的集群中。
與 CF 類似,集群計算集合中各項目之間的相似度,但它的任務只是對相似的項目進行分組。在許多集群實現中,集合中的項目都是作為矢量表示在 n 維度空間中的。通過矢量,開發人員可以使用各種指標(比如說曼哈頓距離、歐氏距離或餘弦相似性)來計算兩個項目之間的距離。然後,通過將距離相近的項目歸類到一起,可以計算出實際集群。
可以通過許多方法來計算集群,每種方法都有自己的利弊。一些方法從較小的集群逐漸構建成較大的集群,還有一些方法將單個大集群分解為越來越小的集群。在發展成平凡集群表示之前(所有項目都在一個集群中,或者所有項目都在各自的集群中),這兩種方法都會通過特定的標準退出處理。流行的方法包括 k-Means 和分層集群。如下所示,Mahout 也隨帶了一些不同的集群方法。
分類
分類(通常也稱為歸類)的目標是標記不可見的文檔,從而將它們歸類不同的分組中。機器學習中的許多分類方法都需要計算各種統計數據(通過指定標籤與文檔的特性相關),從而創建一個模型以便以後用於分類不可見的文檔。舉例來說,一種簡單的分類方法可以跟蹤與標籤相關的詞,以及這些詞在某個標籤中的出現次數。然後,在對新文檔進行分類時,系統將在模型中查找文檔中的詞並計算概率,然後輸出最佳結果並通過一個分類來證明結果的正確性。
分類功能的特性可以包括辭彙、辭彙權重(比如說根據頻率)和語音部件等。當然,這些特性確實有助於將文檔關聯到某個標籤並將它整合到演算法中。
機器學習這個領域相當廣泛和活躍。理論再多終究需要實踐。接下來,我將繼續討論 Mahout 及其用法。
Mahout 簡介
Apache Mahout 是 Apache Software Foundation (ASF) 開發的一個全新的開源項目,其主要目標是創建一些可伸縮的機器學習演算法,供開發人員在 Apache 在許可下免費使用。該項目已經發展到了它的最二個年頭,目前只有一個公共發行版。Mahout 包含許多實現,包括集群、分類、CP 和進化程序。此外,通過使用 Apache Hadoop 庫,Mahout 可以有效地擴展到雲中(見 參考資料)。
Mahout 的歷史
|
Mahout 項目是由 Apache Lucene(開源搜索)社區中對機器學習感興趣的一些成員發起的,他們希望建立一個可靠、文檔翔實、可伸縮的項目,在其中實現一些常見的用於集群和分類的機器學習演算法。該社區最初基於 Ng et al. 的文章 “Map-Reduce for Machine Learning on Multicore”(見 參考資料),但此後在發展中又併入了更多廣泛的機器學習方法。Mahout 的目標還包括:
特性
雖然在開源領域中相對較為年輕,但 Mahout 已經提供了大量功能,特別是在集群和 CF 方面。Mahout 的主要特性包括:
|
Mahout 入門
Mahout 的入門相對比較簡單。首先,您需要安裝以下軟體:
[火星人 ] Apache Mahout 簡介已經有823次圍觀