<b>2.6 特征提取</b>
<b></b>
在本節,我們的關注點将轉向特征提取,特征提取是根據工作資料集中可用特征或資訊擴充為新的特征或者變量。與此同時,我們将讨論一些apache spark中特征提取的特殊功能,以及spark中與特征相關的便捷解決方案。
學完本節之後,我們能夠針對各種各樣的機器學習項目開發并組織特征。
2.6.1 特征開發的挑戰
大部分的大資料機器學習項目通常都不能直接使用大資料集。例如,使用網絡日志資料時,它經常以随機文本集形式呈現,顯得非常混亂,我們需要從中提取對機器學習有用的資訊和特征。例如,我們需要從網絡日志資料提取點選次數和展示次數,這樣才能使用許多文本挖掘工具和算法。
對于任何特征提取,機器學習從業者需要決定:
采用什麼資訊,生成哪些特征
使用何種方法和算法
提取什麼特征取決于以下幾種情況:
資料可用性以及資料特性,比如處理資料缺失情況的難易程度
可用的算法,盡管有很多的算法可用于資料元素的數字組合,但較缺乏文本操作
算法
領域知識,因為涉及解讀特征的能力
總體來說,下面幾個常用的技術可用于追蹤特征:
資料描述
資料合并
時序轉換
地理相關技術
主成分分析(pca)
特征準備的另一項工作是從數百上千個可用特征中進行選擇,然後用于我們的機器學習項目。在機器學習中,特别是監督學習,手頭上的普遍問題常常是根據一組預測性特征來預測結果。在大資料時代,乍看之下,會自然而然認為我們擁有的特征越多,預測效果會越好。然而,随着特征量的增加也會導緻一些問題,如增加計算時間,也會導緻生成結果的解讀性差。
大多數情況下,在特征準備階段,機器學習從業者經常使用與回歸模型相關的特征選擇方法和算法。
2.6.2 基于spark mllib的特征開發
特征提取可以使用spark sql實作,同時,spark mllib也有一些特殊函數完成此項任務,例如tf-idf和word2vec。
mllib和r語言都有主成分分析包,可以用于特征開發。
如我們所知,在2.2.3節,我們有4個資料表可用于展示說明:
在這裡,我們可以對第三方資料應用特征提取技術,然後對最終合并的(連接配接)資料集進行特征選擇。
基于spark mllib,我們可以用下面的指令調用tf-idf:
另外,我們也可以應用word2vec,如下面的例子所示。
下面的例子(在scala中)首先加載一個文本檔案,把它解析為一個seq[string] 類型的rdd,再建構一個word2vec執行個體,之後使用資料拟合word2vecmodel。然後,我們可以顯示指定的前40個單詞的同義詞。這裡,我們假定計劃提取的檔案名為text8,并和運作的spark shell在同一個目錄下。運作下面的代碼:
有關使用spark mllib進行特征提取的更多資訊,請通路:http://spark.apache.org/docs/latest/mllib-feature-extraction.html。
2.6.3 基于r語言的特征開發
前面提到了4個資料表:
正如前面讨論的,我們可以對第三方資料應用特征提取技術,然後對最終合并的(連接配接)資料集進行特征選擇。
如果我們在r語言中利用spark r notebook實作它們,就必須用到一些r程式包。如果使用reporters,我們可以執行以下指令:
關于reportersr程式包的更多資訊請通路:https://cran.r-project.org/web/packages/reporters/reporters.pdf。