作者|鄂維南

什麼是資料科學?它和已有的資訊科學、統計學、機器學習等學科有什麼不一樣?

作為一門新興的學科,資料科學所依賴的兩個因素是:一是資料的廣泛性和多樣性;二是資料研究的共性。現代社會的各行各業都充滿了資料。這些資料的型別多種多樣,不僅包括傳統的結構化資料,也包括網頁、文字、影像、視訊、語音等非結構化資料。正如我們後面將要討論到的,資料分析本質上都是在解反問題,而且常常是隨機模型的反問題。所以對它們的研究有著很多的共性。例如自然語言處理和生物大分子模型都用到隱馬爾科夫過程和動態規劃方法,其最根本的原因是它們處理的都是一維的隨機訊號。再如影像處理和統計學習中都用到的正則化方法,也是處理反問題的數學模型中最常用的一種手段。

資料科學主要包括兩個方面:用資料的方法來研究科學和用科學的方法來研究資料。前者包括生物資訊學、天體資訊學、數字地球等領域;後者包括統計學、機器學習、資料探勘、資料庫等領域。這些學科都是資料科學的重要組成部分, 但只有把它們有機地整合在一起,才能形成整個資料科學的全貌。

用資料的方法來研究科學,最典型的例子是開普勒關於行星運動的三大定律,如圖1。開普勒的三大定律是根據他的前任,一位叫第谷的天文學家留給他的觀察資料總結出來的。表1是一個典型的例子。這裡列出的資料是行星繞太陽一週所需要的時間(以年為單位)和行星離太陽的平均距離(以地球與太陽的平均距離為單位)。從這組資料可以看出,行星繞太陽執行的週期的平方和行星離太陽的平均距離的立方成正比,這就是開普勒的第三定律。

圖1:用資料的方法研究科學的典型例子:開普勒三大定律

開普勒雖然總結出他的三大定律,但他並不理解其內涵。牛頓則不然,牛頓用他的第二定律和萬有引力定律把行星運動歸結成一個純粹的數學問題,即一個常微分方程組。如果忽略行星之間的相互作用,那麼各行星和太陽之間就構成了一個兩體問題。我們很容易求出相應的解,並由此推出開普勒的三大定律。

牛頓運用的是尋求基本原理的方法,它遠比開普勒的方法深刻。牛頓不僅知其然,而且知其所以然。所以牛頓開創的尋求基本原理的方法成了科學研究的首選模式。這種方法在上個世紀初期達到了頂峰:在它的指導下,物理學家們提出了量子力學。原則上來講,我們日常生活中所碰到的自然現象都可以從量子力學出發得到解決。量子力學提供了研究化學、材料科學、工程科學、生命科學等幾乎所有自然和工程學科的基本原理。這應該說是很成功的。但事情遠非這麼簡單。狄拉克指出,如果以量子力學的基本原理為出發點去解決這些問題,那麼其中的數學問題太困難了。所以如果要想有進展,還是必須做妥協,也就是說要對基本原理作近似。

儘管牛頓模式很深刻,但對複雜的問題,開普勒模式往往更有效。舉一個例子,表2中形象地描述了一組人類基因組的SNP資料(Single Nucleotide Polymorphism data)。一組研究人員在全世界挑選出1064個志願者,並把他們的SNP資料數字化,也就是把每個位置上可能出現的10種鹼基對用數字來代表,對這組資料作主成分分析,就可以得到圖2中的結果。其中橫軸和縱軸代表的是第一和第二奇異值所對應的特徵向量。這些向量一共有1064個分量,對應1064個志願者。值得注意的是這組點的顏色所代表的意義。可以看出,人類進化的過程可以從這組資料中通過最常見的統計分析的方法主成分分析展示出來。主成分分析是一種簡單的資料分析方法。其原理是對資料的協方差矩陣作特徵值分解。

圖2:對SNP資料作主成分分析的結果告訴我們人類進化的過程

這樣的問題,如果採用從基本原理出發的牛頓模式,則基本上是沒法解決的。而基於資料的開普勒模式則是行之有效。開普勒模式最成功的例子是生物資訊學和人類基因組工程。正是因為它們的成功,材料基因組工程等類似的專案也被提上了議事日程。同樣,天體資訊學、計算社會學等等也成了熱門學科。這些都是用資料的方法來研究科學問題的例子。影像處理是另外一個典型的例子。影像處理是否成功是由人的視覺系統決定的。所以要從根本上解決影像處理的問題,就需要從理解人的視覺系統著手,並瞭解不同質量的影像,對人的視覺系統產生什麼樣的影響。這樣的理解當然很深刻,而且也許是我們最終所需要的。但從目前來看,它過於困難也過於複雜。解決很多實際問題時並不會真正使用它,而是使用一些更為簡單的數學模型。

用資料的方法來研究科學問題,並不意味著就不需要模型。只是模型的出發點不一樣,不是從基本原理的角度去找模型。就拿影像處理的例子來說,基於基本原理的模型需要描述人的視覺系統以及它與影像之間的關係。而通常的方法則可以是基於更為簡單的數學模型,如函式逼近的模型。

怎樣用科學的方法來研究資料?這包括以下幾個方面的內容:資料採集、資料儲存和資料分析。下面我們將主要討論資料分析。

資料分析的中心問題

在討論資料分析之前,我們先來看看資料的型別。比較常見的資料有以下幾種型別:

1. 表格:這是最為經典的資料型別。在表格資料中,通常行代表樣本,列代表特徵。

2.點集(point cloud):很多資料都可以看成是某空間中的點的集合。

3. 時間序列:文字、通話和DNA序列等都可以看成是時間序列。它們也是一個變數(通常可以看成是時間)的函式。

4. 影像:可以看成是兩個變數的函式。

5. 視訊:時間和空間座標的函式。

6. 網頁和報紙:雖然網頁或報紙上的每篇文章都可以看成是時間序列,但整個網頁或報紙又具有空間結構。

7. 網路資料:網路本質上是圖,由節點和聯絡節點的邊構成。

除了上述基本資料型別外,還可以考慮更高層次的資料,如影像集,時間序列集,表格序列等。資料分析的基本假設就是觀察到的資料都是由背後的一個模型產生的。資料分析的基本問題就是找出這個模型。由於資料採集過程中不可避免地會引入噪聲,通常這些模型都是隨機模型。

當然,在大部分情況下,我們並不感興趣整個模型,而只是希望找到模型的一部分內容。例如我們利用相關性來判斷兩組資料是不是相關的,利用排序來對資料的重要性進行排名,使用分類和聚類將資料進行分組等。

很多情況下,我們還需要對隨機模型作近似。最常見的是把隨機模型近似為確定型模型。所有的迴歸模型都採用了這樣的近似。基於變分原理的影像處理模型也採用了同樣的近似。另一類方法是對其分佈作近似,例如假設概率分佈是正態分佈,或假設時間序列是馬爾科夫鏈等。

資料的數學結構

要對資料作分析,就必須先在資料集上引入數學結構。基本的數學結構包括度量結構、網路結構和代數結構。

1. 度量結構。在資料集上引進度量(距離),使之成為一個度量空間。文字處理中的餘弦距離函式就是一個典型的例子。

2. 網路結構。有些資料本身就具有網路結構,如社交網路。有些資料本身沒有網路結構,但可以附加上一個網路結構。例如度量空間的點集,我們可以根據點與點之間的距離來決定是否把兩個點連線起來,這樣就得到一個網路結構。PageRank演算法是利用網路結構的一個典型例子。

3. 代數結構。我們可以把資料看成是向量、矩陣,或更高階的張量。有些資料集具有隱含的對稱性也可以用代數的方法表達出來。

在上述數學結構的基礎上,我們可以問更進一步的問題,例如拓撲結構和函式結構。

1. 拓撲結構。從不同的尺度去看資料集,得到的拓撲結構可能是不一樣的。最著名的例子是3×3的自然影像資料集裡面隱含著一個2維的克萊因瓶。

2. 函式結構。對點集而言,尋找其中的函式結構是統計學的基本問題。這裡的函式結構包括:線性函式,用於線性迴歸;分片常數,用於聚類或分類;分片多項式,如樣條函式;其他函式如小波展開等。

資料分析的主要困難

我們碰到的資料通常有這樣幾個特點。一是資料量大。大家只要想一想,全球資訊網上有多少網頁,這些網頁上有多少資料,就可以對現在碰到的資料量之大有點感覺了。資料量大帶來的挑戰是計算方面的,因此一些隨機方法就顯得重要,另外一種思路是分散式計算。第二是資料維數高。例如前面提到的SNP資料是64萬維的。第三是資料型別複雜。資料可以是網頁或報紙,也可以是影像,視訊,多種型別的資料給資料融合帶來困難。第四是噪音大。資料在生成、採集、傳輸和處理等流程中,均可能引入噪音。這些噪音的存在給資料清洗和分析帶來挑戰。需要有一定的修正功能的模型,例如影像中的正則化和機器學習中的去燥自編碼器。

這裡面最核心的困難是維數高。維數高給我們帶來的是維數災難(curse ofdimensionality)。即模型的複雜度和計算量隨著維數的增加而指數增長。

那麼怎樣克服維數高帶來的困難?通常有兩類方法。一類方法就是將數學模型限制在一個極小的特殊類裡面,如線性模型。另一類方法是利用資料可能有的特殊結構,例如稀疏性、低維或低秩和光滑性等。這些特性可以通過對模型作適當的正則化而實現,也可以通過降維方法來實現。

總而言之,資料分析本質上是一個反問題。因此,處理反問題的許多想法,如正則化,在資料分析中扮演了很重要的角色。這也正是統計學與統計力學的不同之處。統計力學處理的是正問題,統計學處理的是反問題。

演算法的重要性

跟模型相輔相成的是演算法以及這些演算法在計算機上的實現。特別是在資料量很大的情況下,演算法的重要性就顯得尤為突出。從演算法的角度來看,處理大資料主要有兩條思路。

第一條思路是降低演算法的複雜度,即計算量。通常我們要求演算法的計算量是線性標度的,也就是說計算量跟資料量成線性關係。但很多關鍵的演算法,尤其是優化方法,還達不到這個要求。對特別大的資料集,例如說全球資訊網上的資料或社交網路資料,我們希望能有次線性標度的演算法,也就是說計算量遠小於資料量。這就要求我們採用抽樣的方法。最典型的例子是隨機梯度下降法(Stochastic Gradient Descent,SGD)。第二條思路是分散式計算,它的基本想法是把一個大問題分解成很多小問題,然後分而治之。著名的MapReduce框架就是一個這樣的例子。

就現階段而言,對演算法的研究被分散在兩個基本不相往來的領域裡:計算數學和電腦科學。計算數學研究的演算法基本上是針對像函式這樣的連續結構。其主要的應用物件是微分方程等。電腦科學處理的主要是離散結構,如網路。而現實資料的特點介於兩者之間:資料本身是離散的,而往往資料的背後有一個連續的模型。所以要發展針對資料的演算法,就必須把計算數學和電腦科學研究的演算法有效地結合起來。