数据科学指南
摘要:?本文為學習數據科學的指南,從編程語言、數據庫管理、數據收集和整理方法、特征工程、機器學習模型、模型評估方面進行講述。
數據科學是一個相當龐大且具有多樣化的領域,側重于數學、計算機科學和領域專業知識。但是在本文中大部分內容將涉及到數學基礎知識,當然也會介紹一些計算機科學的基本原理。
編程語言
在數據科學領域,最受歡迎的編程語言是Python和R語言。然而我也遇到過使用C/c++、Java和Scala的。而我個人推薦使用Python,因為它可使用所有現存數據庫,并且擁有可以查詢各種數據庫和維護交互式Web UI的專用庫。常用的Python庫有matplotlib,numpy,pandas和scikit-learn。
?
數據庫管理
大多數的數據科學家都屬于數學家或數據庫設計師兩個陣營中的一個。如果你是第二個,那么本文對你不會有太大幫助,因為你已經足夠厲害了。如果你和我一樣屬于第一個,并且覺得編寫一個雙重嵌套的SQL查詢非常困難。那么對我們來說,了解查詢優化(SQL和noSQL系統)非常重要了。
?
Map Reduce
考慮到Apache項目一直在不斷的添加新工具,想要完全掌握大數據技術非常困難。對于大數據技術,我個人推薦學習Hadoop或Spark,二者都使用類似的Map Reduce算法,除了Hadoop使用磁盤,而Spark使用內存。常見的Spark包裝器包括Scala、Python和Java。
?
數據收集和清理
既然我們已經講解了所需要的軟件,那么現在要開始過渡到數學領域了。在這部分過程中通常需要有一些解析背景,可能是收集傳感器數據,分析網站或者進行調查。收集完數據后還需要將其轉換為可用的表單(例如JSON行文件中的鍵值存儲),之后這些數據還必須要進行一些數據質量檢查。下面將介紹一些常見的質量檢查:
NaN的處理
NaN或者叫“Not A Number”是常用于表示丟失的數據。如果特定要素的NaNs數量很少,那么通常可以用(整個數據集或一個窗口的)平均值或(對于稀疏數據集)0來填充NaN。數據集中的NaN通常表示:
?
類不平衡
尤其是對有監督的學習模型來說,平衡類或目標是非常重要的。然而在欺詐的情況下,嚴重的階級不平衡很常見(例如數據集中只有2%是真正的欺詐)。這些信息對于決定特征工程、建模和模型評估非常重要。
?
單變量分析
在尋找異常值和異常峰值時,對單個特征的單變量分析(忽略協變量eeects)非常重要。通常選擇的單變量分析是直方圖。
雙變量分析
在雙變量分析中,每個特征都會與數據集中的其他特征相比較。其中包括相關矩陣,協方差矩陣或者我個人最喜歡的散點矩陣。
?
散點矩陣可以讓我們發現隱藏的模式,例如:
-應該一起設計的模型。
-為避免多重性需要消除的特性。
多重共線性實際上是多個模型(線性回歸等)的問題,因此需要相應的處理。
特征工程
一旦完成了數據的收集、清理和分析工作,就該開始創建模型中使用的特性了。在這一節中,我們將介紹一些常見的特征工程策略。
轉換
有時候特性本身并不能提供有用的信息。例如,想象一下使用互聯網數據。你會得知YouTube Messenger用戶使用幾百兆字節,而YouTube用戶使用千兆字節。對此最簡單的解決方法是獲取值得對數。另一個問題是使用分類值。雖然分類值在數學世界很常見,但計算機只能識別數字,為了使其在計算機中具有數學意義,需要先轉換為數值。分類值執行獨熱編碼(One Hot Encoding)非常常見,如果在給定的記錄中存在獨熱編碼,則為每個分類值創建一個新特性。下面給出獨熱編碼的例子:
?
降維
有時過多的稀疏維會妨礙模型的性能。對于這種情況需要使用降維算法。一種常用的降維算法是主分量分析(PCA)。
?
特征選擇
你已經設計了特征列表,現在是時候選擇特征來幫助你構建用例最佳模型了。這一節解釋了常見的類別及其子類別:
過濾方法
?
篩選方法通常用來作為預處理步驟。特征的選擇與任何機器學習算法無關,而是根據它們在各種統計測試中的分數和結果變量的相關性來選擇的。相關性是一個很主觀的術語,這類的常用方法是皮爾遜相關系數、線性判別分析、方差分析和卡方檢驗。
包裝方法
在包裝方法中,我們嘗試使用特性的子集來訓練模型。基于在之前的模型中得出的推論,我們決定添加或刪除子集中的特性。這個問題本質上是一個搜索問題。然而這些方法通常計算成本昂貴。常用方法是正向選擇、反向消除和遞歸特性消除。
嵌入式方法
?
嵌入式方法結合了過濾器方法和包裝方法的特性。該方法是由具有內置特性選擇方法的算法實現的。常見的嵌入式方法包括LASSO和RIDGE。下面給出了方程中的正則化表達式:
LASSO:
?
RIDGE:
?
這就是說,為了訪談了解LASSO和RIDGE背后的機制非常重要。
機器學習模型
機器學習模型分為兩大類:監督和無監督。當標簽可用時為監督學習,不可用時為無監督學習。注意,監督標簽!不要混淆監督和非監督學習的區別。另外,在運行模型之前,人們常犯的一個錯誤是沒有對特性進行規范。雖然有些模型能自動糾正該錯誤,但是很多模型(如線性回歸)對縮放非常敏感。因此使用前一定要使特性正常。
線性和邏輯回歸
?
線性和邏輯回歸是最基本也是最常用的機器學習算法。在做任何分析之前,確保首先將線性/邏輯回歸作為了基準!一個普通的訪談者通常使用更復雜的模型(如神經網絡)來開始他們的分析。毫無疑問,神經網絡是非常精確的。然而,基準是也很重要。如果簡單的回歸模型已經有98%的精度并且非常接近過度擬合,那么就不需要得到一個更復雜的模型了。也就是說,線性回歸用于連續目標,而邏輯回歸則用于二進制目(主要是因為sigmoid曲線將特征輸入輸出為0或1)。
?
決策樹和隨機森林
決策樹是一個比線性回歸模型稍微復雜的模型。決策樹算法根據信息增益在不同的特征上進行分割,直到它遇到一個純粹的葉子(即一組只有1個標簽的記錄)。決策樹可以在一定數量的分裂后停止以阻止獲得純葉子(解決過度擬合問題的常用策略)。
?
計算出來的信息增益非常重要,是常見的面試問題,所以要確保你知道如何計算。常用的信息增益計算函數是基尼系數和熵。
?
從上圖可知,與基尼系數相比,熵為信息增益提供了更高的價值但也造成了更多的分裂
?
當決策樹不夠復雜時,通常會使用隨機森林:只不過是在數據的子集上增加了多個決策樹,并完成了最后的多數投票。但是如果無法正確確定樹的數量,隨機森林算法就會過度擬合。
K-Means
K-Means是一種將數據點分類成簇的無監督學習模型。該模型根據提供的簇數量迭代的找到最優的集群中心,并將矩心移動到中心。
?
?
簇的數目可能會很容易找到,尤其是如果曲線上沒有kink。另外,要認識到K-Means算法是在本地優化的而不是全局優化。所以簇的數量取決于初始化值,而最常用的初始化值是在K-Means++中計算出來的,它可以使初始值盡可能不同。
神經網絡
神經網絡是目前每個人都在關注的熱門算法之一。
?
本文重要的是讓你了解基本的機制以及反向傳播和消失梯度的概念。同時還要認識到神經網絡本質上是一個黑盒子。如果案例研究要求創建解釋模型,那么只能選擇不同的模型或準備解釋如何找到權重對最終結果的貢獻(例如,圖像識別過程中隱藏層的可視化)。
集成模型
最后,單個模型可能不能準確地確定目標,某些特性需要特殊的模型。在這種情況下,需要使用多個模型的集成。請看下面的舉例:
?
由上圖可得,模型是分層或在堆棧中,每一層的輸出是下一層的輸入。
模型評估
分類得分
?
評估模型性能最常見的方法之一是:計算正確預測的記錄的百分比。
學習曲線
學習曲線也是評價模型的常用方法,通過該方法可以評估我們的模型是否太復雜或太簡單。
?
如果模型不夠復雜,最終會得到高偏差和低方差。而當模型過于復雜,則會得到低偏差和高方差。但是在現在模型非常穩定的前提下,隨著訓練數據的隨機化,結果也會有很大變化,所以不要混淆方差和偏差的區別!為了確定模型的復雜性,我們使用以下學習曲線來查看:
?
在學習曲線上,我們改變了X軸上的訓練測試分割點,并計算了訓練和驗證數據集上模型的準確性。如果兩者之間的差距太大,說明模型太過復雜即過度擬合了。如果兩條曲線都沒有達到預期的精度,而且曲線之間的距離很小,那么就說明數據集有很大的偏差。
受試者工作特征(ROC)
在處理帶有嚴重類別失衡的欺詐數據集時,分類分數就沒有多大意義了。相反,接收器的工作特性或ROC曲線是個更好的選擇。
?
45度線是隨機線,曲線下的面積或AUC為0.5。曲線離45度線越遠,AUC越高,模型就越好。模型所能得到的最高值是AUC值等于1,即曲線與軸形成直角三角形。ROC曲線還可以幫助調試模型。例如,如果曲線的左下角更接近于隨機線,則意味著模型在Y=0處分類錯誤。而如果它在右上角是隨機的,則意味著錯誤發生在Y=1處。同樣,如果曲線上有波峰,則說明模型不穩定。因此,在處理欺詐模型時,ROC是你最好的朋友。
本文由阿里云云棲社區組織翻譯。
文章原標題《Data Science Interview Guide》
作者:Syed Sadat Nazrul
原文鏈接
干貨好文,請關注掃描以下二維碼:
總結
- 上一篇: 【程序猿必备】数据结构与算法精选面试题
- 下一篇: 黑科技揭秘:网红“天空物联网飞艇”服务范