數據科學簡介:分數據、結構和數據科學管道(一)
數據是一種商品,但是,如果無法處理數據,數據的價值就值得懷疑。數據科學是一個多學科領域,其目的是從所有形式的數據中提取價值。本文從數據、數據結構以及可用于將數據轉換為價值的高級流程方面來探討數據科學領域。
數據科學是一個流程。這并不是說數據是機械的,缺乏創造力的。但是,當您深入到數據處理的各個階段,從再加工數據源和清理數據到機器學習及最終的可視化,您就會看到將原始數據轉換為洞察過程中涉及到一些獨特步驟。
您采用的步驟可能也會有所不同(參見圖 1)。在探索性數據分析中,您可能有一個已清理好的、準備導入 R 中的數據集,您將您的結果可視化,但不會將模型部署到生產環境中。在另一個環境中,您可能處理真實的數據,除了數據擴展和準備之外,您還需要一個數據合并和清理流程,然后才能訓練您的機器學習模型。
圖 1. 數據科學管道

讓我們首先分析一下數據科學管道的元素,以了解該流程。
數據及其結構
數據有多種形式,但總體上講,它可以分為 3 類:結構化、半結構化和非結構化(參見圖 2)。結構化數據是組織結構嚴謹的數據,存在于諸如數據庫(或逗號分隔值 [CSV] 文件)之類的存儲庫中。這類數據可以輕松訪問,而且數據的格式使其適用于查詢和計算(通過使用結構化查詢語言 (SQL) 或 Apache™ Hive™ 等語言)。非結構化數據根本沒有任何內容結構(例如音頻流或自然語言文本)。介于它們之間的是半結構化數據,這些數據可能包括元數據,或者可通過使用語義標簽比非結構化數據更輕松地進行處理的數據。這類數據不是完全結構化的,因為最低級的內容可能仍是需要經過某種處理才有用的數據。
圖 2. 數據模型

結構化數據是最有用的數據形式,因為可以直接對它進行處理。根據約略的估計,結構化數據僅占總數據的 20%。全球的大部分數據(80% 的可用數據)是非結構化或半結構化數據。
請注意,定義為非結構化數據的大部分數據實際上都擁有結構(比如一個包含元數據和內容標簽的文檔),但內容本身缺乏結構,而且無法直接使用。因此,它們被視為非結構化數據。
數據工程
2016 年的一次調查發現,數據科學家花了 80% 的時間來收集、清理和準備要用在機器學習中的數據。剩余 20% 時間花費在使用機器學習算法來挖掘數據或為數據建模上。盡管這是該流程最無趣的部分,但這種數據工程非常重要,而且會影響從機器學習階段得到的結果的質量。
我將數據工程分為 3 個部分:整理、清理和準備??紤]到此階段涉及的工作單調乏味,一些人將此流程稱為數據再加工。
數據整理
數據整理流程的簡單定義是,處理原始數據,讓數據可用于數據分析或訓練一個機器學習模型。數據工程的這部分可能包括從一個或多個數據集獲取數據(并將數據集精簡為所需的數據),規范化數據以便從多個數據集合并的數據能夠保持一致,并將數據解析到某種結構或存儲系統中供進一步使用??紤]來自一個聯邦開放數據網站的公有數據集。此數據可能以電子表格文件形式存在,您需要將其導出為更容易被數據科學語言(CSV 或 JavaScript Object Notation)接受的格式。該數據源也可能是一個網站,自動化工具可從中抓取數據。最后,該數據可能來自多個來源,這要求您為結果數據集選擇一種通用格式。
這個結果數據集可能需要進行后期處理,以便支持將其導入到分析應用程序中(比如 R Project for Statistical Computing、GNU Data Language 或 Apache Hadoop)。然后,您可以通過數據整理流程來識別、收集、合并和預處理一個或多個數據集,為數據清理做好準備。
數據清理
收集和合并數據集后,下一步是清理數據。未經處理的數據集通常是雜亂的,存在許多常見問題,包括缺少值(或太多值)、糟糕的或錯誤的分隔符(用于分隔數據)、不一致的記錄,或者不夠充足的參數。在一些情況下,數據無法修復,因此必須刪除數據;在其他情況下,可以手動或自動更正數據。
當數據集的語法正確時,下一步就是確保它的語義也正確。在包含數字數據的數據集中,有一些需要更仔細地檢查的異常值。可以通過統計分析,查看均值、平均值,以及標準差來發現這些異常值。搜索異常值是一種輔助的清理方法,旨在確保數據統一且準確。
數據準備
數據工程中的最后一步是數據準備(或預處理)。這一步假設您有一個已清理的數據集,它可能未準備好供機器學習算法進行處理。下面給出了兩個可以應用此準備的示例。
在某些情況下,數據規范化可能很有用。通過使用規范化,您可以轉換一個輸入特征,將數據均勻分布到一個機器學習算法可接受的范圍內。此任務可以像線性擴展一樣簡單(從一個任意的范圍,給定一個從 -1.0 到 1.0 的域最小值和最大值)。您也可以應用更復雜的統計方法。數據規范化可以幫您避免在訓練過程中卡在局部最優值上(在神經網絡環境中)。
另一種有用的數據準備技術是將類別數據轉換為數字值??梢钥紤]這樣一個數據集,其中包含一組表示某個特征的符號(比如 {T0..T5})。作為一個字符串,這無法用作神經網絡的輸入,但可以使用 one-of-K 模式(也稱為獨熱編碼)來轉換它。
在這種模式中(如圖 3 所示),您識別特征的符號數量(在本例中為 6),然后創建 6 個特征來表示原始字段。對于每個符號,都只設置一個特征,這樣就可以正確地表示該符號的不同元素。這樣做的代價是增加了維度,但通過這么做,可以提供一個更適合機器學習算法的特征矢量。
圖 3. 將字符串轉換為一個獨熱矢量

一種替代方法是整數編碼(其中 T0 可以為值 0,T1 為值 1,依此類推),但這種方法可能引入表示問題。例如,在實值輸出中,0.5 表示什么?
機器學習
在此階段,您將創建并驗證一個機器學習模型。有時,機器學習模型是一款產品,它被部署在應用程序的上下文中來提供某種功能(比如分類或預測)。在其他情況下,機器學習算法只是一種實現目標的方法。在這些情況下,該產品不是經過訓練的機器學習算法,而是它生成的數據。
本節將探討機器學習模型的構造和驗證。要進一步了解如何利用數據進行機器學習,請參閱從干凈數據集中獲取寶貴洞察。
模型學習
數據科學管道的精髓是數據處理步驟。在一種模型中,算法可以處理數據,提供一個新數據產品作為結果。但是,從生產意義上講,機器學習模型就是產品本身,它被部署來提供洞察或增加價值(比如部署一個神經網絡來為保險市場提供預測功能)。
機器學習方法多種多樣,如圖 4 所示。下面這個較小的機器學習算法列表(按學習模型分隔)演示了通過機器學習提供的功能的豐富程度。
圖 4. 機器學習方法

點擊查看大圖顧名思義,監督學習由評價者驅動,提供了根據評論結果來修改模型的方法。給定一個包含某個類(即依賴變量)的數據集,訓練該算法來生成正確的類,并在未生成正確的類時修改模型。訓練模型,直到它達到一定的準確度,此時您可以部署它來為未見過的數據提供預測。
相比之下,無監督學習沒有類;它檢查數據并根據隱藏在數據中的某種結構來進行分組。您可以在推薦系統中應用這些類型的算法,根據查看或購買歷史記錄對客戶進行分組。
最后,強化學習是一種半監督學習算法,在模型制定的一定數量的決策得到滿意結果時提供獎勵。這種模型用于創建能在某種狀態/操作空間中進行合理操作的代理(比如撲克牌代理)。
模型驗證
訓練一個模型后,它在生產中會如何表現?理解模型行為的一種方法是利用模型驗證。一種常見的模型驗證方法是保留少量可用的訓練數據,對最終模型進行測試(這些數據被稱為測試數據)。您使用訓練數據來訓練機器學習模型,在模型完成時使用測試數據來驗證它對未見過的數據的概括程度(參見圖 5)。
圖 5. 用于模型驗證的訓練數據與測試數據

利用訓練數據集構造一個測試數據集可能很復雜。隨機采樣可能很有效,但也有可能帶來問題。例如,隨機采樣是否會對給定的類過度采樣,或者隨機采樣是否很好地覆蓋了該數據或其特征的所有潛在類?按照某種分布對數據類進行隨機采樣,這樣可能有助于避免過擬合(即訓練過于接近訓練數據)或欠擬合(即沒有建模訓練數據,而且缺乏概括能力)。
操作
操作是指數據科學管道的最終目標。這個目標可以像創建一個可視化的數據產品一樣簡單,可以向一些受眾講述一個故事,或者回答在使用數據集訓練一個模型之前創建的一些問題?;蛘?,它可以像在生產環境中部署機器學習模型那樣復雜,處理未見過的數據來提供預測或分類。本節將探討這兩種情況。
模型部署
當機器學習階段的產品是一個您將用于未來數據的模型時,將該模型部署到一個生產環境,以便將它應用于新數據。此模型可以是一個預測系統,它接受歷史財務數據(比如每月銷量和收入)作為輸入,并提供一個公司是否是合理的收購目標的分類。
在類似這樣的場景中,部署的模型通常不再是學習和簡單地應用數據進行預測。有充分的理由來避免在生產中學習。在深度學習環境中(深層神經網絡),已確定對抗性攻擊可能改變網絡的結果。例如,在一個圖像處理深度學習網絡中,對圖像應用攝動分析可以改變圖像的預測功能,這樣就不會“看到”一輛坦克,深度學習網絡看到的是一輛汽車。隨著深度學習的不斷應用,對抗性攻擊也在增加,新的攻擊矢量是積極研究的一部分。
模型可視化
在較小規模的數據科學中,所尋求的產品是數據,而不一定是機器學習階段產生的模型。此場景是數據科學管道中最常見的操作形式,其中的模型提供一種生產數據產品的方法,以回答關于原始數據集的某個問題??梢暬x項豐富多樣,而且可以用 R 編程語言、gnuplot 和 D3.js(可以生成非常有吸引力的互動情節)生成這些選項。
結束語
本文探討了一種用于機器學習的通用數據管道,其中涵蓋了數據工程、模型學習和操作。本系列的下一篇文章將探討使用公有數據集進行預測的兩種機器學習模型。