1. 程式人生 > >《精通資料科學:從線性迴歸到深度學習》筆記

《精通資料科學:從線性迴歸到深度學習》筆記

《精通資料科學:從線性迴歸到深度學習》

—— Harrytsz

第 1 章 資料科學概述

The purpose of computing is insight, not numbers. —— Richard Hamming
(計算的目的不在於數字,而在於洞察事物。)

資料驅動(Data Driven)、大資料(Big Data)、分散式計算(Parallel Computing)等,這些概念雖然各有側重點,但它們都毫無爭議地圍繞著同一個主題:如何從實際的生活中提取出資料,然後利用計算機的運算能力和模型演算法從這些資料中找出一些有價值的內容,為商業決策提供支援。這正是資料科學的核心內涵。

傳統的資料分析手段是所謂的商業智慧(Business Intelligent,BI)。這種方法通常將資料按不同的維度交叉分組,並在此基礎上,利用統計方法分析每個組別裡的資訊。比如商業智慧中最常見的問題是:“過去3個月,通過搜尋引擎進入網站併成功完成註冊的新使用者裡,年齡分佈情況如何?若將上面的使用者群體按照年齡段分組,各組中有多大比例的使用者在完成註冊後,完成了至少一次消費?”

傳統的資料分析雖然非常有用,能揭示一些資料的直觀資訊。但這樣的方法猶如盲人摸象,只能告訴我們資料在某個區域性的情況,而不能給出資料的全貌。而且對於某些問題,這樣的結果顯得有些不夠用。比如使用者註冊之後完成消費的比例與哪些因素相關?又比如對於某個客戶,應該向他推薦什麼樣的商品?在這些場景下,我們需要更加精細的資料分析工具——機器學習和統計模型。在我看來,這些內容是資料科學的核心內容。

1.1 挑戰

在資料科學實踐中,我們使用較為複雜的機器學習的統計模型對資料進行精細化的分析和預測。這在工程實現和模型搭建方面都提出了挑戰。

1.1.1 工程實現的挑戰

資料科學在工程上的挑戰可以大致分為3類:特徵提取、矩陣運算和分散式機器學習。

  1. 一個建模專案是否能夠成功在很大程度上取決於建模前的 特徵提取。特徵提取包含資料清洗、資料整合、變數歸一化等。經過處理後,原本攪作一團的原始資料將被轉換為能被模型使用的特徵。這些工作需要大量的自動化程式來處理,特別是面對大資料時,因為這些大資料無法靠“人工”來檢查。在一個典型的建模專案中,這部分花費的時間遠遠大於選擇和編寫模型演算法的時間。

  2. 對於複雜的數學模型,計算機通常無法給出模型引數的解析解,需要使用類似隨機梯度下降法等最優化演算法來估算模型引數的近似解。使用最優化演算法求解的過程通常需要大量的迴圈迭代計算,才能使引數到達收斂值附近。因此即使是在處理很小規模的資料集時,求解複雜的模型引數所需要的時間也是相當長的。而且模型在結構上越複雜,需要求解的引數也就越多。對這些大量的模型引數同時做更新,在數學上對應著矩陣運算。 但傳統的CPU架構並不擅長這樣的運算,這就導致模型訓練需要耗費大量的時間。為了提高模型的訓練速度,需要將相應的矩陣運算(模型引數的估算過程)移植到GPU或者特製的計算晶片上,比如TPU。

  3. 近年來,隨著分散式系統的流行和普及,儲存海量資料成為了業界的標配。為了能在海量的資料上使用複雜模型,需要將原本在一臺機器上執行的模型演算法改寫成能夠在多臺機器上並行執行。

在這裡插入圖片描述

1.1.2 模型搭建的挑戰

資料科學對模型搭建的要求也可以總結為3點:模型預測效果好、模型引數是穩定且“正確的”、模型結果容易解釋。

  1. 模型的預測效果好:這是資料科學的關鍵。而一個模型的預測效果取決於它的假設是否被滿足從數學上來看,任何一個模型除去假設部分,它的其他推導都是嚴謹的數學演算,是無懈可擊的。因此模型假設就像模型的阿喀琉斯之踵,是它唯一的薄弱環節。當問題的場景或資料滿足模型假設時,模型的效果一定不會差,反之,則預測效果就無法保證了。但是在實際生產中,針對一個具體的問題,幾乎不可能找到一個模型,它的假設被百分之百地滿足。這時就需要避重就輕,通過特徵提取等手段,儘量避免違反那些對結果影響很大的假設。這就是為什麼說“所有的模型都是錯的,但是,其中有一些是有用的”。

  2. 除了被用來對未知資料做預測之外,模型的另一個重要的功能就是對已有資料做分析比如哪個變數對結果的影響最大或者某個變數除了被用來對未知資料做預測之外,模型的另一個重要的功能就是對已有資料做分析,比如哪個變數對結果的影響最大或者某個變數對結果到底是正向影響還是負向影響等。這些分析結果在很大程度上依賴於模型引數的估計值,後者的準確與否直接決定了分析結果的質量。但問題是,模型引數的估計值是不太“可靠”的。例如從訓練資料中隨機抽取兩個不完全一樣的資料子集 AABB,然後用這兩個資料集分別訓練同一個模型。得到的引數估計值幾乎不可能完全一樣。從數學角度來看,這說明模型引數的估計值其實一個隨機變數,具體的取值取決於訓練模型時使用的資料。於是我們要求這些估計值是“正確”的:圍繞引數的真實值上下波動(也就是說它們的期望等於引數的真實值)。我們還要求這些估計值是穩定的:波動的幅度不能太大(也就是說它們的方差比較小)。這樣就可以把引數估計值的“不可靠性”控制在可接受的範圍內。

  3. 資料科學家將模型搭建好,並不是一個數據科學專案的終點。為了充分發揮資料的價值,需要將模型結果應用到實際的生產中,比如為手機銀行APP架設實時反欺詐系統,或者將利用新搭建的車禍風險模型為汽車保險定價等。參與這個過程的不僅有懂模型的資料科學家,還有更多非技術的業務人員。而後者往往是使用模型的主力,比如根據反欺詐系統的結果,對可疑使用者進行人工稽核,又或者向客戶解釋為什麼他的車險比別人貴。為了幫助他們更好地理解模型結果,需要將複雜深奧的模型翻譯成直觀的普通語言。這要求模型是能被解釋的,而且是容易被解釋的。

在對資料搭建模型時,有兩種截然不同的思路,如圖所示:

圖1-2

一種是所謂的資料模型(Data Model),也就是傳統的統計模型。這種思路假設資料的產生過程是已知的(或者是可以假設的),可以通過模型去理解整個過程。因此,這類模型通常具有很好的可解釋性,分析其穩定性的數學工具也很多,但是在實際生產中,這些模型的預測效果並不好,或者更準確地說,單獨使用時,預測效果並不理想。

另一種是所謂的演算法模型(Algorithm Model),也就是機器學習。這類模型是人工智慧的核心內容,它們假設資料的產生過程是複雜且未知的。建模的目的是儘可能地從結構上“模仿”資料的產生過程,從而達到較好的預測效果。但代價是模型的可解釋性很差,而且模型穩定的分析方法也不多。

正如上面的分析,統計學和機器學習在某些方面具有極好的互補性。因此在實際的生產中,為了將一個數據科學專案做得儘可能完美,我們需要將這兩種思路結合起來使用。比如使用機器學習的模型對資料建模,然後借鑑資料模型的分析工具,分析模型的穩定性和給出模型結果的直觀解釋。

1.2 機器學習

1.2.1 機器學習與傳統程式設計

傳統的程式設計方式是人類自己積累經驗,並將這些經驗轉換為規則或者數學公式,然後就是用程式語言去表示這些規則和公式。而機器學習可以被看作一種全新的程式設計方式。在進行機器學習時,人類不需要總結具體的規則或公式,只需要制定學習的步驟,然後將大量的資料輸入給計算機。後者可以根據資料和人類提供的學習步驟自己總結經驗,自動升級。計算機“學習”完成之後得到一個模型程式,而這個有程式生成的程式可以達到甚至超過人類自身的水平。

1.2.2 監督式學習和非監督式學習

機器學習根據所用的訓練資料可以分為兩類。一類是監督式學習,這類模型的特點是訓練資料裡有標註。監督式學習按照標註的型別又可以細分為兩類:分類迴歸。如果資料裡的標註表示事物的類別,也就是說標註是離散的,那麼相應的模型就屬於分類。如果標註表示具體的數量,也就是說標註是連續的,那麼相應的模型就屬於迴歸。

另一類是非監督式學習,這類模型所用的訓練資料裡並沒有標註,只有自變數x。非監督式學習根據用途又可以分為兩類:聚類降維。把“距離”相近的點歸於一類叫作聚類,而將高維空間裡的資料對映到低維度空間叫作降維。具體內容見下圖:
在這裡插入圖片描述

1.3 統計模型

模型幻覺:表面上找到了資料變動的規律,但其實只是由隨機擾動引起的數字巧合。因此在對搭建模型時,必須時刻保持警惕,不然很容易掉進資料的“陷阱”裡,被資料給騙了,這正是統計學的研究重點。這門學科會“小心翼翼”地處理它的各種模型,以確保模型能擺脫資料中隨機因素的干擾,得到穩定且正確的結論,正好彌補機器學習在方面的不足。



第 3 章 數學基礎:惱人但又不可或缺的知識

IfIf peoplepeople dodo notnot believebelieve thatthat mathematicsmathematics isis simple,simple, itit isis onlyonly becausebecause theythey dodo notnot realizerealize howhow complicatedcomplicated lifelife is.is.
JohnvonNeumann——John von Neumann

我們並不理解數學,只是越來越習慣它。
—— 馮·諾依曼

毫無疑問,數學是資料科學的靈魂。不管是機器學習或是統計學模型,從本質上講都是數學模型。

  • 矩陣和向量空間:矩陣是資料的基本表示形式。
  • 概率:概率作為量化隨機性的工具,是統計學和貝葉斯框架的核心內容。
  • 微積分:是計算機解決最優化問題的理論基礎。

3.1 矩陣和向量空間

3.1.1 標量、向量與矩陣


從數學上來講,標量和向量其實是比較特殊的矩陣。標量可以被看作一個 1×11 \times 1 的矩陣 ,而 kk 維行向量可以看作一個 1×k1 \times k 的矩陣,kk 維列向量可以看作一個 k×1k \times 1 的矩陣。
在數學上,通常使用 xi,jx_{i,j}

3.1.2 特殊矩陣

3.1.3 矩陣運算

3.1.4 向量空間

3.2 概率:量化隨機

3.2.1 定義概率:事件和概率空間

3.2.2 條件概率:資訊的價值

3.2.3 隨機變數:兩種不同的隨機

3.2.4 正態分佈:殊途同歸

3.3 微積分

第 4 章 線性迴歸:模型之母

第 5 章 邏輯迴歸:隱藏因子

第 6 章 工程實現:計算機是怎麼算的

第 7 章 計量經濟學的啟示:他山之石

第 8 章 監督式學習:目標明確

第 9 章 生成式模型:量化資訊的價值

第 10 章 非監督式學習:聚類與降維

第 11 章 分散式機器學習:集體力量

第 12 章 神經網路:模擬人的大腦

第 13 章 深度學習:繼續探索