從懵逼到菜逼------菜逼來談數據挖掘
大概半年前,我和幾個朋友參加了滴滴出行的大數據比賽,比賽過程中依靠抱清北大佬們的大腿終於進入前50強,拿了個T恤和獎狀,滿足了我小小的虛榮心。在那次大概3個月後我和小隊裡面除請北外其餘的小大佬們繼續參加了某個數據平台的大數據比賽,初賽勝出進入複賽,最終進入前30,未能進入決賽。在這裡分享一下這段日子積累下來的經驗,幫助一下還在懵逼階段的同學早日進入菜逼的階段,也通過寫這篇文章來暴露一下自己的不足,希望有大神指正。
先談論一下數據挖掘的一些基本概念,近年來比較火熱的詞比較相似的是數據挖掘和機器學習,往往初學者喜歡在兩者之間畫等號,但這其實是錯誤的。從準確定義上來說,數據挖掘不是機器學習,同時也不是其子集和超集,而是兩者之間存在一部分的交集。但為什麼很多時候,我們看見的數據挖掘就是用機器學習做的呢?這是因為,在大數據的背景下,機器學習的方法有足夠的數據去擬合那條傳說中的上帝函數。這就讓機器學習的方法在大數據的場景下有較優異的表現。而據我所知,數據挖掘除了使用機器學習外,還有就是使用人工規則,這方面沒有深入的了解,不談。
再來談談特徵和模型,許多初學者或許也是像我一樣開始的,從具體的演算法學起,因為這看起來像是基礎,但其實很多時候我們都可以藉助工具包來實現。當然了,這並不是說你不用學了,(沒人要求你樣樣精通,但多了解一些,對於你對整個系統,流程的把控能力是有幫助的),我個人的看法是,建議用【該提取怎樣的特徵】或【什麼樣的數據分布適合這個模型】來學習當前模型。
這裡還有一個初學者容易疏忽的地方,很多懵逼的初學者會認為整個流程都是一個演算法,input,output就OK了,但事實是,往往需要多個演算法進行結合輔助,比如先聚類,然後按照每一個類別,分別訓練N個分類器,或者是多個分類演算法進行模型融合。
其次就是訓練的樣本權重也是值得注意的部分,比如說,傳統的二分類的情況,正類的99個,負類1個,那麼你的分類器把全部都分類成正類,正確率也達到99%,但顯然這個模型是不可能被使用的。應當對數據少數進行加權或對多數樣本採樣等預處理。
說了模型,說特徵。在剛開始的時候,我都以為是把數據像幼兒園排隊一樣排好,扔進模型里就好了,然而不是,數據挖掘的金句就是GIGO,Garbage in,Garbage out,垃圾進垃圾出。再通俗點,數據挖掘應當針對有潛在規律,但因為種種原因,肉眼不可測,比如數據的維度太高等等,才需要計算機去擬合出這條上帝函數,而並非隨便的一坨shit都可以挖出金子出來。
因此,用來挖掘的原材料,數據,專業點叫特徵,就顯得格外重要。這裡可以分開兩個部分來總結,數據預處理和特徵工程,特徵工程意指在給出特徵中挑選出最好的特徵組合,數據預處理大致可以分成幾個方向離群點,異常點,對某些特徵進行編碼,歸一化,標準化等等。其中說一下編碼的問題。假設有RGB三種顏色,你應該怎麼編碼呢?當我是懵逼時期的時候,馬上就回答R:1,G:2,B:3,但事實上,這種編碼方法導入了一個隱藏的關係,即在空間上,G到R的距離要比B到R的距離要少,當然有些情況是符合的,比如空氣污染的級別,但在這個例子中,RGB三種顏色在一般情況下並沒有級別之分,此時的編碼應改為R:100,G:010,B:001,這樣就保證了RGB中兩兩的空間距離保持一致。在特徵太多的時候按照這個編碼方式,將會導致維度災難,不了解解決方法,希望大神指教。
這裡還有一個問題,特徵工程的目的在於挑選最佳特徵,但挑選特徵的前提是你得有特徵啊,因此特別想問一下,除了一些常見的統計特徵,最值,方差,平均,眾數等,以及一些業務常識外,還能用什麼指標來作為特徵?
最後,在此多謝在這比賽過程中隊友們的支持和幫助……這並不是數據挖掘方面的教程,僅僅是我個人的經驗總結,僅供參考,歡迎各位前輩指點。
推薦閱讀:
※公開課 | 獨家首發:微軟Hackathon冠軍隊帶你玩轉新零售,堪比外掛的秘笈分享
※荷賽獎2018年年度圖片大獎入圍決賽作品揭曉