一、大數據的誕生
2016年AlfaGo打敗了圍棋大師李世石,創下了機器人戰勝人類的記錄,讓我們認識到了大數據技術的威力。這件事情讓很多企業都嗅到了商業的機遇,覺得大數據技術蘊含著近乎無限的可能性,就像當年「互聯網技術」剛出現一樣。那麼,大數據是不是真的這麼厲害,真的可以為我們的生活帶來如此無比的價值呢?大數據究竟能為我們做些什麼呢?
如果空談大數據這東西有什麼好處,任何人都可以給你扯一大堆,但是最終如果有人問大數據這東西到底是什麼?卻很少有人能夠給出十分具體的定義。基於我個人的理解,大數據可以人為是「數據挖掘」的2.0版本。所以,如果你懂得基本的常用數據挖掘的技術的話,入門大數據應該不是一件太困難的事情。那麼大數據(數據挖掘2.0)到底比一般的數據挖掘方法(1.0版本)高級在哪裡呢?其核心就是在於對「大數據集」的依賴。數據挖掘1.0是針對小規模數據集或者中等規模數據集進行分析的,一般有個幾百條數據、幾千條數據進行分析就不得了了。而數據挖掘2.0則主要是針對海量數據集進行分析的技術,往往動輒百萬甚至千萬級別的數據。
現在問題來了,數據挖掘1.0版本好好的,為什麼要進階2.0版本?咋一看好像沒事兒找事兒似的。數據量少多好?收集數據又省事兒,分析數據還快,對吧!幹嘛平白無故給自己增加工作量呢?為了回答這個問題,首先解釋數據挖掘1.0版本是怎麼回事兒。
數據挖掘本質是做預測的,通常我們的目的是給定一些數據 去預測那些想了解的信息 。我們數據集裡面有一些已經配好對的 和 ,通過這些數據對可以構造個統計模型 。用 就可以在給定新的 的情況下去預測新的 了。那麼要想對 預測的好,就要讓模型 厲害一點。由於模型 是從已有數據集(包含很多數據對的)中用某些統計模型「訓練」出來的,所以決定 厲不厲害的因素就主要為兩個:
1) 和 的數據對的信息
即: 有標註的數據樣本
2)選擇的基礎統計模型
即:模型的基本形式,如:
線性回歸?Logistic回歸?決策樹?SVM (Support Vector Machine)?...
如果不好理解,打個比方。換句話說,一道非常好吃的菜,取決於「食材」好不好,也取決於做飯的人的技術。菜,就是那個最後得到的預測模型 ,食材是數據集中的 和 的數據對,而是做飯的人的技術就對應所選擇的基礎統計模型。根據這個思路,我們認為有兩種路子可以提升 的性能:
(1)換個好廚子!
(2)選取更上好的「食材」!
在數據挖掘1.0的年代,大家想的都是怎麼樣找個好廚子!也就是在演算法層次、模型層次進行創新。大家認為,決策模型 之所以預測效果不好,是選取的基礎模型的方案太爛了!所以需要找更牛更炫的基礎模型!這也是當今很多工科背景的博士生整天在做的事兒,拍腦袋出個好的模型發SCI,自己創造個叫什麼「張XX演算法」或「楊XX演算法」出來碾壓別人的智商!然而,換廚子的路子,最後被證實是有一定問題的!就是數據挖掘領域常常提到的Overfitting的問題!過擬合問題!
什麼叫過擬合?不好理解?換句話說,就是「想太多」。一個挺簡單的數量關係,非得用一個特複雜的模型來解釋,最後結果就是這個模型 被過度解讀了。那麼為什麼模型 被過度解讀了呢?
其原因是所收集的數據是存在系統性的誤差的。什麼是系統性誤差?假設實際情況中 和 之間是嚴格的線性關係,那麼就可以用:
來表示模型 。注意,這個模型後面有個小項 , 是與 沒有關係的,這個小項就是系統誤差!系統誤差,就是現實中所有除了 以外,所有會影響到 的那些因素,且這些因素與 是互相獨立的!
由於人的精力是有限的,我們不可能把所有因素找到,所以只找到了那個最主要的因素X並構造了對應的數據集。的存在使得這個數據集中的數據對 和 看起來不是標準的線性關係,於是我們就會各種琢磨 和 之間的關係…是二次關係?是指數關係?還是包含各種高次冪項?最後我們挑了一個包含高次冪項的基礎模型去回歸,結果糟透了!實際上只需要用一個線性的模型去獲得 就最靠譜了好不好?!於是我們就"想太多"了,結果就過擬合了!
那麼,對給定數據集用好廚子去分析就會過擬合,所以我們用個一般的廚子炒菜是不是更穩當可靠呢?也就是說模型越簡單越好?對么?這是數據挖掘1.0中當提到過擬合問題時經常提到的解決方案,也稱作「奧坎姆剃刀原則」,例如決策樹學習中的剪枝操作,用一個簡單一點兒的決策樹代替一個複雜的決策樹往往效果更好一些。簡化模型的方案是一種基於實踐經驗的技術方案,並沒有獲得理論上嚴謹的證明,然而很多情況下被驗證是有效的,我就不再多論述了。
科學嚴謹的對抗「過擬合」問題的方案應當是怎樣的呢?實際上就是如下所述的數據挖掘2.0(大數據)的思路!由於我們在挖掘模型M的歷程中,沒有人會告訴我們X和Y真實的關係[1],我們只有一個個數據對,所以我們只能對基礎模型進行各種天馬行空的假設。我們不知道 和 到底是不是線性的?或者是不是二次的?我們只能看到數據對,我們也不知道我們到底是不是想多了還是想少了!想多了過擬合,想少了一樣很麻煩!那怎麼辦呢?我們只能先假設這個模型 無比複雜,複雜到可以是「任意」複雜的形式,也就是說,我們應當選取一個足夠複雜的基礎模型可以涵蓋幾乎所有數量關係。然後,基於數據集合里的數據對的關係,不斷地去訓練整個基礎模型,在訓練的過程中,一方面獲得模型的參數,另一方面也不斷地「簡化」模型的形式,最後獲得我們想要的M和它對應的樣子!
在這種方法下,我們對數據集合中的數據對有非常高的要求!就是要求,數據對看起來必須是有代表性的!有代表性的數據應當長什麼樣子?應當看起來貌似與沒什麼關係!因為我們對是一無所知的(如果知道就可以放到X裡面處理了),所以我們沒法選擇收集到的數據中,與到底呈現什麼數量關係,我們唯一能做的,就是在科學[2]的方法下,收集儘可能多的 和 的數據對。當數據對足夠多的情況下, 就會看起來與 越沒什麼關係,這樣訓練出來的模型就越符合客觀情況。
收集更多的數據,就是提高數據集合的質量,也就是所謂的數據挖掘2.0的思路!在更多的數據下,用儘可能複雜的模型,然後讓數據告訴你模型M究竟長什麼樣!於是,為了更多的數據,就有了「雲存儲」、「數據倉庫」這些新概念;為了更複雜的模型,就有了「MLP」,「CNN」「RNN」等炫酷的深度學習統計模型;為了讓計算機更快地在大數據集下訓練複雜的模型,就有了「網格計算」,「並行計算」,「雲計算」等高端的商業化名詞。然後懂了這些,你就可以更好地吹牛調侃,究竟什麼是大數據了!
說明:
[1]
在計量經濟學派中是事先知道X和Y的數量關係的,這些數量關係是基於已有的理論假設。這套解決問題的路子,和這裡所論述的數據挖掘的路子不一樣,沒有優劣之分,都是主流的數據分析的思想。[2]
收集更多的數據對於大數據框架下的數據分析是有效的,但是必須保證數據的收集過程是科學客觀的,盡量避免被某些「內生」因素所干擾。忽視了這一點,即使數據量足夠大,但仍然會導致過擬合的問題。推薦閱讀:
※大數據架構師技能
※大數據計數原理1+0=1這你都不會算(二)No.50
※大數據計數原理1+0=1這你都不會算(九)No.64
※大數據計數原理1+0=1這你都不會算(八)No.60
※三個月成為大數據工程師,你需要具備哪些條件?